UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS7 OpenLDAPの設定




■OpenLDAPのインストール

CentOS7にOpenLDAPサーバをインストールし設定します。まず必要なパッケージをyumからインストールします。

# yum install openldap openldap-servers openldap-clients
# rpm -qa | grep openldap
openldap-2.4.39-3.el7.x86_64
openldap-servers-2.4.39-3.el7.x86_64
openldap-clients-2.4.39-3.el7.x86_64


OpenLDAP2.3からConfiguration Backendという機能がサポートされ、テキストファイルに記載して設定を実施するのではなく、LDIFファイルを適用して設定をデータベースに格納し管理する機能であり、リモートから設定変更が可能であったり変更後の再起動が不要などのメリットがあるのですが、やリ方が結構煩わしいので、ここでは従来のslapd.confを編集するやりかたで記載致します。Configuration Backendを前提で設定する場合はCentOS6の以下を御覧ください。

http://www.unix-power.net/linux/openldap.html

CentOS6まではslapd.confのサンプルファイル ( /usr/share/openldap-servers/slapd.conf.obsolete ) を/etc/openldapにコピーしていたのですが、CentOS7からはこのファイルすらもなくなったようです。仕方ないのでCentOS6のslapd.conf.obsoleteをとってきて/etc/openldapに配置しました。CentOS6でも7でもOpenLDAPのバージョンは全く同一です。

そしてslapd ( OpenLDAP ) 起動時にこのファイルを読み込むよう以下のように設定を変更します。

# cp slapd.conf.obsolete /etc/openldap/slapd.conf
# vi /etc/sysconfig/slapd

# Any custom options
SLAPD_OPTIONS="-f /etc/openldap/slapd.conf"  # 追記


ちなみにConfiguration Backendで使用する/etc/openldap/slapd.dを使用する場合はSLAPD_OPTIONSに以下を追記しておけば、slapd.confを元にslapd.d配下を自動生成してくれます。Configuration Backendを使用しない場合は以下の設定は不要です。

# Any custom options
SLAPD_OPTIONS="-f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d"




■DB_CONFIGの設置、設定

続けてDB_CONFIGファイルをコピーします。こちらはCentOS7上にも存在しますので以下のコマンドでコピーします。

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG


上記のDB_CONFIGファイルに幾つかのパラメーターが設定されており、set_cachesizeとset_lg_bsizeについて記載します。

# one 0.25 GB cache
set_cachesize 0 268435456 1

# Data Directory
#set_data_dir db

# Transaction Log settings
set_lg_regionmax 262144
set_lg_bsize 2097152
#set_lg_dir logs


以下、項目の説明です。

設定項目 説明
set_cachesize  DB内部のキャッシュサイズを設定。単位は左から順に<gbytes> <bytes> <ncache>となり
キャッシュの大きさが<gbytes>と<bytes>の合計値となり、<ncache>で指定した数で分割され管理される。
set_lg_bsize  メモリ内に保持するトランザクションのログの大きさを指定します。更新処理を頻繁に行う場合は
この値を大きくすることで高速化が期待できます。


1万数千人規模のLDAPサーバを運用しておりますが、上記のデフォルトの値のままで変更せず問題なく運用できておりますので、余程の大規模環境で無い限り、デフォルトのままで問題無いと思います。



■ログの設定

デフォルトでOpenLDAPはログをlocal4に吐き出すように設定されていますが、デフォルトでlocal4のsyslogはどこにも保存されないので保存されるようrsyslogの設定変更が必要です。

# vi /etc/rsyslog.conf

# 以下を追記
*.info;mail.none;authpriv.none;cron.none;local4.none           /var/log/messages
local4.*                               /var/log/messages


さらにslapdのログレベルの指定を行うことができます。実際の設定する数値は以下のデバッグレベルを元に必要な情報を選択しレベルの合算を設定します。例えば256の「コネクション、LDAP命令、結果」の内容と16384の「LDAP同期レプリケーション」の内容の両方を表示したい場合には合算した数値16640を設定します。

