Help us understand the problem. What is going on with this article?

CentOSのsudoまとめ

More than 3 years have passed since last update.

設定

設定ファイル

設定ファイルは/etc/sudoers。設定を変更するにはvisudoコマンドを使うべき。シンタックスエラーなどをチェックしてくれる。/etc/sudoers.dにファイルをおいてもインクルードされる。

基本的な書き方は

ユーザー名  ホスト名=なれるユーザー  許可するコマンド

実際にはかなり複雑な文法があり、詳しくはman sudoersに多くの例付きで書いてある。

また、主にDefaultsで始まる行でオプションを設定でき、それもman sudoersに書いてある。

よく使うであろうオプション:

requiretty   端末が必要
timestamp_timeout   パスワードのキャッシュ時間(分単位)

wheelグループに入っているユーザーのsudoを許可する

%wheel        ALL=(ALL)       ALL

この状態だとsudoしたときにパスワードを聞かれる(rootでなくsudoを実行したユーザーのパスワード)。
入力したパスワードは5分間キャッシュされ、その間は再度sudoしても聞かれなくなる。
このキャッシュ(というかcredential)が保存される場所は/var/db/sudo

パスワードなしで実行できるようにしたければ

%wheel ALL=(ALL)       NOPASSWD: ALL

sshからのsudo

CentOSのデフォルトでは、制御端末を持たないプロセスからのsudoが禁止されている。つまり、

$ ssh ホスト名 "sudo whoami"
sudo: sorry, you must have a tty to run sudo

のように怒られてしまう。対策としては下記のようにssh -tとして端末を割りつけるか、

$ ssh -t ホスト名 "sudo whoami"
root

またはサーバの/etc/sudoers

Defaults    !requiretty

と書いておく。

sudoコマンド

基本的な使い方

$ sudo -u ユーザー名 コマンド

$ sudo -u yamada ls /var/www/html

コマンドをクォートで囲って1個の引数として渡す

$ sudo sh -c "ls /"

### -Eをつけると現在の環境変数を引続
$ sudo -E sh -c 'echo $HOME'

複数のコマンドを実行する

$ sudo sh -c 'whoami; whoami'

ログインシェルの状態で実行するには-i

$ sudo -i pwd

-iをつけると/etc/passwdからログインシェルを取得してそれをシミュレートするので、~/.bash_profileなども読み込まれる。

バッチ処理でsudoするときは-n (non-interactive)がオススメ

パスワードが必要な場合、入力を待つことなしにすぐにエラーになる。

環境変数について

CentOSのデフォルトでは

  • 環境変数はリセットされる(実効ユーザーのHOMEになる)
  • ただしHOSTNAMEなど一部の環境変数は変わらない
  • その辺は/etc/sudoersalways_set_homeenv_resetenv_keepで設定されている
  • 環境変数の扱いはFreeBSDでは違ったような気がする(少なくとも10年位前のでは)

参考

Sudo - ArchWiki

aosho235
1981年生まれ。駅すぱあとの会社で新規サービスを開発しています。好きなものはOS~ミドルウェアのレイヤー、開発を楽にするためのツールやフレームワークの整備、自分自身が便利だと思うものを作ること。
https://aosho235.com/
val
経路検索システム「駅すぱあと」をはじめ、全国のデータと高い信頼性をベースにさまざまなサービスを展開。
https://www.val.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした