pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

OpenLDAPサーバ構築(Ver2.4・RHEL8)

ポイント

  • 設定もLDAPで管理(Configuration Backend)
  • 設定ディレクトリ(/etc/openldap/slapd.d/cn\=config)配下のldifファイルの内容が設定される。
  • 設定ディレクトリ配下のファイルの直接編集は推奨されない
  • バックエンドDBの推奨はmdb(Lightning Memory-Mapped Database (LMDB))
  • mdbはチューニング不要 ※DB_CONFIGはbdbの設定ファイル
  • デフォルトのOLCのディレクトリツリーは以下の通り。
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config 2>/dev/null | grep "^dn"
dn: cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}monitor,cn=config
dn: olcDatabase={2}mdb,cn=config

f:id:pikesaku:20211120124238p:plain

セットアップ手順

①インストール

dnf install openldap-clients openldap-servers

②サービス起動

systemctl start slapd

③設定ディレクトリバックアップ

rsync -a /etc/openldap/slapd.d /etc/openldap/slapd.d_org

スキーマ追加

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

※必要に応じて追加
※以下で確認可能

ls /etc/openldap/slapd.d/cn\=config/cn\=schema/
cn={0}core.ldif  cn={1}cosine.ldif  cn={2}inetorgperson.ldif

⑤動的設定ディレクトリ設定

cat > ./config <<HERE
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=config
-
add: olcRootPW
olcRootPW: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
HERE
ldapadd -Y EXTERNAL -H ldapi:// -f ./config

※olcRootPWの値は、slappasswdで事前に生成した文字列を設定する。

⑥monitorディレクトリ設定

cat > ./monitor <<HERE
dn: olcDatabase={1}monitor,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=monitor
-
add: olcRootPW
olcRootPW: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
replace: olcAccess
olcAccess: to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
  by * none
HERE
ldapadd -Y EXTERNAL -H ldapi:// -f ./monitor

mdbディレクトリ設定

cat > ./mdb <<HERE
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=hoge,dc=com
-
replace: olcRootDN
olcRootDN: cn=Manager,dc=hoge,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
add: olcDbIndex
olcDbIndex: uid eq
olcDbIndex: entryCSN,entryUUID eq
-
replace: olcAccess
olcAccess: to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * none
HERE
ldapadd -Y EXTERNAL -H ldapi:// -f ./mdb

ドメインやインデックスは環境に応じて変更する。

Syslog出力設定 & ログローテート

local4.*を指定ログファイルへ
ログローテート対象にログファイル追加

IPv6無効化

slapd起動オプションで-4を指定。(/etc/sysconfig/slapdがないので、serviceファイル直接修正しかない???)

Configuration Backendへの移行

RHEL6→RHEL8へのOpenLDAPのマイグレ作業時の考察

[前提]
RHEL6でConfiguration Backendを使わず、slapd.confで設定管理してた場合。方法は3つある。

①slapd.confの設定内容を、Configuration Backendのldifに置き換えて設定を入れる。

→LDIF慣れてないと大変。

②slapd.conf→Configuration Backendへの設定移行をslaptestでやる。
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
③Configuration Backendを使わず、slapd.confで管理する。

/etc/openldap/slapd.dを削除して、/etc/openldap/slapd.confだけにすればOK
ただ、updateした時、/etc/openldap/slapd.d配下のファイルが作られてしまい、そっちが有効になってしまうかも。しかも、obsoleteでいずれ使えなくなる。

上記より②が妥当だが注意が必要。

バックエンドDBは、RHEL8ではdbdでなくmdbがデフォルトである点

slaptest実行前に、RHEL6から持ってきたslapd.confのdatabaseをmdbに変更する。
あと、bdb関連パラメタを削除する。checkpoint等。

slaptestコマンドがエラー終了する点

slaptestコマンド実行時にslapd.confで定義されたドメインのデータベースのファイルを/var/lib/ldapに探しに行ってエラーになる。

mdb_db_open: database "dc=hoge,dc=com" cannot be opened: No such file or directory (2). Restore from backup!
backend_startup_one (type=mdb, suffix="hoge,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)

エラーになっても、slapd.d配下にファイルは生成されており、正常にコンフィグ移行できてそう。ただエラーは気になる。
slapdを起動させれば、DBが生成されるので、以下でやれば、slaptestがエラーにならなくなる。
slaptest実行→エラー発生→slapd起動→slapd停止→slaptest再度実行→正常終了する

RHEL6のslapd.confでdatabase configをコメントアウトしてたら有効にする!これではまった。。。。。
slaptestコマンドでslapd.d配下にファイルが生成されるが、コマンド実行ユーザーがオーナーになる点。

chown -R ldap. /etc/openldap/slapd.d
をやる必要あり。slapaddと同じ。