レベル 名称  記録内容 
メッセージを出力しない 
trace  slapd内部の関数のトレース 
packets  パケット処理のデバック情報 
args  slapd内部の関数のトレースで引数も表示 
conns  コネクション管理 
16  BER  送受信したパケット 
32  filter  検索フィルタ処理 
64  config  設定ファイルに関する処理 
128  ACL  アクセス制御に関する処理 
256  stats  コネクション、LDAP命令、結果 
512  stats2  送られたエントリのステータス 
1024  shell  シェルバックエンドとの通信 
2048  parse  エントリの解析処理 
16384  sync  LDAP同期レプリケーション 
32768  none  どのログレベルにも属さないもの 
65535  any  全てのレベルを表示 


デフォルトでは256が設定されていますので、ここから変更する場合は起動オプションで-sを使用して値を指定します。下記では-sを使用して512を指定する場合の例です。

# vi /etc/sysconfig/slapd

# Options of slapd (see man slapd)
SLAPD_OPTIONS="-f /etc/openldap/slapd.conf -s 512"




■OpenLDAPの基本設定

LDAPの基本設定を行う事前準備としてManagerのパスワードをハッシュ化したものを予め準備しておきます。これにはslappasswdというコマンドを使って実行します。

# slappasswd
New password:[パスワード入力]
Re-enter new password:[パスワード再入力]
{SSHA}HhD5qAGJHb0asfFkQbk7n1OjsPoFRrC0


{SSHA}と表記されているのはハッシュ文字列がSSHA形式であることを表しています。この文字列をエディタなどに貼り付けて保存しておきます。これでようやく設定を行う下準備が整いましたので上記で移動してきた/etc/openldap/slapd.confを編集していきます。

# vi /etc/openldap/slapd.conf

<省略>

# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn.  (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!

# userPassword属性に対するアクセス制限
# Managerからは他のDNの参照および書き換えが可能
# search001~010までは読み込み可能 ( 他システムとのLDAP連携用アカウント )
# 匿名接続で認証し閲覧を許可。これを指定しない場合、ここに記載されたDNでしか接続できない
# それ以外に関しては全てを禁止
access to attrs=userPassword
	by dn.exact="cn=Manager,dc=unix-power,dc=net" write
	by dn.exact="cn=search001,dc=unix-power,dc=net" read
	by dn.exact="cn=search002,dc=unix-power,dc=net" read
	by dn.exact="cn=search003,dc=unix-power,dc=net" read
	by dn.exact="cn=search004,dc=unix-power,dc=net" read
	by dn.exact="cn=search005,dc=unix-power,dc=net" read
	by dn.exact="cn=search006,dc=unix-power,dc=net" read
	by dn.exact="cn=search007,dc=unix-power,dc=net" read
	by dn.exact="cn=search008,dc=unix-power,dc=net" read
	by dn.exact="cn=search009,dc=unix-power,dc=net" read
	by dn.exact="cn=search010,dc=unix-power,dc=net" read
	by anonymous auth
	by * none

# パスワード属性以外に対するアクセス制限
# Managerおよび自分自身からは参照および書き換えが可能
# search001~010までは読み込み可能 ( 他システムとのLDAP連携用アカウント )
# それ以外に関しては全てを禁止
access to *
    by self write
	by dn.exact="cn=Manager,dc=unix-power,dc=net" write
	by dn.exact="cn=search001,dc=unix-power,dc=net" read
	by dn.exact="cn=search002,dc=unix-power,dc=net" read
	by dn.exact="cn=search003,dc=unix-power,dc=net" read
	by dn.exact="cn=search004,dc=unix-power,dc=net" read
	by dn.exact="cn=search005,dc=unix-power,dc=net" read
	by dn.exact="cn=search006,dc=unix-power,dc=net" read
	by dn.exact="cn=search007,dc=unix-power,dc=net" read
	by dn.exact="cn=search008,dc=unix-power,dc=net" read
	by dn.exact="cn=search009,dc=unix-power,dc=net" read
	by dn.exact="cn=search010,dc=unix-power,dc=net" read
	by * none

# Configuration Backendは使わないので以下をコメントアウト
# enable on-the-fly configuration (cn=config)
#database config
#access to *
#        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
#        by * none

