【slapcat/slapadd】の使い方, オプション~OpenLDAPのBackup/Resotreや移行, cn=config, cn=monitor, エラー~ | SEの道標
LDAP

【slapcat/slapadd】の使い方, オプション~OpenLDAPのBackup/Resotreや移行, cn=config, cn=monitor, エラー~

slapcat の基本とオプション

slapcat では OpenLDAP の設定(config)やLDAPアカウントのバックアップを取得することができます。出力されるのはLDIF形式というテキストベースの情報になります。

OpenLDAPの設定のバックアップ

[root@localhost ~]# slapcat -b cn=config -l ldap-config-YYYYMMDD.ldif

もしくは

[root@localhost ~]# slapcat -n 0 -l ldap-config-YYYYMMDD.ldif

-n はデータベース番号を指定するオプション、-b はLDAPツリーのDNを指定するオプションです。-n と -b は同時には使えません。config のデータベース番号は0です。

LDAPアカウントのバックアップ

LDAPアカウントのバックアップは以下のコマンドを使います。

[root@localhost ~]# slapcat -l  ldap-YYYYMMDD.ldif

これでも正常にバックアップはできますが、必ず以下のエラーが出力されます。

The first database does not allow slapcat; using the first available one (2).

原因は単純ですが、背景はやや複雑です。

OpenLDAP 2.4以降では設定情報はslapd.conf から /etc/openldap/slapd.d に展開され、1つのLDAPツリーが構成されます。つまり、設定情報だけを含むLDAPツリーができます。この仕組みを OLC(OnLine Configuration) と呼びます。これはデータベース番号0ですが、上記エラーのfirst databaseはそれとは別のデータベースを示しています。

このfirst database とは、同じく OpenLDAP 2.4 以降から本格的に実装され始めた「モニターデータベース」と呼ばれるもので、cn=monitor というLDAPツリーで表現されます。/etc/openldap/slapd.conf にも以下の設定が入っていると思います。

database monitor

このエラーを出力しないようにLDAPアカウントのバックアップを取得するためには以下のコマンドを使います。

[root@localhost ~]# slapcat -n 2 -l ldap-YYYYMMDD.ldif

つまり2番目のデータベースを取得するわけです。(エラーにある最後の(2).は2番目のデータベースを使え、という意味です。)

なお、モニターデータベースは SNMP MIB データベースのような使われ方をするもので、現在のセッション数等の統計情報を司るものですが、slapcat が許可されておらず、以下コマンドを実行しようとするとその次のエラーが出ます。

[root@localhost ~]# slapcat -n 1

slapcat: database doesn't support necessary operations.

slapcat は使えませんが、ldapsearch を使ってモニター情報の取得ができます。

[root@localhost ~]# ldapsearch -x -b cn=monitor -s sub +

slapadd の基本とオプション

slapadd では OpenLDAP の設定(config)やLDAPアカウントの追加をすることができます。入力するのはやはりLDIF形式ですので、slapcat で出力した情報がそのまま使えます。

OpenLDAPの設定のリストア

[root@localhost ~]# slapadd -n 0 -F /etc/openldap/slapd.d -l ldap-config-YYYYMMDD.ldif

LDAPアカウントのリストア

[root@localhost ~]# slapadd -l  ldap-YYYYMMDD.ldif

LDAP移行時の手順

ある OpenLDAP サーバから別の OpenLDAP サーバへサーバ移行をする場合は以下の手順を踏みます。

1. 旧LDAPサーバからslapcat で設定とアカウント情報をエクスポート

[root@localhost ~]# slapcat -n 0 ldap-config-backup.ldif
slapcat -n 2 ldap-account-backup.ldif

2. 新サーバでLDAPを停止

[root@localhost ~]# systemctl stop slapd

3. 新サーバで設定情報等をリネームし、空ディレクトリを新規作成、DB_CONFIGをコピー

[root@localhost ~]# mv /etc/openldap/slapd.d /etc/openldap/slapd.d_old
[root@localhost ~]# mkdir -m 700 /etc/openldap/slapd.d
[root@localhost ~]# mv /var/lib/ldap /var/lib/ldap_old
[root@localhost ~]# mkdir -m 700 /var/lib/ldap
[root@localhost ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

4. 新サーバへ設定とアカウント情報をインポート

[root@localhost ~]# slapadd -n 0 -F /etc/openldap/slapd.d -l ldap-config-backup.ldif
[root@localhost ~]# slapadd -l ldap-account-backup.ldif

5. 新サーバのLDAP関連ファイルの所有者・所有グループを変更

[root@localhost ~]# chown ldap:ldap -R /etc/openldap/slapd.d
[root@localhost ~]# chown ldap:ldap -R /var/lib/ldap

6. 新サーバでLDAPを再開

[root@localhost ~]# systemctl start slapd

コメント

タイトルとURLをコピーしました