それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sudoersのサンプル

とある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コマンドが実行できる

ということになる