ldapiとcn=config
ldapi:///は Unix ドメインソケット経由のローカル LDAP 接続。cn=configはslapdの設定を LDAP エントリとして扱う設定データベース。
ldap・ldaps・ldapi
Section titled “ldap・ldaps・ldapi”OpenLDAP では、接続先を URI で指定する。
| URI | 意味 |
|---|---|
ldap://host |
TCP 389 の LDAP 接続。StartTLS で暗号化できる |
ldaps://host |
TCP 636 の TLS 付き LDAP 接続 |
ldapi:/// |
Unix ドメインソケット経由のローカル接続 |
ldapi:/// はネットワーク越しではなく、同じ OS 上の Unix ドメインソケットを使って slapd に接続する。
Unixドメインソケット
Section titled “Unixドメインソケット”Unix ドメインソケットは、同じホスト上のプロセス同士が通信するための仕組みである。
TCP のように IP アドレスとポートで通信するのではなく、ファイルシステム上のソケットを通じて通信する。
ldapmodify -> ldapi:/// -> Unix domain socket -> slapdローカル接続なので、OS は接続元プロセスの UID / GID などを slapd に伝えられる。これを SASL EXTERNAL と組み合わせることで、Linux root 相当の接続を LDAP の認証 ID として扱える。
-Y EXTERNAL -H ldapi:///
Section titled “-Y EXTERNAL -H ldapi:///”ローカル管理でよく見るコマンドは次の形である。
sudo ldapmodify \ -Y EXTERNAL \ -H ldapi:///意味は次のとおり。
| 部分 | 意味 |
|---|---|
sudo |
Linux root としてコマンドを実行する |
-Y EXTERNAL |
SASL EXTERNAL 認証を使う |
-H ldapi:/// |
ローカル Unix ドメインソケットで slapd に接続する |
流れは次のようになる。
Linux root -> ldapi:/// socket -> slapd obtains peer credentials -> SASL EXTERNAL identity -> ACL checkcn=config
Section titled “cn=config”cn=config は、 slapd の設定を LDAP エントリとして表した設定データベースである。
古い形式では slapd.conf という単一の設定ファイルを使っていたが、現在の OpenLDAP では cn=config による動的設定が一般的である。
cn=config には、たとえば次のような設定が含まれる。
- 読み込むスキーマ
- データベース定義
- suffix
- rootDN
- ACL
- index
- overlay
- TLS 設定
通常データベースとの違い
Section titled “通常データベースとの違い”cn=config と dc=example,dc=com のような通常データベースは役割が違う。
| データベース | 役割 |
|---|---|
cn=config |
slapd 自身の設定 |
dc=example,dc=com |
ユーザー、グループ、組織などの通常データ |
cn=config は設定データベースであり、ユーザーやグループを保存する場所ではない。
slapd.d
Section titled “slapd.d”cn=config の実体は、ファイルシステム上では slapd.d ディレクトリ配下に保存される。
Debian 系では一般に次の場所である。
/etc/ldap/slapd.d/ただし、 slapd.d を直接編集するべきではない。実行中の slapd の状態と不整合になったり、LDIF の内部形式を壊したりする可能性がある。
設定変更は ldapmodify で cn=config に対して行う。
sudo ldapmodify \ -Y EXTERNAL \ -H ldapi:/// \ -f change.ldifrootDN
Section titled “rootDN”rootDN は、LDAP データベースごとに設定できる特権 DN である。
たとえば、通常データベースに次のような rootDN がある。
olcRootDN: cn=admin,dc=example,dc=comこの rootDN は、そのデータベース内では ACL によらず強い権限を持つ管理者として扱われる。
ただし、 cn=admin,dc=example,dc=com が自動的に cn=config も管理できるとは限らない。通常データベースの rootDN と、設定データベースの管理権限は別に考える。
root・rootDN・SASL identity
Section titled “root・rootDN・SASL identity”次の 3 つは別物である。
| 名前 | 所属 | 意味 |
|---|---|---|
| Linux root | OS | UID 0 のローカル管理者 |
| LDAP rootDN | LDAP データベース | その DB の特権 DN |
| SASL EXTERNAL identity | SASL / LDAP | 接続経路から得た認証 ID |
ローカル root で ldapmodify -Y EXTERNAL -H ldapi:/// を実行すると、LDAP 側では SASL EXTERNAL identity として見える。その identity に何ができるかは ACL で決まる。
OpenLDAP 公式ドキュメント
Section titled “OpenLDAP 公式ドキュメント”-
OpenLDAP Administrator’s Guide: Configuring slapd
cn=configによるslapd設定。 -
OpenLDAP Administrator’s Guide: Access Control OpenLDAP の ACL 設定。
-
OpenLDAP Administrator’s Guide: Security Considerations SASL、TLS、ローカル認証を含むセキュリティ設定。