原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
网友评论