/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 の書き方から類推すればわかるけど。)