# monitorデータベースに対するアクセス制限でご自身の環境に合わせて編集
# Managerがreadのみ可能でその他はアクセスできない
# enable server status monitoring (cn=monitor)
database monitor
access to *
#        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=Manager,dc=unix-power,dc=net" read
        by * none

#######################################################################
# database definitions
#######################################################################
# 自身の環境に合わせて編集
database        bdb
suffix          "dc=unix-power,dc=net"
checkpoint      1024 15
rootdn          "cn=Manager,dc=unix-power,dc=net"
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw                secret
# 事前に出力したハッシュ化したパスワードを記述
rootpw                {SSHA}HhD5qAGJHb0asfFkQbk7n1OjsPoFRrC0

<省略>


編集が終われば作成したConfigファイルに問題がないか以下のコマンドでチェックします。

# slaptest -u -f /etc/openldap/slapd.conf -v
config file testing succeeded


ちなみにConfiguration Backendで使用する/etc/openldap/slapd.dを構築するには以下のコマンドを実行します。

# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
# chown -R ldap.ldap /etc/openldap/slapd.d/*


最後にslapdサービスを有効化して起動します。

# systemctl enable slapd.service
# systemctl start slapd.service




■データの登録


初めてのLDAPサーバを起動した段階ではデータベースにディレクトリ情報が一切ありませんので登録するわけですが、その前に基本となるディレクトリ情報を登録します。登録内容は以下の図のようにします。



それ用のテキストファイル ( ldifファイル ) を用意してldapaddコマンドを適用して登録していきます。

ldapaddコマンドは標準入力からLDIFテキストフォーマットのLDAPエントリーのデータを読み込み、それをLDAPサーバに登録します。実際に使用する場合には以下のオプションでサーバとの通信方法を指定する必要があります。


オプション 説明 
-H <uri>  LDAPサーバを参照するURIを指定する。プロトコル、ホスト、ポートのみ指定できる。
指定しない場合、ldap://localhost:389となる。 
-h <host>  LDAPサーバを指定する。指定しない場合、ローカルホストになる ( 非奨励オプション。-Hの使用を奨励 ) 
-p <port>  LDAPサーバのポート番号を指定する。指定しない場合、389となる ( 非奨励オプション。-Hの使用を奨励 ) 
-x  簡易認証設定 
-D <binddn>  LDAPサーバの認証に使うDN ( バインドDN ) を指定する。指定しない場合は匿名接続となる。 
-w <passwd>  LDAPサーバの認証に使うDNのパスワードを指定する。 
-W  LDAPサーバの認証に使うDNのパスワードをプロンプトから入力することを指定する。 
-f <file>  LDIFテキストフォーマットファイルを標準入力ではなく、指定したファイルから読み込む。 


登録すべき情報はLDIF形式と呼ばれるテキストファイルに記述します。たとえば unix-power.netドメインの情報を登録する場合は以下のようなLDIFファイルを作成し、init.ldifファイルとして保存します。


● Managerの登録

# vi init.ldif

dn: dc=unix-power,dc=net
objectclass: dcObject
objectclass: organization
o: VIRTUAL CORPORATION
dc: unix-power

dn: cn=Manager,dc=unix-power,dc=net
objectclass: organizationalRole
cn: Manager


LDIF ファイルにかいた情報をデータベースに登録するにはldapaddコマンドを使います。例えば上記ファイルを内容をデータベースに登録するには以下の ldapaddコマンドを実行します。すると-Dオプションで指定したユーザのパスワードを尋ねられますのでこれを入力します。認証に成功すると 「adding new entry~」というメッセージがエントリごとに表示されます。

# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f init.ldif
Enter LDAP Password:[パスワード入力]
adding new entry "dc=unix-power,dc=net"

adding new entry "cn=Manager,dc=unix-power,dc=net"


上記では-Wで対話的にパスワード入力していますが、-w ******でコマンドラインでも指定できます。続いてOUを登録します。同様に追加の内容を予めファイルに保存しておきまとめて実行します。

●検索用アカウントの登録

