OpenLDAPとLinux連携コンポーネント
OpenLDAP を Linux アカウント連携に使う場合、LDAP サーバー本体だけでなく、NSS / PAM へ接続するクライアント側コンポーネントも必要になる。
LDAP server slapd
LDAP client tools ldapsearch / ldapadd / ldapmodify / ldapdelete / ldapwhoami
Linux account integration NSS -> libnss-ldapd -> nslcd -> slapd PAM -> libpam-ldapd -> nslcd -> slapd
Cache / alternative client nscd SSSDLDAP サーバーを立てることと、Linux ログインに LDAP を使うことは別の作業である。 slapd が動いていても、クライアント側の NSS / PAM 設定がなければ getent passwd やログイン処理には使われない。
slapd は OpenLDAP の LDAP サーバー本体である。
slapd は次の役割を持つ。
- LDAP 接続を待ち受ける
- LDAP エントリを保存する
- 検索、追加、変更、削除などの LDAP 操作を処理する
- スキーマに基づいてエントリを検証する
- ACL に基づいてアクセス可否を判断する
cn=configによる設定データベースを扱う
通常の TCP 接続では ldap:// または ldaps:// を使う。ローカル管理では ldapi:/// を使うことも多い。
ldap-utils
Section titled “ldap-utils”Debian 系では、 ldap-utils パッケージに LDAP クライアントコマンドが含まれる。
| コマンド | 主な用途 |
|---|---|
| ldapsearch | LDAP エントリを検索する |
| ldapadd | LDAP エントリを追加する |
| ldapmodify | LDAP エントリを変更する |
| ldapdelete | LDAP エントリを削除する |
| ldapwhoami | Bind した認証 ID を確認する |
これらは slapd に LDAP プロトコルで接続する。起動中の slapd を通るため、ACL、スキーマ検証、overlay、レプリケーションなどの対象になる。
libnss-ldapd
Section titled “libnss-ldapd”libnss-ldapd は NSS と LDAP をつなぐ NSS モジュールである。
NSS はユーザー名、UID、GID、グループなどを検索する仕組みで、 /etc/nsswitch.conf により参照先を選ぶ。
passwd: files ldapgroup: files ldapshadow: files ldapこのように ldap を指定すると、NSS は libnss-ldapd を通して LDAP 側のユーザー・グループ情報を参照できる。
libpam-ldapd
Section titled “libpam-ldapd”libpam-ldapd は PAM と LDAP をつなぐ PAM モジュールである。
PAM は sshd、 login、 sudo などから呼ばれ、認証、アカウント検査、パスワード変更、セッション処理を行う。
libpam-ldapd を使うと、PAM の認証処理で LDAP Bind を利用できる。
nslcd は Name Service LDAP Connection Daemon の略で、 libnss-ldapd / libpam-ldapd と LDAP サーバーの間に入るデーモンである。
NSS/PAM module -> nslcd -> LDAP serverlibnss-ldapd や libpam-ldapd が毎回直接 LDAP 接続設定を持つのではなく、 nslcd が LDAP URI、検索ベース、Bind DN、Bind パスワード、TLS 設定などを持つ。
Debian 系では、主に /etc/nslcd.conf に設定を書く。
uri ldap://ldap.example.com/base dc=example,dc=combinddn cn=proxyuser,dc=example,dc=combindpw secretnscd は Name Service Cache Daemon の略で、NSS の検索結果をキャッシュするデーモンである。
nscd は LDAP サーバーではない。LDAP へ直接接続してディレクトリ検索を担当するものでもない。
主に次のような情報をキャッシュする。
- passwd
- group
- hosts
- services
LDAP 上のユーザーやグループを変更しても、 nscd のキャッシュが残っていると古い結果が返ることがある。検証時に getent の結果が変わらない場合は、LDAP だけでなく NSS キャッシュも疑う。
SSSD は System Security Services Daemon の略で、NSS / PAM と LDAP や Kerberos などの ID プロバイダーをつなぐデーモンである。
SSSD は nslcd 構成より多機能で、次のような特徴がある。
- NSS と PAM の両方を扱える
- キャッシュ機能を持つ
- オフライン認証を扱える構成がある
- LDAP、Kerberos、Active Directory などの連携に向く
- アクセス制御やドメイン設定を柔軟に書ける
/etc/nsswitch.conf では sss として指定する。
passwd: files sssgroup: files sssshadow: files sssnslcdとSSSDの使い分け
Section titled “nslcdとSSSDの使い分け”| 観点 | nslcd | SSSD |
|---|---|---|
| 構成 | 比較的シンプル | 多機能で設定項目が多い |
| NSS / PAM | libnss-ldapd / libpam-ldapd と組み合わせる |
SSSD 自身が NSS / PAM provider になる |
| キャッシュ | 基本は別途 nscd などを考える |
内蔵キャッシュを持つ |
| オフライン認証 | 得意ではない | 構成により対応しやすい |
| 学習用 OpenLDAP | 理解しやすい | 実運用寄りの設計を学べる |
OpenLDAP だけを小さく試すなら、 nslcd 構成は流れが見えやすい。キャッシュ、オフライン認証、Active Directory 連携、複数ドメインなどを考えるなら SSSD のほうが向く。
- NSSとPAMによるLinuxログイン
- BindとSASL認証
- ldapiとcn=config
- LDAP操作と保守コマンド
- ldapsearch
- ldapadd
- ldapmodify
- ldapdelete
- ldapwhoami
OpenLDAP 公式ドキュメント
Section titled “OpenLDAP 公式ドキュメント”- OpenLDAP Software 2.6 Administrator’s Guide
slapd、クライアントツール、設定、保守、セキュリティ。
Debian manpages
Section titled “Debian manpages”-
nslcd(8)
nslcdデーモンの役割。 -
nslcd.conf(5)
nslcdの LDAP URI、検索ベース、Bind、TLS、マッピング設定。 -
nscd(8) NSS キャッシュデーモン。
-
sssd-ldap(5) SSSD の LDAP provider 設定。