/etc/sudoers を LDAP で一元管理とかできないのかなぁ、と思っていたら、ちゃんと対応してた。
利用方法はわりと簡単で、上記リンクの README.LDAP (ソースに同じものが同梱されてる)を見ればすぐわかるけど、一応ここにやったことをメモ。ほとんど README からの抜粋です。
手元の Slackware に元から入っている sudo は LDAP 対応していないので、ここからダウンロード して以下の手順でインストール。
$ ./configure --with-ldap $ make $ sudo make install
でもって /etc/ldap.conf に以下の記述を追加。(元々 LDAP は利用していて、基本的な設定はできているので、追加は一行だけ。)
sudoers_base ou=SUDOers,o=southpark
LDAP 側の設定はまずスキーマの追加。
# # schema file for sudo # attributetype ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoOption $ description ) )
次に sudoers 用のコンテナ ou=SUDOers, o=southpark と、デフォルト設定用の cn=defaults, ou=SUDOers, o=southpark を LDAP エントリに追加。
dn: ou=SUDOers,o=southpark objectclass: organizationalunit ou: SUDOers dn: cn=defaults,ou=SUDOers,o=southpark objectclass: top objectclass: sudorole cn: defaults sudoOption: ignore_local_sudoers
sudoOption: ignore_local_sudoers があると、/etc/sudoers ファイルを見なくなる。
最後に sudo 用 role エントリを追加して準備 OK。
dn: cn=role1,ou=SUDOers,o=southpark changetype: add objectclass: top objectclass: sudorole cn: role1 sudouser: miya sudohost: ALL sudocommand: ALL
sudouser, sudohost, sudocommand は複数設定可。! で否定になる。なので、特定のユーザだけ許可しない、という場合には、
sudouser: ALL sudouser: !miya
なんて書き方もできる。同様に特定のホストだけ許可しない、という場合には、
sudohost: ALL sudohost: !kenny
とかできるし、特定のコマンドだけ許可しない、という場合には、
sudocommand: ALL sudocommand: !/sbin/reboot
とかできる。もちろんこれらの組み合わせも OK。
あと、ユーザではなくグループで指定したい場合には
sudouser: %group
とする。(これは README.LDAP には明記されてない。/etc/sudoers の書き方から類推すればわかるけど。)