他のシステムとLDAP連携するためのsearch001~010アカウントを合わせて登録しておきます。

# vi search.ldif

dn: cn=search001,dc=unix-power,dc=net
objectclass: organizationalRole
objectclass: simpleSecurityObject
cn: search001
userPassword: {CRYPT}vxTKZHVjbclcM

dn: cn=search002,dc=unix-power,dc=net
objectclass: organizationalRole
objectclass: simpleSecurityObject
cn: search002
userPassword: {CRYPT}vxTKZHVjbclcM

dn: cn=search003,dc=unix-power,dc=net
objectclass: organizationalRole
objectclass: simpleSecurityObject
cn: search003
userPassword: {CRYPT}vxTKZHVjbclcM

<省略>

# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f search.ldif
Enter LDAP Password:[パスワード入力]
adding new entry "cn=search001,dc=unix-power,dc=net"

adding new entry "cn=search002,dc=unix-power,dc=net"

adding new entry "cn=search003,dc=unix-power,dc=net"

<省略>


● OU ( Organization Unit ) の登録


# vi add.ldif
dn: ou=Users,dc=unix-power,dc=net
objectclass: organizationalUnit
ou: Users

dn: ou=Groups,dc=unix-power,dc=net
objectclass: organizationalUnit
ou: Groups

dn: ou=Computers,dc=unix-power,dc=net
objectclass: organizationalUnit
ou: Computers

# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f add.ldif
Enter LDAP Password:[パスワード入力]
adding new entry "ou=Users,dc=unix-power,dc=net"

adding new entry "ou=Groups,dc=unix-power,dc=net"

adding new entry "ou=Computers,dc=unix-power,dc=net"


●Groupの登録


# vi groupadd.ldif
dn: cn=develop,ou=Groups,dc=unix-power,dc=net
objectClass: posixGroup
cn: develop
gidNumber: 1000

dn: cn=sales,ou=Groups,dc=unix-power,dc=net
objectClass: posixGroup
cn: sales
gidNumber: 1001

dn: cn=market,ou=Groups,dc=unix-power,dc=net
objectClass: posixGroup
cn: market
gidNumber: 1002

# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f groupadd.ldif
Enter LDAP Password:[パスワード入力]
adding new entry "cn=develop,ou=Groups,dc=unix-power,dc=net"

adding new entry "cn=sales,ou=Groups,dc=unix-power,dc=net"

adding new entry "cn=market,ou=Groups,dc=unix-power,dc=net"


●Userの登録

# vi useradd.ldif

objectclass: inetOrgPerson
sn: takeda
cn: kazuma
displayName: Takeda Kazuma
uid: takeda
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/takeda
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: takeda@unix-power.net

dn: uid=suzuki,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: suzuki
cn: hajime
displayName: Suzuki Hajime
uid: suzuki
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/suzuki
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: suzuki@unix-power.net

dn: uid=tanaka,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: tanaka
cn: takuya
displayName: Tanaka Takuya
uid: tanaka
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/tanaka
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: tanaka@unix-power.net
"useradd.ldif" [New] 41L, 914C written
[root@y-lab6 ~]# more useradd.ldif
dn: uid=takeda,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: takeda
cn: kazuma
displayName: Takeda Kazuma
uid: takeda
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/takeda
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: takeda@unix-power.net

dn: uid=suzuki,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: suzuki
cn: hajime
displayName: Suzuki Hajime
uid: suzuki
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/suzuki
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: suzuki@unix-power.net

dn: uid=tanaka,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: tanaka
cn: takuya
displayName: Tanaka Takuya
uid: tanaka
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/tanaka
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: tanaka@unix-power.net

# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f useradd.ldif
Enter LDAP Password:[パスワード入力]
adding new entry "uid=takeda,ou=Users,dc=unix-power,dc=net"

adding new entry "uid=suzuki,ou=Users,dc=unix-power,dc=net"

adding new entry "uid=tanaka,ou=Users,dc=unix-power,dc=net"


各ユーザに登録するパスワードは次のようにしてslappasswdコマンドで予め作成しておきます。

