「OpenLDAP」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(1版 をインポートしました)
(カテゴリを修正)
 
(3人の利用者による、間の11版が非表示)
1行目: 1行目:
[[Category:ネッ]]
+
[[Category:ディレクリサビス]]
[[en:openLDAP]]
+
[[en:OpenLDAP]]
[[ru:openLDAP]]
+
[[ru:OpenLDAP]]
[[zh-cn:OpenLDAP]]
+
[[zh-hans:OpenLDAP]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|LDAP Authentication|LDAP 認証}}
+
{{Related|LDAP 認証}}
{{Related2|LDAP Hosts|LDAP ホスト}}
+
{{Related|LDAP ホスト}}
 
{{Related articles end}}
 
{{Related articles end}}
OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、{{ic|/etc/passwd}} を置き換える [[LDAP Authentication|Linux システム認証]]など) の認証バックエンドとして使われ、ユーザーデータを保持します。
+
[https://www.openldap.org/ OpenLDAP] は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、{{ic|/etc/passwd}} を置き換える [[LDAP 認証|Linux システム認証]]など) の認証バックエンドとして使われ、ユーザーデータを保持します。
   
{{ic|ldap}} で始まる OpenLDAP のコマンド ({{ic|ldapsearch}} など) はクライアント側のユーティリティであり、{{ic|slap}} で始まるコマンド ({{ic|slapcat}} など) はサーバー側のユーティリティです。
+
{{note|{{ic|ldap}} で始まる OpenLDAP のコマンド ({{ic|ldapsearch}} など) はクライアント側のユーティリティであり、{{ic|slap}} で始まるコマンド ({{ic|slapcat}} など) はサーバー側のユーティリティです。}}
   
ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。初めてディレクトリサービスに接する場合は、[http://www.brennan.id.au/20-Shared_Address_Book_LDAP.html ここ] を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。
+
このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。
   
  +
{{Tip|ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。初めてディレクトリサービスに接する場合は、[http://www.brennan.id.au/20-Shared_Address_Book_LDAP.html ここ] を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。}}
{{Tip|このページに書かれているサーバーのセットアップ (OpenLDAP と TLS のインストールと設定) は[https://raw.githubusercontent.com/FOSSperts/archlinux-openldap/master/createldapserver.sh この対話式のスクリプト]を実行することでも行えます。ただしクライアントは自分で設定する必要があります。}}
 
   
 
== インストール ==
 
== インストール ==
   
 
OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。[[公式リポジトリ]]の {{Pkg|openldap}} パッケージでインストールしてください。
 
OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。[[公式リポジトリ]]の {{Pkg|openldap}} パッケージでインストールしてください。
{{Note|{{ic|/run/openldap/}} が適切なパーミッションで作成されるように、インストールした後サーバーを再起動する必要があります。{{Bug|38408}} を参照。}}
 
   
 
== 設定 ==
 
== 設定 ==
39行目: 38行目:
   
 
よく使われる [http://www.openldap.org/doc/admin24/schema.html schema] を {{ic|slapd.conf}} の一番上に追加すると良いでしょう:
 
よく使われる [http://www.openldap.org/doc/admin24/schema.html schema] を {{ic|slapd.conf}} の一番上に追加すると良いでしょう:
  +
# cp /usr/share/doc/samba/examples/LDAP/samba.schema /etc/openldap/schema
 
{{bc|
 
{{bc|
 
include /etc/openldap/schema/cosine.schema
 
include /etc/openldap/schema/cosine.schema
 
include /etc/openldap/schema/inetorgperson.schema
 
include /etc/openldap/schema/inetorgperson.schema
 
include /etc/openldap/schema/nis.schema
 
include /etc/openldap/schema/nis.schema
  +
#include /etc/openldap/schema/samba.schema
 
}}
 
}}
   
54行目: 55行目:
 
}}
 
}}
   
  +
LDAP サーバーを使って認証したい場合、[[LDAP 認証#LDAP サーバーのセットアップ]]に書かれているようにアクセス制御の設定をしてください。
データベースディレクトリを準備します。デフォルトの設定ファイルをコピーして適切な所有権を設定してください:
 
  +
# cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG
 
  +
データベースディレクトリを準備します。デフォルトの設定ファイルの名前を変更してください:
# chown ldap:ldap /var/lib/openldap/openldap-data/DB_CONFIG
 
  +
# cp /var/lib/openldap/openldap-data/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG
   
 
{{Note|OpenLDAP 2.4 から {{ic|slapd.conf}} の設定は非推奨になりました。このバージョンから全ての設定は {{ic|/etc/openldap/slapd.d/}} に保存されることになっています。}}
 
{{Note|OpenLDAP 2.4 から {{ic|slapd.conf}} の設定は非推奨になりました。このバージョンから全ての設定は {{ic|/etc/openldap/slapd.d/}} に保存されることになっています。}}
76行目: 78行目:
 
# chown -R ldap:ldap /etc/openldap/slapd.d
 
# chown -R ldap:ldap /etc/openldap/slapd.d
   
  +
{{Note|
{{note|ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。
 
  +
* Berkeley DB (BDB) は使用するべきではありません。通常の slapd データベースのバックエンドとしては {{man|8|slapd}} の mdb バックエンドが推奨されます。OpenLDAP の Lightning Memory-Mapped Database (LMDB) ライブラリを使用してデータを保存し、Berkeley DB バックエンドを置き換えます。OpenLDAP の公式パッケージはデフォルトで mdb を使用します。
  +
* ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。
 
# slapindex
 
# slapindex
 
# chown ldap:ldap /var/lib/openldap/openldap-data/*
 
# chown ldap:ldap /var/lib/openldap/openldap-data/*
  +
もしくは {{ic|$ sudo -u ldap slapindex}} を実行。
 
}}
 
}}
   
97行目: 102行目:
 
* {{ic|URI}} エントリのプロトコル (ldap または ldaps) は slapd の設定と一致しなくてはなりません。
 
* {{ic|URI}} エントリのプロトコル (ldap または ldaps) は slapd の設定と一致しなくてはなりません。
 
* 自己署名証明書を使う場合は、{{ic|ldap.conf}} に {{ic|TLS_REQCERT allow}} という行を追加してください。
 
* 自己署名証明書を使う場合は、{{ic|ldap.conf}} に {{ic|TLS_REQCERT allow}} という行を追加してください。
  +
* 認証局により署名された証明書を使う場合、{{ic|ldap.conf}} に {{ic|TLS_CACERTDIR /usr/share/ca-certificates/trust-source}} という行を追加してください。
  +
  +
=== 最初のエントリを作成 ===
  +
クライアントを設定したら、root の役割をするエントリである root エントリを作成することを推奨します:
  +
  +
$ ldapadd -x -D 'cn=root,dc=example,dc=com' -W
  +
dn: dc=example,dc=com
  +
objectClass: dcObject
  +
objectClass: organization
  +
dc: example
  +
o: Example
  +
description: Example directory
  +
  +
dn: cn=root,dc=example,dc=com
  +
objectClass: organizationalRole
  +
cn: root
  +
description: Directory Manager
  +
^D
  +
  +
最初の行の後のテキストは標準入力で入力していますが、-f オプションやファイルリダイレクトを使うことでファイルから読み込むこともできます。
   
 
=== OpenLDAP をテストする ===
 
=== OpenLDAP をテストする ===
109行目: 134行目:
   
 
=== OpenLDAP over TLS ===
 
=== OpenLDAP over TLS ===
{{Note|[http://web.archive.org/web/20130211222328/http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html#4.0 上流のドキュメント] の方がこのセクションよりも情報が豊富です。}}
+
{{Note|[http://www.openldap.org/doc/admin24/ 上流のドキュメント] の方がこのセクションよりも情報が豊富です。}}
   
 
ネットワークを介して OpenLDAP サーバーにアクセスする場合、特にサーバー上に極秘のデータを保存するときは、クリアテキストで送られたデータを盗聴される恐れがあります。次のパートでは LDAP サーバーとクライアントの間に SSL 接続をセットアップしてデータを暗号化して送信する方法を説明します。
 
ネットワークを介して OpenLDAP サーバーにアクセスする場合、特にサーバー上に極秘のデータを保存するときは、クリアテキストで送られたデータを盗聴される恐れがあります。次のパートでは LDAP サーバーとクライアントの間に SSL 接続をセットアップしてデータを暗号化して送信する方法を説明します。
115行目: 140行目:
 
TLS を使うには、証明書が必要になります。テスト目的なら、''自己署名''証明書で足りるでしょう。証明書について詳しく知るには、[[OpenSSL]] を見て下さい。
 
TLS を使うには、証明書が必要になります。テスト目的なら、''自己署名''証明書で足りるでしょう。証明書について詳しく知るには、[[OpenSSL]] を見て下さい。
   
  +
{{Warning|OpenLDAP はパスワードが関連付けられた証明書を使うことができません。}}
{{Warning|OpenLDAP cannot use a certificate that has a password associated to it.}}
 
   
 
==== 自己署名証明書の作成 ====
 
==== 自己署名証明書の作成 ====
121行目: 146行目:
 
$ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365
 
$ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365
   
  +
LDAP サーバーに関する情報の入力が求められます。ほとんどの情報は空のままでも大丈夫です。一番重要な情報はコモンネームです。コモンネームは LDAP サーバーの DNS 名に設定してください。LDAP サーバーの IP アドレスが example.org で解決できてもサーバーの証明書の CN が bad.example.org の場合、LDAP クライアントは証明書を拒否してしまうため TLS 接続をネゴシエートできなくなります (全く予期できない結果になります)。
You will be prompted for information about your LDAP server. Much of the information can be left blank. The most important information is the common name. This must be set to the DNS name of your LDAP server. If your LDAP server's IP address resolves to example.org but its server certificate shows a CN of bad.example.org, LDAP clients will reject the certificate and will be unable to negotiate TLS connections (apparently the results are wholly unpredictable).
 
   
  +
それから、作成された証明書ファイルを {{ic|/etc/openldap/ssl/}} (ディレクトリが存在しない場合は作成してください) にコピーしてパーミッションを設定します。{{ic|slapdcert.pem}} は公開鍵なので誰からでも読み込めるようにしてください。逆に {{ic|slapdkey.pem}} は ldap ユーザーだけが読み込めるようにしてください:
Now that the certificate files have been created copy them to {{ic|/etc/openldap/ssl/}} (create this directory if it does not exist) and secure them.
 
{{ic|slapdcert.pem}} must be world readable because it contains the public key. {{ic|slapdkey.pem}} on the other hand should only be readable for the ldap user for security reasons:
 
 
# mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/
 
# mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/
 
# chmod -R 755 /etc/openldap/ssl/
 
# chmod -R 755 /etc/openldap/ssl/
132行目: 156行目:
   
 
==== SSL を使うように slapd を設定 ====
 
==== SSL を使うように slapd を設定 ====
Edit the daemon configuration file ({{ic|/etc/openldap/slapd.conf}}) to tell LDAP where the certificate files reside by adding the following lines:
+
デーモンの設定ファイル ({{ic|/etc/openldap/slapd.conf}}) を編集して以下の行を追加することで LDAP に証明書ファイルの場所を指定してください:
  +
 
{{bc|
 
{{bc|
 
# Certificate/SSL Section
 
# Certificate/SSL Section
TLSCipherSuite HIGH:MEDIUM:-SSLv2:-SSLv3
+
TLSCipherSuite DEFAULT
 
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem
 
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem
 
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem
 
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem
 
}}
 
}}
   
  +
{{Note|最新版の OpenLDAP (2.4.45) は GnuTLS ではなく OpenSSL を使用します。そのため最新版の OpenLDAP は [https://www.openssl.org/docs/man1.1.0/apps/ciphers.html#CIPHER-STRINGS DEFAULT TLSCipherSuite] を処理することができます。{{ic|ldd /usr/bin/slapd}} を実行することで確認できます。}}
The TLSCipherSuite specifies a list of OpenSSL ciphers from which slapd will choose when negotiating TLS connections, in decreasing order of preference. In addition to those specific ciphers, you can use any of the wildcards supported by OpenSSL. '''NOTE:''' HIGH, MEDIUM, and +SSLv2 are all wildcards.
 
  +
  +
[[Let’s Encrypt]] のような認証局により署名された SSL 証明書を用いる場合、ルート証明書データベースと中間証明書のパスを指定する必要があります。また、ユーザー {{ic|ldap}} が読み込めるように {{ic|.pem}} ファイルと途中のディレクトリの所有者情報を変更する必要もあるでしょう:
  +
{{bc|
  +
# Certificate/SSL Section
  +
TLSCipherSuite DEFAULT
  +
TLSCertificateFile /etc/letsencrypt/live/ldap.my-domain.com/cert.pem
  +
TLSCertificateKeyFile /etc/letsencrypt/live/ldap.my-domain.com/privkey.pem
  +
TLSCACertificateFile /etc/letsencrypt/live/ldap.my-domain.com/chain.pem
  +
TLSCACertificatePath /usr/share/ca-certificates/trust-source
  +
}}
  +
  +
TLSCipherSuite は slapd が TLS 接続をネゴシエートするときに使用する OpenSSL の暗号方式のリストを指定します。優先度が高い順です。特定の暗号を指定するかわりに、OpenSSL によってサポートされているワイルドカードを使うことができます。
   
  +
{{Note|
{{Note|To see which ciphers are supported by your local OpenSSL installation, type the following: {{ic|openssl ciphers -v ALL}} }}
 
  +
* DEFAULT はワイルドカードです。サポートされている暗号方式やワイルドカード、オプションについては {{man|1ssl|ciphers}} の説明を読んでください。
  +
* ローカルの OpenSSL によってサポートされている暗号を確認するには、次を実行: {{ic|openssl ciphers -v ALL:COMPLEMENTOFALL}}。OpenSSL コマンドを使えば実際に TLSCipherSuite によって有効になる暗号は何なのかテストできます: {{ic|openssl ciphers -v 'DEFAULT'}}。}}
   
  +
設定ディレクトリを再生成:
Regenerate the configuration directory:
 
 
# rm -rf /etc/openldap/slapd.d/* # erase old config settings
 
# rm -rf /etc/openldap/slapd.d/* # erase old config settings
 
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ # generate new config directory from config file
 
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ # generate new config directory from config file
150行目: 189行目:
   
 
==== SSL で slapd を起動 ====
 
==== SSL で slapd を起動 ====
You will have to edit {{ic|slapd.service}} to change to protocol slapd listens on.
+
{{ic|slapd.service}} を編集して slapd が使用するプロトコルを変更してください。
   
  +
上書きユニットを作成:
First, disable {{ic|slapd.service}} if it is enabled.
 
  +
{{hc|systemctl edit slapd.service|<nowiki>
 
  +
[Service]
Then, copy the stock service to {{ic|/etc/systemd/system/}}:
 
  +
ExecStart=
# cp /usr/lib/systemd/system/slapd.service /etc/systemd/system/
 
 
Edit it, and add change {{ic|ExecStart}} to:
 
{{hc|/etc/systemd/system/slapd.service|<nowiki>
 
 
ExecStart=/usr/bin/slapd -u ldap -g ldap -h "ldaps:///"</nowiki>}}
 
ExecStart=/usr/bin/slapd -u ldap -g ldap -h "ldaps:///"</nowiki>}}
   
  +
ローカルホスト接続は SSL を使う必要がありません。ローカルのサーバーにアクセスしたいときは {{ic|ExecStart}} 行を以下のように変更してください:
Localhost connections do not need to use SSL. So, if you want to access the server locally you should change the {{ic|ExecStart}} line to:
 
 
ExecStart=/usr/bin/slapd -u ldap -g ldap -h "ldap://127.0.0.1 ldaps:///"
 
ExecStart=/usr/bin/slapd -u ldap -g ldap -h "ldap://127.0.0.1 ldaps:///"
   
  +
そして {{ic|slapd.service}} を[[再起動]]してください。サービスを有効にしていた場合は、再有効化もしてください。
Then reenable and start it:
 
# systemctl daemon-reload
 
# systemctl restart slapd.service
 
 
If {{ic|slapd}} started successfully you can enable it.
 
   
{{Note|If you created a self-signed certificate above, be sure to add {{ic|TLS_REQCERT allow}} to {{ic|/etc/openldap/ldap.conf}} on the client, or it will not be able connect to the server.}}
+
{{Note|上で書かれているように自己署名証明書を作成した場合は、{{ic|TLS_REQCERT allow}} をクライアント側の {{ic|/etc/openldap/ldap.conf}} に追加しないとサーバーに接続することができなくなります。}}
   
 
== 次のステップ ==
 
== 次のステップ ==
   
  +
これで基本的な LDAP のインストールは完了です。次はディレクトリを自分で設計してください。LDAP を何のために使うのかによって大きく変わってきます。LDAP を初めて使う場合は、まずはディレクトリを使用するクライアントサービス ([[PAM]] や [[Postfix]] など) によって推奨されている設定から始めると良いでしょう。
You now have a basic LDAP installation. The next step is to design your directory. The design is heavily dependent on what you are using it for. If you are new to LDAP, consider starting with a directory design recommended by the specific client services that will use the directory (PAM, [[Postfix]], etc).
 
   
  +
システム認証の方法は [[LDAP 認証]]の記事に書かれています。
A directory for system authentication is the [[LDAP Authentication]] article.
 
   
A nice web frontend is [[phpLDAPadmin]].
+
LDAP のフロントエンドとして [[phpLDAPadmin]] も存在します。
  +
  +
== ヒントとテクニック ==
  +
  +
=== LDAP のバックアップ ===
  +
  +
LDAP データベースと設定をバックアップすることで後で何かあったときに復元することができます。
  +
  +
==== 設定のエクスポート ====
  +
$ slapcat -F /etc/openldap/slapd.d -n 0 -l "$(hostname)-ldap-mdb-config-$(date '+%F').ldif"
  +
  +
==== データベースのエクスポート ====
  +
$ slapcat -l "$(hostname)-ldap-database-$(date '+%F').ldif"
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
   
=== Client Authentication Checking ===
+
=== slapd 設定のチェック ===
  +
以下のコマンドで設定をチェックできます:
If you cannot connect to your server for non-secure authentication
 
  +
  +
$ slaptest -f /etc/openldap/slapd.conf -v
  +
  +
=== クライアント認証のチェック ===
  +
セキュアでない認証でサーバーに接続できない場合:
   
 
$ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain
 
$ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain
   
  +
TLS によって暗号化された認証で接続をする場合:
and for TLS secured authentication with:
 
   
 
$ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain
 
$ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain
193行目: 242行目:
 
=== LDAP サーバーが突然停止する ===
 
=== LDAP サーバーが突然停止する ===
   
  +
slapd を起動しても停止してしまう場合、以下を実行して "ldap" ユーザーからデータディレクトリに書き込むことができるようにしてみてください:
If you notice that slapd seems to start but then stops, try running:
 
   
# chown ldap:ldap /var/lib/openldap/openldap-data/*
+
# chown -R ldap:ldap /var/lib/openldap
  +
  +
=== LDAP サーバーを起動できない ===
  +
  +
コマンドラインからデバッグ出力を有効にしてLDAPサーバーを起動してみてください:
   
  +
# slapd -u ldap -g ldap -h ldaps://ldaservername:636 -d Config,Stats
to allow slapd write access to its data directory as the user "ldap".
 
   
 
== 参照 ==
 
== 参照 ==
 
* [http://www.openldap.org/doc/admin24/ Official OpenLDAP Software 2.4 Administrator's Guide]
 
* [http://www.openldap.org/doc/admin24/ Official OpenLDAP Software 2.4 Administrator's Guide]
 
* [[phpLDAPadmin]] phpMyAdmin 風のウェブインターフェイスツール
 
* [[phpLDAPadmin]] phpMyAdmin 風のウェブインターフェイスツール
  +
* {{AUR|apachedirectorystudio}} Eclipse ベースの LDAP ビューア ([[AUR]])。OpenLDAP でも問題なく動作します
* [[LDAP Authentication]]
 
* {{AUR|apachedirectorystudio}} Eclipse ベースの LDAP ビューア ([[AUR|AUR]])。OpenLDAP でも問題なく動作します
 

2023年4月18日 (火) 13:38時点における最新版

関連記事

OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、/etc/passwd を置き換える Linux システム認証など) の認証バックエンドとして使われ、ユーザーデータを保持します。

ノート: ldap で始まる OpenLDAP のコマンド (ldapsearch など) はクライアント側のユーティリティであり、slap で始まるコマンド (slapcat など) はサーバー側のユーティリティです。

このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。

ヒント: ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。初めてディレクトリサービスに接する場合は、ここ を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。

インストール

OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。公式リポジトリopenldap パッケージでインストールしてください。

設定

サーバー

ノート: 既にマシン上に OpenLDAP データベースが存在する場合は、/var/lib/openldap/openldap-data/ 内の全てのファイルを削除してください。

サーバーの設定ファイルは /etc/openldap/slapd.conf です。

suffix と rootdn を編集してください。suffix は基本的にドメイン名を使いますが、そうである必要はありません。ディレクトリは使い様です。ここではドメイン名には example を、tld には com を使うこととします。rootdn は LDAP の管理者の名前です (ここでは root を使います)。

suffix     "dc=example,dc=com"
rootdn     "cn=root,dc=example,dc=com"

そしてデフォルトの root パスワードを削除して強固なパスワードを作成します:

# sed -i "/rootpw/ d" /etc/openldap/slapd.conf #find the line with rootpw and delete it
# echo "rootpw    $(slappasswd)" >> /etc/openldap/slapd.conf  #add a line which includes the hashed password output from slappasswd

よく使われる schemaslapd.conf の一番上に追加すると良いでしょう:

# cp /usr/share/doc/samba/examples/LDAP/samba.schema /etc/openldap/schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
#include        /etc/openldap/schema/samba.schema

よく使われる indexslapd.conf の一番下に追加すると良いでしょう:

index   uid             pres,eq
index   mail            pres,sub,eq
index   cn              pres,sub,eq
index   sn              pres,sub,eq
index   dc              eq

LDAP サーバーを使って認証したい場合、LDAP 認証#LDAP サーバーのセットアップに書かれているようにアクセス制御の設定をしてください。

データベースディレクトリを準備します。デフォルトの設定ファイルの名前を変更してください:

# cp /var/lib/openldap/openldap-data/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG
ノート: OpenLDAP 2.4 から slapd.conf の設定は非推奨になりました。このバージョンから全ての設定は /etc/openldap/slapd.d/ に保存されることになっています。

slapd.conf の変更を新しい /etc/openldap/slapd.d/ の設定に保存するには、まず古い設定ファイルを削除する必要があります。設定を変更するたびに実行してください:

# rm -rf /etc/openldap/slapd.d/*

(データベースがまだない場合は、systemd を使って slapd.service を起動・停止することでデータベースを作成してください。)

次のコマンドで新しい設定を生成します:

# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

上のコマンドは slapd.conf を変更する度に実行する必要があります。全てが問題ないか確認してください。"bdb_monitor_db_open: monitoring disabled; configure monitor database to enable" というメッセージは無視してください。

/etc/openldap/slapd.d の新しいファイルとディレクトリの所有権を再帰的に変更:

# chown -R ldap:ldap /etc/openldap/slapd.d
ノート:
  • Berkeley DB (BDB) は使用するべきではありません。通常の slapd データベースのバックエンドとしては slapd(8) の mdb バックエンドが推奨されます。OpenLDAP の Lightning Memory-Mapped Database (LMDB) ライブラリを使用してデータを保存し、Berkeley DB バックエンドを置き換えます。OpenLDAP の公式パッケージはデフォルトで mdb を使用します。
  • ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。
# slapindex
# chown ldap:ldap /var/lib/openldap/openldap-data/*

もしくは $ sudo -u ldap slapindex を実行。

最後に、systemd を使って slapd.service で slapd デーモンを起動してください。

クライアント

クライアントの設定ファイルは /etc/openldap/ldap.conf です。

設定はとてもシンプルです: BASE をサーバーの suffix に、URI をサーバーのアドレスに変更するだけです、例:

/etc/openldap/ldap.conf
BASE            dc=example,dc=com
URI             ldap://localhost

SSL を使う場合は:

  • URI エントリのプロトコル (ldap または ldaps) は slapd の設定と一致しなくてはなりません。
  • 自己署名証明書を使う場合は、ldap.confTLS_REQCERT allow という行を追加してください。
  • 認証局により署名された証明書を使う場合、ldap.confTLS_CACERTDIR /usr/share/ca-certificates/trust-source という行を追加してください。

最初のエントリを作成

クライアントを設定したら、root の役割をするエントリである root エントリを作成することを推奨します:

$ ldapadd -x -D 'cn=root,dc=example,dc=com' -W
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example
description: Example directory

dn: cn=root,dc=example,dc=com
objectClass: organizationalRole
cn: root
description: Directory Manager
^D

最初の行の後のテキストは標準入力で入力していますが、-f オプションやファイルリダイレクトを使うことでファイルから読み込むこともできます。

OpenLDAP をテストする

下のコマンドを実行するだけで、簡単にテストできます:

$ ldapsearch -x '(objectclass=*)'

もしくは、上記の設定例を使って、rootdn で認証するには (-x-D <user> -W で置き換える):

$ ldapsearch -D "cn=root,dc=example,dc=com" -W '(objectclass=*)'

データベースに関する情報が表示されるはずです。

OpenLDAP over TLS

ノート: 上流のドキュメント の方がこのセクションよりも情報が豊富です。

ネットワークを介して OpenLDAP サーバーにアクセスする場合、特にサーバー上に極秘のデータを保存するときは、クリアテキストで送られたデータを盗聴される恐れがあります。次のパートでは LDAP サーバーとクライアントの間に SSL 接続をセットアップしてデータを暗号化して送信する方法を説明します。

TLS を使うには、証明書が必要になります。テスト目的なら、自己署名証明書で足りるでしょう。証明書について詳しく知るには、OpenSSL を見て下さい。

警告: OpenLDAP はパスワードが関連付けられた証明書を使うことができません。

自己署名証明書の作成

自己署名証明書を作成するには、次を入力:

$ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365

LDAP サーバーに関する情報の入力が求められます。ほとんどの情報は空のままでも大丈夫です。一番重要な情報はコモンネームです。コモンネームは LDAP サーバーの DNS 名に設定してください。LDAP サーバーの IP アドレスが example.org で解決できてもサーバーの証明書の CN が bad.example.org の場合、LDAP クライアントは証明書を拒否してしまうため TLS 接続をネゴシエートできなくなります (全く予期できない結果になります)。

それから、作成された証明書ファイルを /etc/openldap/ssl/ (ディレクトリが存在しない場合は作成してください) にコピーしてパーミッションを設定します。slapdcert.pem は公開鍵なので誰からでも読み込めるようにしてください。逆に slapdkey.pem は ldap ユーザーだけが読み込めるようにしてください:

# mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/
# chmod -R 755 /etc/openldap/ssl/
# chmod 400 /etc/openldap/ssl/slapdkey.pem
# chmod 444 /etc/openldap/ssl/slapdcert.pem
# chown ldap /etc/openldap/ssl/slapdkey.pem

SSL を使うように slapd を設定

デーモンの設定ファイル (/etc/openldap/slapd.conf) を編集して以下の行を追加することで LDAP に証明書ファイルの場所を指定してください:

# Certificate/SSL Section
TLSCipherSuite DEFAULT
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem
ノート: 最新版の OpenLDAP (2.4.45) は GnuTLS ではなく OpenSSL を使用します。そのため最新版の OpenLDAP は DEFAULT TLSCipherSuite を処理することができます。ldd /usr/bin/slapd を実行することで確認できます。

Let’s Encrypt のような認証局により署名された SSL 証明書を用いる場合、ルート証明書データベースと中間証明書のパスを指定する必要があります。また、ユーザー ldap が読み込めるように .pem ファイルと途中のディレクトリの所有者情報を変更する必要もあるでしょう:

# Certificate/SSL Section
TLSCipherSuite DEFAULT
TLSCertificateFile /etc/letsencrypt/live/ldap.my-domain.com/cert.pem
TLSCertificateKeyFile /etc/letsencrypt/live/ldap.my-domain.com/privkey.pem
TLSCACertificateFile /etc/letsencrypt/live/ldap.my-domain.com/chain.pem
TLSCACertificatePath /usr/share/ca-certificates/trust-source

TLSCipherSuite は slapd が TLS 接続をネゴシエートするときに使用する OpenSSL の暗号方式のリストを指定します。優先度が高い順です。特定の暗号を指定するかわりに、OpenSSL によってサポートされているワイルドカードを使うことができます。

ノート:
  • DEFAULT はワイルドカードです。サポートされている暗号方式やワイルドカード、オプションについては ciphers(1ssl) の説明を読んでください。
  • ローカルの OpenSSL によってサポートされている暗号を確認するには、次を実行: openssl ciphers -v ALL:COMPLEMENTOFALL。OpenSSL コマンドを使えば実際に TLSCipherSuite によって有効になる暗号は何なのかテストできます: openssl ciphers -v 'DEFAULT'

設定ディレクトリを再生成:

# rm -rf /etc/openldap/slapd.d/*                                  # erase old config settings
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/  # generate new config directory from config file
# chown -R ldap:ldap /etc/openldap/slapd.d                        # Change ownership recursively to ldap on the config directory

SSL で slapd を起動

slapd.service を編集して slapd が使用するプロトコルを変更してください。

上書きユニットを作成:

systemctl edit slapd.service
[Service]
ExecStart=
ExecStart=/usr/bin/slapd -u ldap -g ldap -h "ldaps:///"

ローカルホスト接続は SSL を使う必要がありません。ローカルのサーバーにアクセスしたいときは ExecStart 行を以下のように変更してください:

ExecStart=/usr/bin/slapd -u ldap -g ldap -h "ldap://127.0.0.1 ldaps:///"

そして slapd.service再起動してください。サービスを有効にしていた場合は、再有効化もしてください。

ノート: 上で書かれているように自己署名証明書を作成した場合は、TLS_REQCERT allow をクライアント側の /etc/openldap/ldap.conf に追加しないとサーバーに接続することができなくなります。

次のステップ

これで基本的な LDAP のインストールは完了です。次はディレクトリを自分で設計してください。LDAP を何のために使うのかによって大きく変わってきます。LDAP を初めて使う場合は、まずはディレクトリを使用するクライアントサービス (PAMPostfix など) によって推奨されている設定から始めると良いでしょう。

システム認証の方法は LDAP 認証の記事に書かれています。

LDAP のフロントエンドとして phpLDAPadmin も存在します。

ヒントとテクニック

LDAP のバックアップ

LDAP データベースと設定をバックアップすることで後で何かあったときに復元することができます。

設定のエクスポート

$ slapcat -F /etc/openldap/slapd.d -n 0 -l "$(hostname)-ldap-mdb-config-$(date '+%F').ldif"

データベースのエクスポート

$ slapcat -l "$(hostname)-ldap-database-$(date '+%F').ldif"

トラブルシューティング

slapd 設定のチェック

以下のコマンドで設定をチェックできます:

$ slaptest -f /etc/openldap/slapd.conf -v

クライアント認証のチェック

セキュアでない認証でサーバーに接続できない場合:

$ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain

TLS によって暗号化された認証で接続をする場合:

$ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain

LDAP サーバーが突然停止する

slapd を起動しても停止してしまう場合、以下を実行して "ldap" ユーザーからデータディレクトリに書き込むことができるようにしてみてください:

# chown -R ldap:ldap /var/lib/openldap

LDAP サーバーを起動できない

コマンドラインからデバッグ出力を有効にしてLDAPサーバーを起動してみてください:

# slapd -u ldap -g ldap -h ldaps://ldaservername:636 -d Config,Stats

参照