sudoで特定のコマンドだけ許可する方法

wheelグループでroot権限のすべてを許可することはできないけど、一部のコマンドに限って許可したい。

個人ではなく、組織でサーバ管理をしていると、そんなニーズって結構ありますよね。今日はそんなTipsをご紹介します。

sudoersの基本構文

sudoersの編集には、「visudo」コマンドを使います。
ここで見てみると、結構サンプルの記述が書いてあります。

これはwheelグループにすべての操作を許可するもの。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

これはusersというユーザーに、この端末内でのシャットダウン権限を与えるもの。

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

基本構文は、次のようになっています。

[ユーザー名orグループ名]  許可対象=(誰のロールで)コマンド
(誰が・どこで・誰の代わりに・何を)

Apacheの再起動を許可する例

さてでは例として、
「ユーザーhogeが、サーバdaceloでApacheの再起動だけできる」
という状態を実現してみましょう。

この場合は

hoge dacelo=/etc/rc.d/init.d/httpd restart

と書けばOK。例文にあるようなlocalhost=では動きませんでした。

実際にやってみると…

[hoge@dacelo ~]$ sudo /etc/rc.d/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

はい、うまくいきました。

例ではホスト名を指定しましたが、LDAP連携とかしていないローカルアカウントでしたら、

hoge ALL=/etc/rc.d/init.d/httpd restart

でも代わりません。

複数コマンドの許可

この例だと、restartしかできないので、他の引数は許可されません。

広告

[hoge@dacelo ~]$ sudo /etc/rc.d/init.d/httpd status
ユーザー hoge は'/etc/rc.d/init.d/httpd status' を root として dacelo 上で実行することは許可されていません。すみません

断られてしまいました…。
statusの確認もできるようにしてあげましょう。

$ sudo visudo

hoge ALL=/etc/rc.d/init.d/httpd restart,/etc/rc.d/init.d/httpd status

複数コマンドを許可したい場合は、カンマで区切って設定します。

[hoge@dacelo ~]$ sudo /etc/rc.d/init.d/httpd status
httpd (pid  29837) を実行中...

はい、実行できるようになりました。

ちなみに今回は、引数まで含めて限定したコマンドとして許可しましたが、

$ sudo visudo

hoge ALL=/etc/rc.d/init.d/httpd

として登録すると、httpdの引数指定すべてを許可できます。ケース・バイ・ケースですね。

複数ユーザーの許可

グループ名を指定することで複数ユーザーへの許可ができますが、もっと細かくユーザー単位で設定したい場合もあります。そんな場合は、コマンドと同様に、ユーザー名もカンマで区切ればOk。
$ sudo visudo

hoge,fuga ALL=/etc/rc.d/init.d/httpd restart,/etc/rc.d/init.d/httpd status

これで、ユーザーhogeもユーザーfugaもhttpd restartができるようになりました。

About: dacelo


Comments are closed.