sudoの設定方法
sudoコマンドについて
sudoとは
sudoは、UNIX系OSにおいてユーザが別のユーザの権限レベル(デフォルトではroot権限)でプログラムを実行するためのコマンドです。
あるコマンドの実行時に、別ユーザ(rootを含む)のパスワードを教えることなく、実行権限を適用させることを可能になります。
suコマンドの代わりに使われることが多く、完全なroot権限は不要だが運用上で一部必要になる場合に利用します。
sudoコマンド形式
sudo [オプション] [コマンド]
: オプション
-l そのユーザーに対して許可されたコマンドを表示する
-u root以外のユーザーで実行するときに指定
-s 環境変数 SHELLで指定されたシェルを実行する
sudoの読み方
sudoコマンドの呼び方は「エスユードゥ」や「すどぅー」など様々あります。
suコマンドを「エスユー」と呼ぶ人は「エスユードゥ」と呼ぶ傾向にあります。
なお、suコマンドは「substitute user」の略です。「super user」や「switch user」と覚えてしまう人が多くいます。
sudoの設定
sudoersの編集
sudoコマンドの設定ファイルは「/etc/sudoers」です。
設定ファイルを編集するために「visudo」という専用のコマンドが用意されています。
エディタなどで直接「/etc/sudoers」ファイルを編集した場合、設定ミスによって大きなトラブルが起こる可能性があります。
# visudo
※visudoコマンドではviエディターでファイル編集操作を行います。
sudoのユーザ権限を設定する
sudoでユーザが実行可能なコマンドを下記の形式で定義します。
ユーザ ホスト=(権限) コマンド
各項目の意味は下記の通りです。
項目 | 意味 |
---|---|
ユーザ | sudo可能なユーザの設定。グループを設定する場合は「%」を先頭につけます。 |
ホスト | ホストに対する許可設定です。(通常は ALL でよい) |
(権限) | sudoされるユーザ名です。ALLならば、全てのユーザ権限(root権限)を使うことができます。 |
コマンド | 利用できるコマンド名を指定します。ALLならば、権限で設定したユーザが実行可能な全てのコマンドを利用できます。 |
例えば下記のような設定であれば、user01は「すべての接続元(ALL)」から「全ユーザ権限(ALL)」で「全コマンド(ALL)を実行可能」という意味になります。
user01はsudoコマンドを用いて、システム上の全ての操作を行えるようになります。
root ALL=(ALL) ALL
user01 ALL=(ALL) ALL
パスワードなしでsudoを実行可能にする。
sudoコマンド実行時にパスワードを求めないようにするには次のように記述します。
user01 ALL=(ALL) NOPASSWD: ALL
sudoで毎回パスワード尋ねる。
sudo コマンドを実行する時に毎回パスワードを求めるようにするには次のように記述します。
Defaults timestamp_timeout = 0
timestamp_timeoutのデフォルト値は「5」であり、パスワードを入力すると「5分間」は入力を求められません。
値を「0」にすることで毎回パスワードを求められるようになります。
rootパスワードでsudoを実行する。
sudoコマンド実行時に、対象となるユーザのパスワードではなく、rootのパスワードを尋ねるように設定するにはDefaultsに「rootpw」を記述します。
Defaults timestamp_timeout=0,rootpw
特定コマンドのみ許可する
sudoで特定のコマンドのみ実行を許可すること場合、次のように記述します。
user01 ALL=(root) /sbin/reboot,/sbin/shutdown
コマンドに引数を使用させたくない場合は「""」を記述します。
user01 ALL = (root) /sbin/reboot ""
エイリアス機能
「ユーザ ホスト=(権限) コマンド」のそれぞれの項目にはエイリアス機能を利用できます。
エリアスを利用することにより、複雑な設定をした場合でも可読性を保てます。
エイリアス定義方法は以下の通りです。なお、エイリアス名は必ず大文字で定義します。
ユーザーエリアス
User_Alias ADMIN = user01, user02, user03
接続元エリアス
Host_Alias ADMINNET = 192.168.24.5, 192.168.24.10
権限エリアス
Runas_Alias USER= root ,tomcat
コマンドエリアス
Cmd_Alias ADMINCMD = /etc/init.d/httpd
Cmd_Alias SHOUTDOWN = /sbin/shutdown, /sbin/reboot, /sbin/halt
上記エリアスを利用した設定は以下の通りです。
ADMIN ADMINNET = (root) ALL
ADMIN ALL = (USER) ADMINCMD