OpenLDAPサーバ構築メモ

基本的に先人たちの手順のリプレイだが、自分用メモ

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system-level_authentication_guide/openldap
https://qiita.com/gzock/items/f1ac346304653a92c8cb

パッケージインストール

#AnsibleTask
- package:
    name: "{{ item }}"
    state: "present"
  with_items:
    - openldap
    - openldap-clients
    - openldap-servers
    - openldap-servers-sql
    - compat-openldap
  become: true
  become_user: root

/etc/openldap/*と、/var/lib/ldap/が生成され、slapXXXやldapXXXコマンドが使えるようになる。
/etc/openldap/slapd.confは昔使われていたが、最近では利用できなくなったことに注意と注記あり。
確かに2019/05時点ではそもそもファイルが存在しない。

設定

グローバルオプション /etc/openldap/slapd.d/cn=config.ldif

今までslapXXXとldapXXXのコマンドの使い分けというか、そもそもの存在意義についてよく理解していなかったが、SLAPDがStandalone LdAP Daemonの略で、slapXXXはこのデーモンに対するコマンド。
なので/etc/openldap/slapd.d/以下はサーバ設定で、/etc/openldap/ldap.confはクライアント設定になる。

なお、RHEL 7.4以降はOpenLDAP Serverパッケージは同梱されない。

389 Directory Server set to replace OpenLDAP as Red Hat and SUSE withdraw support for OpenLDAP in their Enterprise Linux offerings

DB_CONFIG

ディレクトリサーバのバックエンドとしてつかうデータベースの設定。
ログサイズやキャッシュサイズ等を調整しパフォチューする。

cat /usr/share/openldap-servers/DB_CONFIG.example | ldapmodify -Y EXTERNAL -H ldapi://

# 確認① /var/lib/ldap/DB_CONFIGに反映されているか
cat /var/lib/ldap/DB_CONFIG

# 確認② /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif 
に反映されているか
cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif

/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif に登録されるときは”olcDbConfig: {0}set_cachesize x yyy”のように{N}がつく。
{N}の意味がよくわからないが、おそらく配列の添字array[N]みたいなもの?

olcDatabase={0}config,cn=configのolcRootPWの修正

ldapXXX -x -W -D cn=configやる時のパスワード設定。

#AnsibleTask

# slappasswdの結果を__config_slappasswdにset_factしておく
- set_fact:
    __config_slappasswd: "{SSHA}XYZ+xyz+XYZ+xyz+XYZ+xyz+XYZ+xyz+"


# Config Password
- ldap_entry:
    dn: 'olcDatabase={0}config,cn=config'
    objectClass:
      - olcDatabaseConfig
    attributes:
      olcRootPW: "{{ __config_slappasswd }}"
  become: true
  become_user: root


- ldap_attr:
    dn: 'olcDatabase={0}config,cn=config'
    name: olcRootPW
    values:
      - "{{ __config_slappasswd }}"
    state: exact
  become: true
  become_user: root

確認

# SASL認証(+Unixドメインソケット)を使った認証
ldapsearch -D cn=config -b cn=config -LLL -Y EXTERNAL -H ldapi:/// dn

# 設定したパスワードで認証可能か確認
ldapsearch -D cn=config -b cn=config -LLL -x -W dn


# 設定が正しければ同じ結果がSELECTされるはず

olcDatabase={2}hdb,cn=configのolcRootPWの設定

Database(ldapXXX -w -X -D cn=Manager,dc=my-domain,dc=com)のパスワードを修正する。
一般に、実際のOUやCN(ユーザやコンピュータ)が登録されるデータベースは管理用DN(olcRootDNの値)で接続するが、その時のパスワードを設定する。

#AnsibleTask

# slappasswdの結果を__hdb_slappasswdにset_factしておく
- set_fact:
    __hdb_slappasswd: "{SSHA}XYZ+xyz+XYZ+xyz+XYZ+xyz+XYZ+xyz+"


# Config Password
- ldap_entry:
    dn: 'olcDatabase={2}hdb,cn=config'
    objectClass:
      - olcDatabaseConfig
      - olcHdbConfig
    attributes:
      olcRootPW: "{{ __hdb_slappasswd }}"
  become: true
  become_user: root


- ldap_attr:
    dn: 'olcDatabase={2}hdb,cn=config'
    name: olcRootPW
    values:
      - "{{ __hdb_slappasswd }}"
    state: exact
  become: true
  become_user: root

パスワードの設定は以上だが、合わせてolcRootDNおよびolcSuffixを修正しないとデフォルト(dc=my-domain,dc=com)のままではあまり使い物にならない。

未修正の状態でパスワード設定の確認をするならこちらで行える

ldapsearch -LLL -x -W -D cn=Manager,dc=my-domain,dc=com -b cn=Manager,dc=my-domain,dc=com dn

# パスワードが正しくなかった場合:資格情報エラー
# "ldap_bind: Invalid credentials (49)"

# パスワードが正しかった場合:結果が抽出される(存在しなかった場合はデータ無)
# "No such object (32)"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です