とあるVPSの設定を覗いていたら、sudoの設定がちゃんとされてた。sudoesの書き方としてちょっとした設定サンプルになるんじゃないかなと思って掲載しておきます。
sudoersのファイル
#### Sample /etc/sudoers file. ## ## This file MUST be edited with the 'visudo' command as root. ## ## See the sudoers man page for the details on how to write a sudoers file. ## # Cmnd_Alias USER_MANAGE = /usr/local/sbin/vadduser, /usr/sbin/pw, \ /usr/local/sbin/vedituser, /usr/sbin/rmuser, \ /usr/local/sbin/vaddhost, /usr/bin/quota, \ /usr/local/sbin/vlistuser, /usr/sbin/adduser, \ /usr/local/sbin/vrmuser, /usr/sbin/edquota, \ /usr/local/sbin/vlist Cmnd_Alias PROG_MANAGE = /usr/local/sbin/vinstall, \ /usr/local/sbin/vuninstall Cmnd_Alias WEB_MANAGE = /usr/bin/su webadmin, \ /usr/bin/su -l webadmin, \ /usr/local/sbin/restart_apache, \ /usr/sbin/apachectl, \ /usr/local/sbin/vaddhost ### ## User alias specification ### User_Alias ADMINUSER = %wheel User_Alias WEBMASTERS = %webadmin # ### ## User specification ### # ## root and users in group wheel can run anything on any machine as any user root ALL = (ALL) ALL #%wheel ALL = (ALL) ALL # with their password #%wheel ALL = NOPASSWD: ALL # without any password # # ## ADMINUSER ALL = NOPASSWD: USER_MANAGE, PROG_MANAGE ## users in the WEBMASTERS User_Alias may run any command as ## user www (which owns the web pages) or simply su to www. WEBMASTERS ALL = (webadmin) NOPASSWD: ALL, (root) NOPASSWD: WEB_MANAGE
記載されてないコマンドの実行結果
sudoresで設定されてないコマンドを実行するとこのようになる。
sudoなし
パーミッションエラー
[takuya@host ~]$ vipw vipw: /etc/ptmptmp: Permission denied [takuya@host ~]$ ls /usr/sbin/vipw -l -rwxr-xr-x 1 root root 9900 Oct 13 2007 /usr/sbin/vipw
sudoをつけて実行は
[takuya@host ~]$ sudo vipw Password: Sorry, user takuya is not allowed to execute '/usr/sbin/vipw' as root on host.local .
記載されてないコマンドは実行が拒否される。
設定
sudoersファイルでコマンドを指定して実行コマンドを制限するには
コマンドリストに名前をつける
Cmnd_Alias WEB_MANAGE= コマンド一覧
コマンドリストを使えるユーザーを指定する
WEBMASTERS ALL = (webadmin) NOPASSWD: ALL, (root) NOPASSWD: WEB_MANAGE
ユーザーを別名で登録してリストにする。
User_Alias WEBMASTERS = %webadmin
以上の設定で
webadmin グループのユーザーを WEBMASTERSという別名をつける
WEBMASTERSユーザーに、WEB_MANAGEコマンドを許可する
WEB_MANAGEで使えるコマンド一覧を設定する
という一連の流れになります。
追記 User_Aliasの追記
WEBMASTERS ALL = (webadmin) NOPASSWD: ALL, (root) NOPASSWD: WEB_MANAGE
の詳細な説明。
それを解釈すると次の2つになる。
WEBMASTERS ALL = (webadmin) NOPASSWD ALL, (root) NOPASSWD: WEB_MANAGE
ユーザー(alias) | ホスト | どのユーザになれて | どのコマンドが実行できる |
WEBMASTERS | ALL | (webadmin) NoPassword | ALL |
WEBMASTERS | ALL | (root) Nopassword | ALL |
言葉にすると
WEBMASTERSは、全てのホストで、webadminになれて、そのすべてのコマンドが実行できる
WEBMASTERSは、全てのホストで、rootにパスワードなしで、WEB_MANAGEコマンドが実行できる
ということになる
参考
以前のエントリ
sudoersを変更する、よく使う設定例 - ブックマクロ開発に
linux manpage日本語訳
http://linuxjm.sourceforge.jp/html/sudo/man5/sudoers.5.html
http://www.maruko2.com/mw/一般ユーザーを_sudo_できるようにする