配置 OpenLDAP.note

noteId: WEB53f0c9205650fefd9346192efaf939a0 · 原始路径:/ALL/Linux - A模块/服务配置/Open LDAP/配置 OpenLDAP.note · 图片:33 · 附件待处理:0

 
 
 
·注:配置 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.ldif
 
 
 
4、修改 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-perl
 
2.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