■slapdのDBのバックアップ(3パターン+1)、DBの初期化、リストア
WheezyでLDAP認証、SSHログイン
http://d.hatena.ne.jp/labunix/20130418
■バックアップとバックアップデータの検証
$ sudo slapcat -s "dc=openldap,dc=local" -l backup.ldif
$ sudo slapadd -u -v -l backup.ldif
added: "dc=openldap,dc=local"
added: "cn=admin,dc=openldap,dc=local"
added: "ou=People,dc=openldap,dc=local"
added: "ou=Group,dc=openldap,dc=local"
added: "uid=ldapuser,ou=People,dc=openldap,dc=local"
added: "cn=ldapgroup,ou=Group,dc=openldap,dc=local"
_#################### 100.00% eta none elapsed none fast!
$ sudo slapcat -v -s "ou=People,dc=openldap,dc=local" -l user_backup.ldif
$ sudo slapadd -u -v -l user_backup.ldif
added: "ou=People,dc=openldap,dc=local"
added: "uid=ldapuser,ou=People,dc=openldap,dc=local"
_#################### 100.00% eta none elapsed none fast!
$ sudo slapcat -v -s "ou=Group,dc=openldap,dc=local" -l group_backup.ldif
$ sudo slapadd -u -v -l group_backup.ldif
added: "ou=Group,dc=openldap,dc=local"
added: "cn=ldapgroup,ou=Group,dc=openldap,dc=local"
_#################### 100.00% eta none elapsed none fast!
■これには、前回別にした「ug_init_ou.ldif」の内容が含まれている。
$ grep objectClass [ug]*backup.ldif
group_backup.ldif:objectClass: organizationalUnit
group_backup.ldif:objectClass: top
group_backup.ldif:objectClass: posixGroup
user_backup.ldif:objectClass: organizationalUnit
user_backup.ldif:objectClass: top
user_backup.ldif:objectClass: account
user_backup.ldif:objectClass: posixAccount
user_backup.ldif:objectClass: shadowAccount
■「backup.ldif」では「dn」の2つが含まれており、このままでは使えない。
$ grep ^dn *backup.ldif
backup.ldif:dn: dc=openldap,dc=local
backup.ldif:dn: cn=admin,dc=openldap,dc=local
backup.ldif:dn: ou=People,dc=openldap,dc=local
backup.ldif:dn: ou=Group,dc=openldap,dc=local
backup.ldif:dn: uid=ldapuser,ou=People,dc=openldap,dc=local
backup.ldif:dn: cn=ldapgroup,ou=Group,dc=openldap,dc=local
group_backup.ldif:dn: ou=Group,dc=openldap,dc=local
group_backup.ldif:dn: cn=ldapgroup,ou=Group,dc=openldap,dc=local
user_backup.ldif:dn: ou=People,dc=openldap,dc=local
user_backup.ldif:dn: uid=ldapuser,ou=People,dc=openldap,dc=local
■初期化
$ sudo /etc/init.d/slapd stop
[ ok ] Stopping OpenLDAP: slapd.
$ ls /var/lib/ldap
DB_CONFIG __db.002 __db.004 __db.006 dn2id.bdb log.0000000001
__db.001 __db.003 __db.005 alock id2entry.bdb objectClass.bdb
$ sudo rm -fr /var/lib/ldap/*
■リストア前の再設定
$ sudo dpkg-reconfigure slapd
OpenLDAP サーバの設定を省略しますか? <いいえ>
DNS ドメイン名: openldap.local
組織名: openldap.local
管理者のパスワード: ※初期化前と同じもの
利用するデータベースバックエンド: HDB
slapd をパージしたときにデータベースを削除しますか? <いいえ>
LDAPv2 プロトコルを許可しますか? <いいえ>
[ ok ] Stopping OpenLDAP: slapd.
Creating initial configuration... done.
Creating LDAP directory... done.
[ ok ] Starting OpenLDAP: slapd.
■所有者がopenldapとしてDBが再作成される。
$ ls -l /var/lib/ldap/
合計 1404
-rw-r--r-- 1 openldap openldap 96 4月 18 21:31 DB_CONFIG
-rw------- 1 openldap openldap 24576 4月 18 21:31 __db.001
-rw------- 1 openldap openldap 368640 4月 18 21:31 __db.002
-rw------- 1 openldap openldap 2629632 4月 18 21:31 __db.003
-rw------- 1 openldap openldap 163840 4月 18 21:31 __db.004
-rw------- 1 openldap openldap 1286144 4月 18 21:31 __db.005
-rw------- 1 openldap openldap 32768 4月 18 21:31 __db.006
-rw-r--r-- 1 openldap openldap 2048 4月 18 21:31 alock
-rw------- 1 openldap openldap 8192 4月 18 21:31 dn2id.bdb
-rw------- 1 openldap openldap 32768 4月 18 21:31 id2entry.bdb
-rw------- 1 openldap openldap 10485760 4月 18 21:31 log.0000000001
-rw------- 1 openldap openldap 8192 4月 18 21:31 objectClass.bdb
■DBが初期化されたことを確認
$ ldapsearch -x -LLL -h localhost -b "dc=openldap,dc=local" "objectClass=top"
dn: dc=openldap,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: openldap.local
dc: openldap
dn: cn=admin,dc=openldap,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
■パターン1
前回の2つの登録を行う場合
$ sudo ldapadd -f ug_init_ou.ldif -x -D "cn=admin,dc=openldap,dc=local" -W
$ sudo ldapadd -f ldapuser_init_cn.ldif -x -D "cn=admin,dc=openldap,dc=local" -W
前回の2つの登録の確認
$ ldapsearch -x -LLL -h localhost -b "dc=openldap,dc=local" "uid=ldapuser"
dn: uid=ldapuser,ou=People,dc=openldap,dc=local
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
uid: ldapuser
uidNumber: 10000
gidNumber: 10000
loginShell: /bin/bash
homeDirectory: /home/ldapuser
cn: OpenLdap Div
$ ldapsearch -x -LLL -h localhost -b "dc=openldap,dc=local" "cn=ldapgroup"
dn: cn=ldapgroup,ou=Group,dc=openldap,dc=local
objectClass: posixGroup
cn: ldapgroup
gidNumber: 10000
memberUid: ldapuser
sshログインチェック
$ ssh ldapuser@localhost
■パターン2
「user_backup.ldif」「group_backup.ldif」を使用する
$ sudo /etc/init.d/slapd stop
[ ok ] Stopping OpenLDAP: slapd.
$ sudo slapadd -u -v -l user_backup.ldif
added: "ou=People,dc=openldap,dc=local"
added: "uid=ldapuser,ou=People,dc=openldap,dc=local"
_#################### 100.00% eta none elapsed none fast!
$ sudo slapadd -v -l user_backup.ldif
added: "ou=People,dc=openldap,dc=local" (00000003)
added: "uid=ldapuser,ou=People,dc=openldap,dc=local" (00000004)
_#################### 100.00% eta none elapsed none fast!
Closing DB...
$ sudo slapadd -u -v -l group_backup.ldif
added: "ou=Group,dc=openldap,dc=local"
added: "cn=ldapgroup,ou=Group,dc=openldap,dc=local"
_#################### 100.00% eta none elapsed none fast!
$ sudo slapadd -v -l group_backup.ldif
added: "ou=Group,dc=openldap,dc=local" (00000005)
added: "cn=ldapgroup,ou=Group,dc=openldap,dc=local" (00000006)
_#################### 100.00% eta none elapsed none fast!
Closing DB...
slapindexで再構成
$ sudo -u openldap slapindex
$ sudo /etc/init.d/slapd restart
[ ok ] Stopping OpenLDAP: slapd.
[ ok ] Starting OpenLDAP: slapd.
sshでログインチェック
$ ssh ldapuser@localhost
■パターン3
「backup.ldif」からリストアする方法
「dn」がtopとadminは削除する。
$ sudo /etc/init.d/slapd stop
$ sudo slapadd -u -v -l backup.ldif
added: "ou=People,dc=openldap,dc=local"
added: "ou=Group,dc=openldap,dc=local"
added: "uid=ldapuser,ou=People,dc=openldap,dc=local"
added: "cn=ldapgroup,ou=Group,dc=openldap,dc=local"
_#################### 100.00% eta none elapsed none fast!
$ sudo slapadd -v -l backup.ldif
added: "ou=People,dc=openldap,dc=local" (00000003)
added: "ou=Group,dc=openldap,dc=local" (00000004)
added: "uid=ldapuser,ou=People,dc=openldap,dc=local" (00000005)
added: "cn=ldapgroup,ou=Group,dc=openldap,dc=local" (00000006)
_#################### 100.00% eta none elapsed none fast!
Closing DB...
$ sudo -u openldap slapindex
$ sudo /etc/init.d/slapd start
■おまけ
DBが壊れてないなら苦労しませんよね。
$ sudo tar zcvf hdb.tar.gz /var/lib/ldap/
tar: メンバ名から先頭の '/' を取り除きます
/var/lib/ldap/
/var/lib/ldap/__db.003
/var/lib/ldap/__db.005
/var/lib/ldap/__db.006
/var/lib/ldap/objectClass.bdb
/var/lib/ldap/__db.002
/var/lib/ldap/log.0000000001
/var/lib/ldap/dn2id.bdb
/var/lib/ldap/alock
/var/lib/ldap/id2entry.bdb
/var/lib/ldap/__db.004
/var/lib/ldap/__db.001
/var/lib/ldap/DB_CONFIG
$ sudo /etc/init.d/slapd stop
$ sudo rm -fr /var/lib/ldap/*
$ sudo tar zxvf hdb.tar.gz -C /
$ sudo /etc/init.d/slapd start
[ ok ] Starting OpenLDAP: slapd.
■最終チェック
$ ldapsearch -x -LLL -b "ou=People,dc=openldap,dc=local" "uid=*"
dn: uid=ldapuser,ou=People,dc=openldap,dc=local
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
uid: ldapuser
uidNumber: 10000
gidNumber: 10000
loginShell: /bin/bash
homeDirectory: /home/ldapuser
cn: OpenLdap Div
$ ldapsearch -x -LLL -b "ou=Group,dc=openldap,dc=local" "cn=*"
dn: cn=ldapgroup,ou=Group,dc=openldap,dc=local
objectClass: posixGroup
cn: ldapgroup
gidNumber: 10000
memberUid: ldapuser