Ubuntu 22.04 で LDAP ユーザーを Linux ログインに使う場合、SSSD が NSS と PAM の間に入り、ユーザー情報の取得、認証、キャッシュを担当します。LDAP サーバー側のユーザーとグループが整っていても、クライアント側の CA 信頼、sssd.conf、PAM/NSS が合っていないとログインできません。
この記事では、LDAPS を前提に SSSD を設定し、LDAP ユーザーを getent、id、sssctl で確認する流れを扱います。Ubuntu 22.04 の既存環境を保守するための確認記事です。
- SSSD が担当する認証範囲
- LDAPS 用 CA 証明書の登録
sssd.confの作成- NSS / PAM の有効化
- LDAP ユーザー確認とキャッシュ操作
書籍
Advanced Ubuntu Administration and Management Best Practices
Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
SSSD が担当する範囲
SSSD は、LDAP などの外部 identity provider からユーザーとグループを取得し、Linux の NSS / PAM と連携します。Samba の SID や Windows 共有の認証とは役割が異なります。
- Linux のユーザー情報を NSS へ提供する
- PAM 認証を LDAP へ連携する
- 認証情報やユーザー情報をキャッシュする
- オフライン時の挙動を制御する
- Samba の SID 設計とは分けて考える
パッケージをインストールする
SSSD 本体、確認ツール、NSS / PAM 連携パッケージを導入します。LDAP の疎通確認には ldap-utils もあると便利です。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y sssd sssd-tools libnss-sss libpam-sss ldap-utils
sssd --versionLDAPS 用の CA 証明書を登録する
LDAPS を使う場合は、LDAP サーバー証明書を発行した CA を Ubuntu の信頼ストアへ登録します。
sudo install -m 0644 example-ca.crt /usr/local/share/ca-certificates/example-ca.crt
sudo update-ca-certificates
openssl s_client -connect ldap.example.local:636 -servername ldap.example.local -CAfile /etc/ssl/certs/ca-certificates.crt -verify_return_error </dev/nullLDAP 接続を確認する
SSSD を設定する前に、bind DN で LDAPS 接続できることを確認します。ここで失敗する場合は、SSSD ではなく証明書、名前解決、LDAP 側の bind 権限を先に確認します。
ldapwhoami -H ldaps://ldap.example.local -D 'cn=ro,ou=service,dc=example,dc=local' -W
ldapsearch -H ldaps://ldap.example.local -D 'cn=ro,ou=service,dc=example,dc=local' -W -b 'dc=example,dc=local' '(uid=myadmin)' dnsssd.conf を作成する
/etc/sssd/sssd.conf を作成します。このファイルには bind DN などの認証情報が入るため、権限は 0600 にします。
sudo tee /etc/sssd/sssd.conf >/dev/null <<'EOF'
[sssd]
services = nss, pam
domains = default
[nss]
filter_groups = root
filter_users = root
[domain/default]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldaps://ldap.example.local
ldap_search_base = dc=example,dc=local
ldap_default_bind_dn = cn=ro,ou=service,dc=example,dc=local
ldap_tls_reqcert = demand
cache_credentials = true
ldap_user_search_base = ou=users,dc=example,dc=local
ldap_group_search_base = ou=groups,dc=example,dc=local
EOF
sudo chmod 0600 /etc/sssd/sssd.conf
sudo ls -l /etc/sssd/sssd.confBIND パスワードを設定する
ldap_default_authtok を平文で書く代わりに、sss_obfuscate で難読化できます。完全な secret 管理ではありませんが、平文よりは扱いやすくなります。
sudo sss_obfuscate -d default
sudo grep -E 'ldap_default_authtok|ldap_default_authtok_type' /etc/sssd/sssd.confNSS と PAM を有効化する
NSS と PAM で SSSD を使うようにします。ホームディレクトリ自動作成が必要な場合は mkhomedir も有効化します。
sudo pam-auth-update --enable sss
sudo pam-auth-update --enable mkhomedir
grep -E '^(passwd|group|shadow):' /etc/nsswitch.confSSSD を起動して設定を確認する
SSSD を再起動し、設定検査とサービス状態を確認します。
sudo systemctl restart sssd
sudo systemctl status sssd --no-pager
sudo sssctl config-checkLDAP ユーザーを確認する
getent と id で LDAP ユーザーが Linux 側から見えるか確認します。
getent passwd myadmin
id myadmin
sssctl user-checks myadminSSH ログインを許可する場合は、SSH 側の認証方式、PAM、許可ユーザー設定も確認します。
ssh ldapuser@ubuntu-2204.example.localキャッシュとトラブルシュート
LDAP 側の変更が反映されない場合は、SSSD の cache を削除して再確認します。
sudo sss_cache -E
getent passwd myadmin
id myadmin
sudo journalctl -u sssd -n 120 --no-pagerSamba 認証とは分けて考える
SSSD は Linux ログインのための NSS / PAM 連携を担当します。Samba で Windows クライアントからアクセスさせる場合は、SID、passdb、id mapping、共有権限を別に設計します。
- Linux ログインは SSSD / PAM / NSS を確認する
- ファイル共有は Samba 側の認証と SID を確認する
- LDAP の user/group は共通でも、利用する属性が異なることがある
- 同じユーザー名でも UID/GID と SID を混同しない
まとめ
Ubuntu 22.04 で LDAP ユーザーを Linux 認証に使う場合は、LDAPS の CA 信頼、LDAP bind、sssd.conf、NSS / PAM、SSSD cache を順番に確認します。
ログインできない場合は、LDAP サーバー、証明書、SSSD 設定、PAM、SSH を分けて見ることが重要です。Samba 認証とは役割が違うため、Linux ログインの問題として切り分けます。

