sudoの設定ファイルについて

2021/08/11に公開

sudoersで出てくる設定

root ALL=(ALL) ALL
sudoコマンド利用時にでくわすこいつが気になったので調べてみました。

ユーザ設定の基本構造は、
who where = (as_whom) what
[誰が どのホストで = (誰に変身して) 何を]
とのことです。
(man sudoers(5)デフォルトの sudo 用セキュリティ・ポリシー・モジュールより)

who

これは権限を与える対象のユーザーやグループを指します。
例えば、あるユーザーに対して何らかの設定を行いたい場合は

hoge ALL = (ALL) ALL
グループの場合は

%hoge_group ALL = (ALL) ALL
となります。

where

コマンドを実行するホストを設定することができます。

as_whom

変身の対象となるユーザー・グループを指定することが出来ます。
ユーザー:グループ
のように記述し、カンマで区切ることで複数のプロパティを設定可能です。

hoge ALL = (root, bin : operator, system) ALL
例えばこのように指定することで
[hoge]$ sudo -u bin -g operator /bin/kill

のようにoperatorグループに所属したbinユーザーとして/bin/killコマンドを実行することが可能となります。

what

実行を許可するコマンドのパスを指定する。
デフォルトではsudoコマンドを実行する際、現在のユーザーのパスワードを求められるがNOPASSWDオプションにより省略できます。
例えば、パスワードを指定していないhogeユーザーに権限を与える際、

# パスワードを求められるので実行出来ない
ALL = (ALL) ALL

# パスワードを求められないので実行可能
ALL = (ALL) NOPASSWD: ALL

となる。

例)パスワードを指定せずに作成したユーザーにadduserを実行する権限を与えてみる

ユーザーの追加
# adduser hoge

sudoersへの設定の追加(visudoコマンドで編集)

.
.
hoge    ALL=(ALL) NOPASSWD: /usr/sbin/adduser
.

adduserコマンドがsudoで使用可能になる
[hoge]$ sudo adduser genki

終わりに

$ sudo <command>でとにかくスーパーユーザーとして実行するものだと思っていましたが、sudoの本来の目的はあくまで現在のユーザーを他のユーザーやグループに変身してコマンドを実行するのが目的であると理解しました。

参考

man sudoers

Discussion