OpenLDAP (日本語) - ArchWiki

# OpenLDAP (日本語)

関連記事

- LDAP 認証
- LDAP ホスト

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

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

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

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

## インストール

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

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

## 設定

### サーバー

Note: 既にマシン上に 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

よく使われる 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

Note: 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

Note: ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に 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.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

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

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

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

Warning: 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.

Note: 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.

Note: 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".

## 参照

- Official OpenLDAP Software 2.4 Administrator's Guide
- phpLDAPadmin phpMyAdmin 風のウェブインターフェイスツール
- LDAP Authentication
- apachedirectorystudio Eclipse ベースの LDAP ビューア (AUR)。OpenLDAP でも問題なく動作します

Category:

- Networking (日本語)