「OpenLDAP」の版間の差分
(Created page with "Category:ネットワーク en:openLDAP ru:openLDAP zh-cn:OpenLDAP {{Related articles start}} {{Related2|LDAP Authentication|LDAP 認証}} {{Re...") |
Kusanaginoturugi (トーク | 投稿記録) (カテゴリを修正) |
||
(3人の利用者による、間の12版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:ディレクトリサービス]] |
− | [[en: |
+ | [[en:OpenLDAP]] |
− | [[ru: |
+ | [[ru:OpenLDAP]] |
− | [[zh- |
+ | [[zh-hans:OpenLDAP]] |
{{Related articles start}} |
{{Related articles start}} |
||
− | {{ |
+ | {{Related|LDAP 認証}} |
− | {{ |
+ | {{Related|LDAP ホスト}} |
{{Related articles end}} |
{{Related articles end}} |
||
− | OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、{{ic|/etc/passwd}} を置き換える [[LDAP |
+ | [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 をインストールしてサニティチェックを行います。 |
|
+ | {{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|[ |
+ | {{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 を設定 ==== |
||
− | + | デーモンの設定ファイル ({{ic|/etc/openldap/slapd.conf}}) を編集して以下の行を追加することで LDAP に証明書ファイルの場所を指定してください: |
|
+ | |||
{{bc| |
{{bc| |
||
# Certificate/SSL Section |
# Certificate/SSL Section |
||
− | TLSCipherSuite |
+ | 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 を起動 ==== |
||
− | + | {{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| |
+ | {{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. |
||
− | + | 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 設定のチェック === |
+ | 以下のコマンドで設定をチェックできます: |
||
− | 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 |
+ | # 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 システム認証など) の認証バックエンドとして使われ、ユーザーデータを保持します。
このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。
インストール
OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。公式リポジトリの openldap パッケージでインストールしてください。
設定
サーバー
サーバーの設定ファイルは /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
よく使われる schema を slapd.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
よく使われる index を slapd.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
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
最後に、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.conf
にTLS_REQCERT allow
という行を追加してください。 - 認証局により署名された証明書を使う場合、
ldap.conf
に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 をテストする
下のコマンドを実行するだけで、簡単にテストできます:
$ 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 を見て下さい。
自己署名証明書の作成
自己署名証明書を作成するには、次を入力:
$ 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
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 によってサポートされているワイルドカードを使うことができます。
設定ディレクトリを再生成:
# 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
を再起動してください。サービスを有効にしていた場合は、再有効化もしてください。
次のステップ
これで基本的な LDAP のインストールは完了です。次はディレクトリを自分で設計してください。LDAP を何のために使うのかによって大きく変わってきます。LDAP を初めて使う場合は、まずはディレクトリを使用するクライアントサービス (PAM や Postfix など) によって推奨されている設定から始めると良いでしょう。
システム認証の方法は 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
参照
- Official OpenLDAP Software 2.4 Administrator's Guide
- phpLDAPadmin phpMyAdmin 風のウェブインターフェイスツール
- apachedirectorystudioAUR Eclipse ベースの LDAP ビューア (AUR)。OpenLDAP でも問題なく動作します