配置 OpenLDAP.note
·注:配置 OpenLDAP之前,一定要先在 /etc/hosts 中预先配置好域名,否则LDAP会识别为 nodomain,然后就只能够使用 ldif文件修改或者重新安装。
且需要保证这个域名在客户端、服务器上都能够解析到,就算不配置 bind9,书写 /etc/hosts 本地解析也是可以的
一、配置 OpenLDAP:
1、配置 /etc/hosts 文件,配置域名:
vim /etc/hosts
# 使用 hostname -f 查看:
2、安装 LDAP :
apt install -y ldapscripts slapd
3、配置 LDAP:
(1)配置 ldif 文件:
cd /etc/ldap
vim basedn.ldif //配置 ldif文件来添加 OU(组织单位),只要后缀是 .ldif 即可,文件名随意
(2)将 OU 添加到 LDAP中:
ldapadd -x -D "cn=admin,dc=cisco,dc=com" -w Skills39 -f basedn.ldif4、修改 ldapscripts 配置文件:
可以在 vim使用 :%s/dc=example,dc=com/dc=cisco,dc=com 一键更改
cd /etc/ldapscripts
vim ldapscripts.conf
# 取消注释,并修改为想要的内容即可:
27 SERVER="ldap://localhost" // 默认格式,本地也可以使用 ldapi:/// 的方式连接
31 SUFFIX="dc=cisco,dc=com" // 目录架构的全局后缀
32 GSUFFIX="ou=users" // 定义创建用户组存放的ou位置
33 USUFFIX="ou=users" // 定义创建用户存放的ou位置
45 BINDDN="cn=admin,dc=cisco,dc=com" // 定义管理员的DN路径
73 USHELL="/bin/bash" // 定义用户的shell
74 UHOMES="/home/%u" // 定义用户的家目录路径
75 CREATEHOMES="yes" // 是否在创建用户时创建家目录并设置权限,默认775权限5、输入管理员密码:
echo -n "Skills39" > /etc/ldapscripts/ldapscripts.passwd
# 不能够直接 vim 编辑,因为vim编辑出来的还是会有换行,这样密码无法被识别,无法添加组和用户(会报错)6、添加用户组和用户:
ldapaddgroup groups
ldapadduser user01 groups
ldapadduser user02 groups
ldapsetpasswd user01 Skills39
ldapsetpasswd user02 Skills39
ldapsearch -H ldap://localhost -b dc=appsrv,dc=com -x -D "cn=admin,dc=appsrv,dc=com" -w GDSkills-2023 | grep user01
但是这样生成出来的用户的 dn路径 是 dn: uid= ..
这样是不行的(第47届莫天师兄因此失分),所以需要自定义一个用户模板:
·优化(自定义用户模板):
# 复制模板:
vim /usr/sbin/ldapadduser
可以看到这个 dn 路径是 uid,我们需要自定义一个模板,将这个 uid 改为 cn:
vim /root/usertemp
# 配置 ldapscripts 调用模板:
vim /etc/ldapscritps/ldapscritps.conf
# 再次创建用户测试:
ldapadduser test10 users
ldapsearch -H ldap://localhost -b dc=appsrv,dc=com -x -D "cn=admin,dc=appsrv,dc=com" -w GDSkills-2023 | grep test10
二、配置 LDAP over SSL/TLS:
证书的创建这里不赘述
一定要给予 'openldap'用户和组 能够访问证书的权限,否则重启会报错
方式一:使用 slapd.conf 生成新的 config.ldif 文件(推荐):
(1)复制配置参考进行修改:
cp /usr/share/doc/slapd/examples/slapd.conf /etc/ldap/
slappasswd >> /etc/ldap/slapd.conf // 生成管理员的密码(会要求输入两次密码,然后会生成一个加密值)
vim /etc/ldap/slapd.conf在 vim 中使用: :%s/dc=example,dc=com/dc=cisco,dc=com // 使用vim,将 所有 example.com 替换为 cisco.com
# 这两行必须添加在 53行的 suffix 下面:
57 rootdn "cn=admin,dc=cisco,dc=com"
58 rootpw "{SSHA}azhEadI8I8sdslkjfsd09z908" // 这行为新增的行(引号中的密码 是前面使用 slappasswd 生成并输入进来的)【加不加双引号都无所谓】
# 放在文件最开头:
disallow bind_anon // 禁止以匿名的方式查询
TLSCertificateFile /etc/tls/server.crt // 指定服务器证书路径
TLSCertificateKeyFile /etc/tls/server.key // 指定服务器证书私钥的路径
TLSCACertificateFile /etc/tls/ca.crt // 指定服务器根CA证书路径这些参数都需要顶格写,前面不能有空格,否则会报错(TLS证书等字段必须严格区分大小写,否则会报错)
(2)删除默认的配置,生成新的配置文件:
mv /etc/ldap/slapd.d/* ~/back //删除默认生成的配置
slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ //生成新的配置文件
chown -R openldap:openldap /etc/ldap/slapd.d
chown -R openldap:openldap /etc/tls/ //给予证书openldap的权限否则重启报错
(3)添加 ldaps 的监听端口:
vim /etc/default/slapd
# 在末尾添加 ldaps
(4)重启服务:
systemctl restart slapd
ss -ntupl | grep slapd
方式二:直接修改旧的 config.ldif 文件(需要手动更改哈希校验值):
(1)直接修改 config.ldif 的内容:
# 一定要给予 openldap用户能够访问证书的权限,否则重启会报错:
chown -R openldap:openldap /etc/tls
vim /etc/ldap/slapd.d/cn\=config.ldif
# 注意一定要区分大小写,否则会出错添加在中间:

(2)修改 哈希值:
有时不需要修改也可以
2.1、安装 crc32 软件包:
apt install -y libarchive-zip-perl2.2、重新生成 哈希值,并重定向进文件中:
crc32 /etc/ldap/slapd.d/cn\=config.ldif >> /etc/ldap/slapd.d/cn\=config.ldif // 将生成的新的哈希值重定向进 config.ldif 中
vim /etc/ldap/slapd.d/cn\=config.ldif将重定向进来的 哈希值,替换掉最上方的哈希值:


(3)添加 ldaps 监听端口:
vim /etc/default/slapd
(4)重启服务:
systemctl restart slapd
# 查看是否有报错、端口是否正常启用:
systemctl status slapd
ss -ntupl | grep 636

方式三:用 ldapvi 修改 配置:

三、客户端连接 LDAPS:
前提:hosts 文件中需要先有对于主机名的解析,否则无法安装
1、客户端安装软件包:
apt install -y libpam-ldapd
# 安装配置时选择:如果是不加密的,将 s 去掉即可





这里实际上是修改 /etc/nsswitch.conf 文件,如果没有勾选上,也可以直接配置 nsswitch.conf 文件:
vim /etc/nsswitch.conf

2、因为禁用了匿名查询,因此需要配置身份认证:
(1)设置一个用户身份:
如果ldap能连上,ldaps连不上,配置没问题的话,nslcd服务也没有报错,那么多重启几遍 nslcd 就能够连上了,如果还不行就重启机器,再重启nslcd
vim /etc/nslcd.conf
# 需要注意,uri 路径最后一定要有一个 / 才能够成功连接 ldap,有时ldap自动配置会漏掉这个 /,需要手动加上
并且有时 ldaps:///能够连接上,但是有时需要 ldaps://才行,比较看运气(一般都是 ldaps:// )
(2)重启服务:
systemctl restart nslcd(3)进行查看:
id user01
id user02
2、配置 使用 LDAP用户登录时 自动创建家目录:
(1)配置:
pam-auth-update
(2)重启服务:
systemctl restart nslcd(3)测试:

·遇到的报错:
1、使用 方式一 配置ldaps之后,nslcd连接失败,ldapsearch 连接也失败(提示 Invalid credentials)

·原因:
可能有以下几种原因:
1、使用的 slapd.conf 文件的 dn路径写错了
2、没有开启 rootdn 和 rootpw
3、使用 slappasswd生成的 rootpw密码 写错了
类似以下的错误配置:dn路径写错了:

没有开启rootdn、rootpw:

rootpw密码写错了(如果上面都没问题,可能就是这个原因,因为它是由slappasswd生成的一段加密值):

·解决方法:使用 slaptest 重新生成
vim slapd.conf //重新编辑
slaptest -f slapd.conf -F slapd.d
chown -R openldap. slapd.d
systemctl restart slapd