LoginSignup
20
29

More than 5 years have passed since last update.

CentOSのsudoまとめ

Last updated at Posted at 2015-11-14

設定

設定ファイル

設定ファイルは/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

20
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
29