# slappasswd -h '{CRYPT}'
New password:
Re-enter new password:
{CRYPT}B5fKzlwfatuy2


slappaswdの引数の-hオプションは暗号化のタイプの指定です。nss-pam-ldapを使用する場合には暗号化方式には{CRYPT}にします。



■LDAPの削除 ( ldapdelete )

ldapdeleteはLDAPエントリの削除を行うためのコマンドです。削除するDNを指定して実行することでLDAPサーバの該当するDNを削除することができます。実際に利用する場合にはオプションでLDAPサーバとの通信方法を指定する必要があります。ldapdeleteで利用できるオプションは-fオプションを除いてldapaddと同様です。以下にユーザtanakaを削除する場合の例を示します。

# ldapdelete -x -W -D "cn=Manager,dc=unix-power,dc=net" "uid=tanaka,ou=Users,dc=unix-power,dc=net"


■LDAPの検索 ( ldapsearch )

ldapsearchはLDAPに登録されているエントリの検索を行うためのコマンドです。検索フィルタを指定することで条件付き検索を行うことができます。また、表示する属性タイプを指定することもできます。実際に利用する場合にはオプションでLDAPサーバとの通信方法を指定する必要があります。ldapsearchでは以下のオプションを使用することができます。


オプション 説明 
-H <uri>  LDAPサーバを参照するURIを指定する。プロトコル、ホスト、ポートのみ指定できる。指定しない場合、ldap://localhost:389となる。 
-h <host>  LDAPサーバを指定する。指定しない場合、ローカルホストになる ( 非奨励オプション。-Hの使用を奨励 ) 
-p <port>  LDAPサーバのポート番号を指定する。指定しない場合、389となる ( 非奨励オプション。-Hの使用を奨励 ) 
-x  簡易認証設定 
-D <binddn>  LDAPサーバの認証に使うDN ( バインドDN ) を指定する。指定しない場合は匿名接続となる。 
-w <passwd>  LDAPサーバの認証に使うDNのパスワードを指定する。 
-W  LDAPサーバの認証に使うDNのパスワードをプロンプトから入力することを指定する。 
-b 検索の起点を指定。例えばBaseDNに「ou=dept,dc=unix-power,dc=net」に指定した場合は上位のエントリは検索対象外となります。
-s [Scope] 検索範囲を指定します。[Scope]の値は「base」「one」「sub」の3種類です。「base」はBaseDNエントリのみです。「one」はBaseDNエントリ自身と直下のエントリ、「sub」はBaseDN以下全てのエントリを指します。-sに何も指定しなければ「sub」が適用されます。
[Filter] 検索フィ ルタを指定します。例えば全てのエントリを抽出するには「(objectclass=*)」を指定します。また、cn属性が「tanaka」で終わるエントリを抽出するには「(cn=*tanaka)」とワイルドカードを指定できます。その他、複数のフィルタを組み合わせたAND検索やOR検索も実行できます。例えばcn属性が「tanaka」で終わり、かつcn属性が「taro」で始 まるエントリを抽出するには「(&(cn=*tanaka)(cn=taro*))」とAND検索を表す&を使って複数指定できます。OR検索には「|」、否定記号には「!」記号を使います。
[Attr] 表示対象 とする属性を指定します。例えばあるエントリのtelephonenumber属性値を表示対象にする場合はAttrにtelnephoneNumberを指定します。何も指定しなければ全ての属性値が表示されます。
-L 検索結果をLDIFv1フォーマットで表示する 
-LL  検索結果をコメントのないフォーマットで表示する 
-LLL  検索結果をコメント無し、LDIFバージョン表示なしで表示する。 


ldapsearchの実行例を一つ上げます。この例ではLDAPサーバへの接続に簡易認証を使います。(-x)認証はユーザfooで試行し(-D)、パスワード入力用のプロンプトを画面に表示させます。(-W)検索の起点は出版部の住所録エントリで(-b)、それ以下全てのエントリを検索対象としています。(-s)また、cn属性値で名前を絞込み('(cn=*tanaka)')、抽出されたエントリの勤務先電話番号(telephoneNuber)を表示します。


