centos下 docker方式安装openldap服务及原数据导入

原ldap服务器使用slapd.conf文件配置,新ldap服务使用docker安装openldap,新的ldap不建议使用slapd.conf文件配置。

OpenLDAP 2.3及更高版本已转为使用动态运行时配置引擎slapd-config
允许所有slapd的配置选项在运行中进行更改,无需重新启动服务器即可使更改生效。
目前版本仍然支持较旧的slapd.conf文件,但已不推荐使用,并且将会在新的OpenLDAP版本中不在支持。

虽然slapd-config的配置系统以文本文件形式保存在硬盘里(通常是在/usr/local/etc/openldap/slapd.d下),但应该永远不会直接编辑任何LDIF文件。
配置更改应通过LDAP操作执行,例如ldapadd,ldapdelete或ldapmodify命令执行自己写好的ldif文件

1. 使用docker pull openldap
docker pull osixia/openldap
2.创建几个目录

/mnt/sdb1/ldap/data/
/mnt/sdb1/ldap/conf/slapd.d
/mnt/sdb1/ldap/conffile
data目录保存数据
slapd.d目录保存配置
conffile目录用来与容器交换文件

3. 运行容器
 docker run --restart=always \
-v /mnt/sdb1/ldap/data/:/var/lib/ldap \
-v /mnt/sdb1/ldap/conf/slapd.d:/etc/ldap/slapd.d \
-v /mnt/sdb1/ldap/conffile/:/home/ldap/conffile \
-p 389:389 -p 636:636 \
--name openldap -d osixia/openldap --loglevel debug
4. 生成密码
docker exec -it openldap slappasswd
New password: 
Re-enter new password: 
{SSHA}ZbbjXA1zx3Mng6UL/1FCBusX49bRT6vJ

输入两次密码会生成加密后的密码
记下最后一行生成的加密串

5. 修改管理员密码

在/mnt/sdb1/ldap/conffile下创建一个文件chrootpw.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
replace:olcRootPW
olcRootPW: {SSHA}ZbbjXA1zx3Mng6UL/1FCBusX49bRT6vJ

最后一行为刚才生成的加密串
执行编辑好的 chrootpw.ldif 文件

docker exec -it openldap ldapadd -Y EXTERNAL -H ldapi:/// -f /home/ldap/conffile/chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

最后一行表示修改成功

6. 添加基础的 Schema

例如添加corba

docker exec -it openldap  ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/corba.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=corba,cn=schema,cn=config"

基础的Schema在容器目录/etc/ldap/schema/下,
根据需要添加,重复添加可能会报错

7. 在 LDAP 数据库中设置根域和数据库超级管理员

在/mnt/sdb1/ldap/conffile下创建一个文件domain-dbadmin.ldif

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=***,dc=net

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=***,dc=net

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}ZbbjXA1zx3Mng6UL/1FCBusX49bRT6vJ

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: to *
            by self read
            by users none
            by dn.base="cn=Manager,dc=shsbnu,dc=net" write
            by anonymous auth

olcRootDN是管理员
olcRootPW是管理员密码,也需要添入加密串,可以相同或重新生成
olcRootDN 和 olcSuffix 需要修改成相应的域地址
olcAccess 格式保持一致,最好不要使用tab
执行该 ldif 文件

docker exec -it openldap ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/ldap/conffile/domain-dbadmin.ldif
8. 数据恢复

原数据导出

slapcat > /opt/ldap/ldapdbak.ldif

将导出后的数据复制到容器所在服务器的/mnt/sdb1/ldap/conffile目录下
数据导入

docker exec -it openldap slapadd -l /home/ldap/conffile/ldapdbak.ldif

参考

OpenLDAP 在 CentOS 7 上的极速搭建教程
osixia / docker -openldap

你可能感兴趣的:(centos下 docker方式安装openldap服务及原数据导入)