GeekFactory

int128.hatenablog.com

OpenLDAP で cn=config の管理者パスワードを忘れたら

OpenLDAP 2.3以降では slapd.conf の代わりにディレクトリ上で設定を管理する仕組みが用意されています。ずっと前に作ったディレクトリを触っていたら訳が分からなくなったので、自分用メモを残しておきます。

  • dc=example,dc=com のツリーに通常のディレクトリを格納しているものとする。
  • cn=config のツリーにOpenLDAPの設定が格納されている。
  • dc=example,dc=com の管理者アカウントは olcDatabase={1}hdb,cn=config の olcRootDN 属性と olcRootPW 属性に格納されている。これは cn=config ツリーに入っているので、通常のアカウントからは見えない。
  • cn=config にアクセスするには cn=config の管理者アカウントでバインドする必要がある。通常のアカウントからは見えない。
  • cn=config の管理者アカウントは olcDatabase={0}config,cn=config の olcRootDN 属性と olcRootPW 属性に格納されている。
  • cn=config の管理者アカウントが分からない場合は /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif を見ればよい。パスワードはBase64がかかっているものの、簡単に平文に戻せるので注意すること。

復旧手順

具体的な手順を残しておきます。

1. `/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif` からパスワードを取得してBase64デコードする。
2. `cn=config` とそのパスワードでバインドして、 `olcDatabase={1}hdb,cn=config` ツリーを開く。
3. `slappasswd` コマンドでSSHAパスワードを生成する。
4. `olcRootPW` をSSHAパスワードで更新する。
5. `olcRootDN` と `olcRootPW` でバインドする。