AlmaLinux 9でLDAPの設定をやろうとしてみたら、浦島太郎状態で七転八倒したので、引っかかったところだけをざっくりメモ
389dsの初期設定
このへんを眺めながら、サーバを作って、memberof, referential-integrity などのプラグインを有効にし、Let's EncryptでTLS証明書を取ってldapsを話せるようにする。
sudoers用のLDAP設定を作る
こんな感じのldifでsudoers用のOUおよびそれに対するACI(アクセス許可リスト)を作る
dn: ou=sudoers,dc=(どめいん)
objectClass: top
objectClass: organizationalUnit
ou: sudoers
aci: (targetattr="cn || sudoUser || sudoHost || sudoCommand || sudoRunAs || su
doRunAsUser || sudoRunAsGroup || sudoOption || sudoNotBefore || sudoNotAfter
|| sudoOrder || nsUniqueId || description || objectClass")(targetfilter="(obj
ectClass=sudoRole)")(version 3.0; acl "Enable anyone sudoRole read"; allow (r
ead, search, compare)(userdn="ldap:///anyone");)
あとはsudoerのエントリをそれっぽく書く
dn: cn=%staff,ou=sudoers,dc=(どめいん)
objectClass: top
objectClass: sudoRole
cn: %staff
sudoUser: %staff
sudoHost: ALL
sudoCommand: ALL
そして、対応するグループを作ってユーザを突っ込む
dsidm -b dc=(どめいん) (インスタンス名) posixgroup create --cn staff --gidNumber (GID)
dsidm -b dc=(どめいん) (インスタンス名) group add_member staff uid=(ユーザ名),ou=people,dc=(どめいん)
ちなみに、ユーザの作成は直接ldifを書かずに、こんな感じでdsidmでやることを想定
dsidm -b dc=(どめいん) (インスタンス名) user create --uid (ログイン名) --cn "(フルネーム)" --displayName "(フルネーム)" --homeDirectory "/home/(ログイン名)" --uidNumber -1 --gidNumber (Primary GID)
dsidm -b dc=(どめいん) (インスタンス名) account reset_password uid=(ログイン名),ou=people,dc=(どめいん)
クライアント側の設定
sssd.conf
は、世の中の他のソフトのパッケージと違い、雛型もなければ自動生成するコマンドとかもないので、涙目になりながらでっちあげる。なお、パーミッションは 600 にしておかないと sssd が起動してくれない。
[sssd]
services = nss, pam, sudo
domains = default
[domain/default]
id_provider = ldap
ldap_uri = ldaps://(さーばー)
ldap_search_base = dc=(どめいん)
ldap_schema = rfc2307bis
sudo_provider = ldap
ldap_sudo_search_base = ou=sudoers,dc=(どめいん)
enumerate = true
ポイントは、ldap_schema = rfc2307bis
、これがないと、上記で作ったsudoers用のsupplemental groupをsssdがちゃんと認識してくれない。
- memberUID をちゃんと管理するldifを書けばいいんだろうけど、やり方分からん
また、enumerate = true
を入れておくと、getent passwd
とかでユーザリストを見られるようになる。この辺はポリシー次第。
/etc/openldap/ldap.conf
にも、URIとBASEを適当に設定する。
あとは、authselect
によろしく設定してもらう。
dnf -y install sssd-ldap
authselect select sssd with-sudo --force
systemctl restart sssd