手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 SSSD – LDAP ユーザーで Linux 認証する

Ubuntu 22.04 で LDAP ユーザーを Linux ログインに使う場合、SSSD が NSS と PAM の間に入り、ユーザー情報の取得、認証、キャッシュを担当します。LDAP サーバー側のユーザーとグループが整っていても、クライアント側の CA 信頼、sssd.conf、PAM/NSS が合っていないとログインできません。

この記事では、LDAPS を前提に SSSD を設定し、LDAP ユーザーを getentidsssctl で確認する流れを扱います。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 --version

LDAPS 用の 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/null

LDAP 接続を確認する

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)' dn

sssd.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.conf

BIND パスワードを設定する

ldap_default_authtok を平文で書く代わりに、sss_obfuscate で難読化できます。完全な secret 管理ではありませんが、平文よりは扱いやすくなります。

sudo sss_obfuscate -d default
sudo grep -E 'ldap_default_authtok|ldap_default_authtok_type' /etc/sssd/sssd.conf

NSS と PAM を有効化する

NSS と PAM で SSSD を使うようにします。ホームディレクトリ自動作成が必要な場合は mkhomedir も有効化します。

sudo pam-auth-update --enable sss
sudo pam-auth-update --enable mkhomedir
grep -E '^(passwd|group|shadow):' /etc/nsswitch.conf

SSSD を起動して設定を確認する

SSSD を再起動し、設定検査とサービス状態を確認します。

sudo systemctl restart sssd
sudo systemctl status sssd --no-pager
sudo sssctl config-check

LDAP ユーザーを確認する

getentid で LDAP ユーザーが Linux 側から見えるか確認します。

getent passwd myadmin
id myadmin
sssctl user-checks myadmin

SSH ログインを許可する場合は、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-pager

Samba 認証とは分けて考える

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 ログインの問題として切り分けます。

関連する記事
Ubuntu 22.04 SSSD – LDAP ユーザーで Linux 認証する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る