この記事は2020年に今は無き別サービスに投稿した記事を、今更Qiitaに再投稿したものです。
前回はクライアントからLDAPアカウントでログインするところまでいきました。今回はユーザーをごとの権限を管理するために、sudoとLDAPを連携させていきます。
サーバーの設定
必要なschemaファイルを取り寄せるため、sudo-ldap
をインストールします。sudo
が削除されて置き換えられますが、機能に不足は生じません。schemaファイルさえ手に入ればサーバーにsudo-ldap
は不要になるので、sudo
をインストールし直してもよいです。
root@server:~# apt install sudo-ldap
sudo-ldap
をインストールすると、/usr/share/doc/sudo-ldap/schema.OpenLDAP
が生成されます。このままではわかりにくいので、/etc/ldap/schema
へコピーしsudo.schema
にファイル名を変更します。
root@server:~# cp /usr/share/doc/sudo-ldap/schema.OpenLDAP /etc/ldap/schema/sudo.schema
sudo.conf
を作成し、以下の内容を記述します。
include /etc/ldap/schema/sudo.schema
これをldifファイルに変換し、サーバーに読み込ませます。
root@server:~# slaptest -f sudo.conf -F /etc/ldap/slapd.d
autofsのときと同様、所有者をopenldap:openldap
に変更します。
root@server:~# chown openldap:openldap /etc/ldap/slapd.d/cn=config/cn=schema/sudo.ldif
sudoers.ldif
を新規作成し、以下の内容を記述します。
root@server:~# vi sudoers.ldif
dn: ou=sudoers,dc=example,dc=local
objectClass: organizationalUnit
ou: sudoers
dn: cn=default,ou=sudoers,dc=example,dc=local
objectClass: top
objectClass: sudorole
cn: default
sudoOption: ignore_local_sudoers
sudoUser: ALL
sudoCommand: /sbin/shutdown
sudoHost: ALL
dn: cn=admin,ou=sudoers,dc=example,dc=local
objectClass: top
objectClass: sudorole
cn: admin
sudoOption: ignore_local_sudoers
sudoUser: %admin
sudoCommand: ALL
sudoHost: ALL
sudoの設定を格納するためにdc=example,dc=local
の下にou=sudoers
を作成します。ALL
とすることで全てのユーザー、コマンド、ホストをそれぞれ指定できます。sudoUser
を%[グループ名]
とするとグループを指定できます。
cn=default
では、全てのユーザーが全てのホストで/sbin/shutdown
を実行できるように許可しています。cn=admin
では、グループadmin
に所属するユーザーに全てのコマンドを実行する許可を与えています。工夫がここで活きました。
以下のコマンドでサーバーに適用します。
root@server:~# ldapadd -x -D cn=admin,dc=example,dc=local -W -f sudoers.ldif
クライアントの設定
クライアントにもsudo-ldap
をインストールします。こちらは削除してはいけません。
root@client:~# apt install sudo-ldap
インストールすると、/etc/sudo-ldap.conf
が生成されます。コメントアウトを解除しつつ、以下を記述します。
root@client:~# vi /etc/sudo-ldap.conf
BASE dc=example,dc=local
URI ldap://192.168.x.x
sudoers_base ou=sudoers,dc=exapmle,dc=local
/etc/nsswitch.conf
の最終行に以下のように追記します。
root@client:~# vi /etc/nsswitch.conf
sudoers: files ldap
これにて完成です。誰かのお役に立てれば幸いです。