OpenLDAP

提供: ArchWiki
2014年12月5日 (金) 15:02時点におけるKusakata (トーク | 投稿記録)による版 (Created page with "Category:ネットワーク en:openLDAP ru:openLDAP zh-cn:OpenLDAP {{Related articles start}} {{Related2|LDAP Authentication|LDAP 認証}} {{Re...")
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

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

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

ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。初めてディレクトリサービスに接する場合は、ここ を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。

ヒント: このページに書かれているサーバーのセットアップ (OpenLDAP と TLS のインストールと設定) はこの対話式のスクリプトを実行することでも行えます。ただしクライアントは自分で設定する必要があります。

インストール

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

ノート: /run/openldap/ が適切なパーミッションで作成されるように、インストールした後サーバーを再起動する必要があります。FS#38408 を参照。

設定

サーバー

ノート: 既にマシン上に 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 の一番上に追加すると良いでしょう:

include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.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

データベースディレクトリを準備します。デフォルトの設定ファイルをコピーして適切な所有権を設定してください:

# cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG
# chown ldap:ldap /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
ノート: ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。
# slapindex
# chown ldap:ldap /var/lib/openldap/openldap-data/*

最後に、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 という行を追加してください。

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 cannot use a certificate that has a password associated to it.

自己署名証明書の作成

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

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

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).

Now that the certificate files have been created copy them to /etc/openldap/ssl/ (create this directory if it does not exist) and secure them. slapdcert.pem must be world readable because it contains the public key. 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/
# 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 を設定

Edit the daemon configuration file (/etc/openldap/slapd.conf) to tell LDAP where the certificate files reside by adding the following lines:

# Certificate/SSL Section
TLSCipherSuite HIGH:MEDIUM:-SSLv2:-SSLv3
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem

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.

ノート: To see which ciphers are supported by your local OpenSSL installation, type the following: openssl ciphers -v ALL

Regenerate the configuration directory:

# 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 を起動

You will have to edit slapd.service to change to protocol slapd listens on.

First, disable slapd.service if it is enabled.

Then, copy the stock service to /etc/systemd/system/:

# cp /usr/lib/systemd/system/slapd.service /etc/systemd/system/

Edit it, and add change ExecStart to:

/etc/systemd/system/slapd.service
ExecStart=/usr/bin/slapd -u ldap -g ldap -h "ldaps:///"

Localhost connections do not need to use SSL. So, if you want to access the server locally you should change the ExecStart line to:

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

Then reenable and start it:

# systemctl daemon-reload
# systemctl restart slapd.service

If slapd started successfully you can enable it.

ノート: If you created a self-signed certificate above, be sure to add TLS_REQCERT allow to /etc/openldap/ldap.conf on the client, or it will not be able connect to the server.

次のステップ

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).

A directory for system authentication is the LDAP Authentication article.

A nice web frontend is phpLDAPadmin.

トラブルシューティング

Client Authentication Checking

If you cannot connect to your server for non-secure authentication

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

and for TLS secured authentication with:

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

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

If you notice that slapd seems to start but then stops, try running:

# chown ldap:ldap /var/lib/openldap/openldap-data/*

to allow slapd write access to its data directory as the user "ldap".

参照