LDAPとOpenLDAPの全体像
LDAP はディレクトリ情報を階層構造で扱うためのプロトコルとデータモデル。OpenLDAP は LDAP サーバーと関連ツールの実装。
LDAPとは何か
Section titled “LDAPとは何か”LDAP は Lightweight Directory Access Protocol の略で、ユーザー、グループ、組織、端末、サービスアカウントなどの情報をディレクトリとして保存・検索・変更するために使われる。
LDAP の特徴は次のとおり。
- データを階層構造のツリーとして扱う
- 各データは エントリ として保存される
- エントリは属性の集合である
- エントリの名前は DN で一意に表される
- 検索条件に合うエントリを高速に探す用途に向いている
- Bind により LDAP サーバーへの認証もできる
LDAP は Linux 専用ではない。アプリケーションのユーザーディレクトリ、社内アドレス帳、認証基盤、ネットワーク機器、メールシステムなどでも使われる。
OpenLDAPとは何か
Section titled “OpenLDAPとは何か”OpenLDAP は LDAP のオープンソース実装である。
代表的な構成要素は次のとおり。
| 名前 | 役割 |
|---|---|
slapd |
LDAP サーバー本体 |
| ldapsearch | LDAP エントリを検索するクライアントコマンド |
| ldapadd | LDAP エントリを追加するクライアントコマンド |
| ldapmodify | LDAP エントリを変更するクライアントコマンド |
| ldapdelete | LDAP エントリを削除するクライアントコマンド |
| ldapwhoami | Bind した結果の認証 ID を確認するコマンド |
| slapcat | LDAP データベースを LDIF として出力する保守コマンド |
| slapadd | LDIF を LDAP データベースへ直接投入する保守コマンド |
| slapindex | LDAP データベースのインデックスを再構築する保守コマンド |
ldapsearch や ldapadd などは LDAP プロトコルで slapd に接続する。 slapcat や slapadd などはデータベースを直接扱うため、用途と注意点が違う。
詳細は LDAP操作と保守コマンド を参照する。
Linuxユーザー管理との関係
Section titled “Linuxユーザー管理との関係”LDAP にユーザー情報を保存しても、それだけで Linux へログインできるわけではない。
Linux ログインでは、主に次の層が関係する。
| 層 | 役割 |
|---|---|
| LDAP / OpenLDAP | ユーザー・グループ情報やパスワード情報を保存する |
| NSS | ユーザー名、UID、GID、グループなどを検索する |
| PAM | パスワード認証、アカウント検査、セッション処理を行う |
nslcd / SSSD |
NSS / PAM と LDAP サーバーの間をつなぐ |
つまり、LDAP は情報源であり、Linux がその情報源を使うには NSS / PAM 側の設定が必要になる。
/etc/passwd だけの構成 Linux application -> NSS -> files -> /etc/passwd
LDAP連携構成 Linux application -> NSS/PAM -> nslcd or SSSD -> LDAP -> slapdよくある誤解
Section titled “よくある誤解”| 誤解 | 実際 |
|---|---|
| LDAP は Linux ユーザー専用である | LDAP は汎用的なディレクトリサービスである |
| LDAP にエントリを追加すればログインできる | NSS / PAM / nslcd / SSSD の設定が必要 |
| LDAP サーバーが Linux ユーザーを理解している | posixAccount などのスキーマとクライアント設定により Linux ユーザーとして扱われる |
OpenLDAP 公式ドキュメント
Section titled “OpenLDAP 公式ドキュメント”- OpenLDAP Software 2.6 Administrator’s Guide
OpenLDAP の基本構成、
slapd、設定、スキーマ、セキュリティ、保守。
- RFC 4510 LDAPv3 関連 RFC の全体インデックス。