OpenLDAP
OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、/etc/passwd
を置き換える Linux システム認証など) の認証バックエンドとして使われ、ユーザーデータを保持します。
ldap
で始まる OpenLDAP のコマンド (ldapsearch
など) はクライアント側のユーティリティであり、slap
で始まるコマンド (slapcat
など) はサーバー側のユーティリティです。
ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。初めてディレクトリサービスに接する場合は、ここ を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。
目次
インストール
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
の一番上に追加すると良いでしょう:
include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.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
データベースディレクトリを準備します。デフォルトの設定ファイルをコピーして適切な所有権を設定してください:
# cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG # chown ldap:ldap /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
という行を追加してください。
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
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.
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.
次のステップ
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".
参照
- Official OpenLDAP Software 2.4 Administrator's Guide
- phpLDAPadmin phpMyAdmin 風のウェブインターフェイスツール
- LDAP Authentication
- apachedirectorystudioAUR Eclipse ベースの LDAP ビューア (AUR)。OpenLDAP でも問題なく動作します