コンテンツにスキップ

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
SSSD

LDAP サーバーを立てることと、Linux ログインに LDAP を使うことは別の作業である。 slapd が動いていても、クライアント側の NSS / PAM 設定がなければ getent passwd やログイン処理には使われない。


slapd は OpenLDAP の LDAP サーバー本体である。

slapd は次の役割を持つ。

  • LDAP 接続を待ち受ける
  • LDAP エントリを保存する
  • 検索、追加、変更、削除などの LDAP 操作を処理する
  • スキーマに基づいてエントリを検証する
  • ACL に基づいてアクセス可否を判断する
  • cn=config による設定データベースを扱う

通常の TCP 接続では ldap:// または ldaps:// を使う。ローカル管理では ldapi:/// を使うことも多い。


Debian 系では、 ldap-utils パッケージに LDAP クライアントコマンドが含まれる。

コマンド 主な用途
ldapsearch LDAP エントリを検索する
ldapadd LDAP エントリを追加する
ldapmodify LDAP エントリを変更する
ldapdelete LDAP エントリを削除する
ldapwhoami Bind した認証 ID を確認する

これらは slapd に LDAP プロトコルで接続する。起動中の slapd を通るため、ACL、スキーマ検証、overlay、レプリケーションなどの対象になる。


libnss-ldapd は NSS と LDAP をつなぐ NSS モジュールである。

NSS はユーザー名、UID、GID、グループなどを検索する仕組みで、 /etc/nsswitch.conf により参照先を選ぶ。

passwd: files ldap
group: files ldap
shadow: files ldap

このように ldap を指定すると、NSS は libnss-ldapd を通して LDAP 側のユーザー・グループ情報を参照できる。


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 server

libnss-ldapd や libpam-ldapd が毎回直接 LDAP 接続設定を持つのではなく、 nslcd が LDAP URI、検索ベース、Bind DN、Bind パスワード、TLS 設定などを持つ。

Debian 系では、主に /etc/nslcd.conf に設定を書く。

uri ldap://ldap.example.com/
base dc=example,dc=com
binddn cn=proxyuser,dc=example,dc=com
bindpw secret

nscd は 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 sss
group: files sss
shadow: files sss

観点 nslcd SSSD
構成 比較的シンプル 多機能で設定項目が多い
NSS / PAM libnss-ldapd / libpam-ldapd と組み合わせる SSSD 自身が NSS / PAM provider になる
キャッシュ 基本は別途 nscd などを考える 内蔵キャッシュを持つ
オフライン認証 得意ではない 構成により対応しやすい
学習用 OpenLDAP 理解しやすい 実運用寄りの設計を学べる

OpenLDAP だけを小さく試すなら、 nslcd 構成は流れが見えやすい。キャッシュ、オフライン認証、Active Directory 連携、複数ドメインなどを考えるなら SSSD のほうが向く。



  • nslcd(8) nslcd デーモンの役割。

  • nslcd.conf(5) nslcd の LDAP URI、検索ベース、Bind、TLS、マッピング設定。

  • nscd(8) NSS キャッシュデーモン。

  • sssd-ldap(5) SSSD の LDAP provider 設定。