Здраствуйте. Есть задача поменять суффикс в базе openLDAP. Хотел посоветоваться. Я решил старый суффикс не убивать, мало ли пригодится. Какой план действий я вижу:
Есть база:
dn: olcDatabase={1}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {1}bdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=com
olcAccess: {0}to attrs=userPassword by self write by group.exact="cn=Directory Administrators,dc=example,dc=com" write by dn="uid=ldap-proxy,ou=Special Users,dc=example,dc=com" read by dn="cn=outldap02,dc=example,dc=com" read by dn="cn=replica,dc=example,dc=com" read by anonymous auth by * none
olcAccess: {1}to filter="(sshPublicKey=*)" attrs=entry,uid,sshPublicKey by anonymous read by * break
olcAccess: {2}to attrs=sshPublicKey by self write by group.exact="cn=Directory Administrators,dc=example,dc=com" write by dn.one="ou=Special Users,dc=example,dc=com" read by * none
olcAccess: {3}to dn.subtree="ou=Special Users,dc=example,dc=com" by self write by group.exact="cn=Directory Administrators,dc=example,dc=com" write by dn.one="ou=Special Users,dc=example,dc=com" read by dn="cn=outldap02,dc=example,dc=com" read by dn="cn=replica,dc=example,dc=com" read by * none
olcAccess: {4}to dn.one="cn=config,dc=example,dc=com" by * read
olcAccess: {5}to * by peername.ip="xx.xx.xx.xx" read by peername.ip="xx.xx.xx.xx" read by peername.ip="192.168.250.78" read by self write by group.exact="cn=Directory Administrators,dc=example,dc=com" write by users read by * search
olcLastMod: TRUE
olcLimits: {0}dn.exact="cn=replica,dc=example,dc=com" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}HlnqlaPuqKyfvtpISYz/xvBbhDpQu2NX
olcSizeLimit: -1
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: uid eq
olcDbIndex: uidNumber eq
olcDbIndex: uniqueMember eq
olcDbIndex: gidNumber eq
olcDbIndex: memberUid eq
olcDbIndex: alias eq
olcDbIndex: mail eq
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaDomainName eq
olcDbIndex: loginShell eq
olcDbIndex: default sub
olcDbIndex: objectClass,entryCSN,entryUUID eq
olcDbIndex: ou eq
olcDbIndex: cn eq
olcDbIndex: apple-generateduid eq
olcDbIndex: apple-group-memberguid eq
Я так понимаю мне необходимо создать LDIF с такими же параметрами, но заменить суффик. Должно получиться типа такого:
dn: olcDatabase={3}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {3}bdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example1,dc=com
olcAccess: {0}to attrs=userPassword by self write by group.exact="cn=Directory Administrators,dc=example1,dc=com" write by dn="uid=ldap-proxy,ou=Special Users,dc=example1,dc=com" read by dn="cn=outldap02,dc=example1,dc=com" read by dn="cn=replica,dc=example1,dc=com" read by anonymous auth by * none
olcAccess: {1}to filter="(sshPublicKey=*)" attrs=entry,uid,sshPublicKey by anonymous read by * break
olcAccess: {2}to attrs=sshPublicKey by self write by group.exact="cn=Directory Administrators,dc=example1,dc=com" write by dn.one="ou=Special Users,dc=example1,dc=com" read by * none
olcAccess: {3}to dn.subtree="ou=Special Users,dc=example1,dc=com" by self write by group.exact="cn=Directory Administrators,dc=example1,dc=com" write by dn.one="ou=Special Users,dc=example1,dc=com" read by dn="cn=outldap02,dc=example1,dc=com" read by dn="cn=replica,dc=example1,dc=com" read by * none
olcAccess: {4}to dn.one="cn=config,dc=example1,dc=com" by * read
olcAccess: {5}to * by peername.ip="xx.xx.xx.xx" read by peername.ip="xx.xx.xx.xx" read by peername.ip="192.168.250.78" read by self write by group.exact="cn=Directory Administrators,dc=example1,dc=com" write by users read by * search
olcLastMod: TRUE
olcLimits: {0}dn.exact="cn=replica,dc=example1,dc=com" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
olcRootDN: cn=admin,dc=example1,dc=com
olcRootPW: {SSHA}HlnqlaPuqKyfvtpISYz/xvBbhDpQu2NX
olcSizeLimit: -1
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: uid eq
olcDbIndex: uidNumber eq
olcDbIndex: uniqueMember eq
olcDbIndex: gidNumber eq
olcDbIndex: memberUid eq
olcDbIndex: alias eq
olcDbIndex: mail eq
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaDomainName eq
olcDbIndex: loginShell eq
olcDbIndex: default sub
olcDbIndex: objectClass,entryCSN,entryUUID eq
olcDbIndex: ou eq
olcDbIndex: cn eq
olcDbIndex: apple-generateduid eq
olcDbIndex: apple-group-memberguid eq
Затем сделать выгрузку содержимого каталога с переименованным суффиксом в ldif файл, что-то типа такого:
ldapsearch -o ldif-wrap=no -QLLL -Y EXTERNAL -H ldapi:/// -b dc=example,dc=com | sed 's/example/example1/g' > base.ldif
и вгрузить его в новую базу.
Насколько корректен такой перенос?
ЗЫ. Понятное дело, что ещё сертификаты надо будет поменять.