# ldapsearch -x -W -D "cn=search001,dc=unix-power,dc=net" 
                                    ↑①            
 -b "ou=Users,dc=unix-power,dc=net" -s sub '(uid=*tanaka)' telephoneNumber 
       ↑②                           ↑③       ↑④          ↑⑤
①:ユーザ(DN : cn=search001,dc=unix-power,dc=net)で接続する。
    その際、パスワード入力用のプロンプトを表示する
②:検索の起点を「ou=Users,dc=unix-power,dc=net」とする
③:起点以下全てのエントリを検索対象とする
④:cn属性がtanakaで終わるエントリを抽出する
⑤:該当するエントリに格納される「telephoneNumber」属性値を表示する


例えば特定の属性値のみ表示するのではなく、設定されている属性の値を全て表示するには上記の⑤を省略して実行すれば良いことになります。以下はuidがtanakaを条件にした検索例です。

# ldapsearch -x -W -D "cn=search001,dc=unix-power,dc=net" -b "ou=Users,dc=unix-power,dc=net" -s sub '(uid=tanaka)'
Enter LDAP Password:[パスワード入力]
# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=unix-power,dc=net> with scope subtree
# filter: (uid=tanaka)
# requesting: ALL
#

# tanaka, Users, unix-power.net
dn: uid=tanaka,ou=Users,dc=unix-power,dc=net
objectClass: posixAccount
objectClass: inetOrgPerson
sn: tanaka
cn: takuya
displayName: Tanaka Takuya
uid: tanaka
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/tanaka
loginShell: /bin/bash
userPassword:: e0NSWVBUfUI1Zkt6bHdmYXR1eTI=
mail: tanaka@unix-power.net

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


上記のように追加・削除・検索、そして既存データの修正などもLDIFファイルを用いて行うことが可能ですが、都度テキストファイルを用意して適用するのもわずわしいため、LDAPをGUIで操作するツールも無償公開されていたります。以下のページでOpenLDAPをGUIで操作するApache Directory Studioというのを紹介していますので参考にしてみてください。

http://www.unix-power.net/linux/ads.html



■OpenLDAPのバックアップ

OpenLDAPのデータファイルは/var/lib/ldapです。OSレベルでこの領域をバックアップしても良いのですがOpenLDAPでバックアップコマンドが提供されているのでこちらを使用します。ただし、この方法はOpenLDAPのデータの実体のみのバックアップなので/etc/openldap/slapd.confは別途バックアップしておく必要があります。実際のバックアップコマンドは下記のようになります。

# slapcat -l backup.ldif


backup.ldifには以下のような内容で作成されています。


# more backup.ldif

dn: dc=unix-power,dc=net
objectClass: dcObject
objectClass: organization
o: VIRTUAL CORPORATION
dc: unix-power
structuralObjectClass: organization
entryUUID: 9c06f28a-e5f5-1031-9b33-a71948dce7c2
creatorsName: cn=Manager,dc=unix-power,dc=net
createTimestamp: 20121229112118Z
entryCSN: 20121229112118.127129Z#000000#000#000000
modifiersName: cn=Manager,dc=unix-power,dc=net
modifyTimestamp: 20121229112118Z
<省略>


バックアップは正常にとれているものの、このコマンドを実行した際にはThe first database does not allow slapcat; using the first available one (2)というwarning?らしきものが吐かれますがバックアップは正常にとれていますので問題ないと思われます。


■OpenLDAPのリストア


OpenLDAPをリストアします。リストアの動作確認のため現状のデータを丸ごと削除します。


# rm -rf /var/lib/ldap/*


リストアを行うにはslapdを停止した上でslapaddコマンドを実施します。DB_CONFIGは全く編集していない状態なのでデフォルトのものをそのままコピーしています。


# systemctl stop slapd.service
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# slapadd -l /root/backup.ldif

The first database does not allow slapadd; using the first available one (2)
_#################### 100.00% eta   none elapsed            none fast!
Closing DB...

# chown -R ldap.ldap /var/lib/ldap/*
# systemctl start slapd.service


これで正常にリストアが完了しました。



 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.