网上OpenLDAP的安装教程基本上都是停留在零几年的,要么抄来抄去,它们会告诉你要去修改一个叫做slapd.conf的文件,基本上看到这里,你就不用往下看了,根本就没有这个文件!!!取而代之的是slapd.d的文件夹,然后另一部分教程会告诉你,让你修改这个文件夹下的某一个ldif文件,看到这里,你也不用往下看了,你又看到了伪教程,因为这个文件夹下的所有文件的第一行都明确地写着:这是一个自动生成的文件,不要修改它!你修改了它之后,它的md5校验值会匹配不上,造成更多的问题。你应该用ldapmodify来修改这个文件,而关于ldapmodify的教程,可以说几乎就没有!如果前面安装一切都顺利,遇到各种问题也没有具体的解决办法,这里我就把我安装及遇到的问题详细的写一下吧。
先确保没有安装过openLdap,或者安装失败又或者改乱后,通常卸载步骤:
systemctl stop slapd
yum remove compat-openldap openldap-clients openldap-servers
rm -rf /var/lib/ldap/*
rm -rf /etc/openldap/slapd.d/*
安装前系统设置,我也不知道为什么反正大多教程踩过坑的都这么做
1、防火墙设置
centos7.0默认防火墙为firewalld
停止firewall
systemctl stop firewalld.service
禁止firewall开机启动
systemctl disable firewalld.service
查看默认防火墙状态:
firewall-cmd --state
2、修改selinux
vi /etc/selinux/config
将SELINUX=enforcing改为:SELINUX=disabled
setenforce 0 或者重启,注意敲黑板重点。
一、安装OpenLDAP
1、安装
yum install -y openldap openldap-clients openldap-servers migrationtools
2、设置OpenLDAP管理密码。
slappasswd
New password: 123456
Re-enter new password: 123456
{SSHA}r2fcL6Exxgr8oKkaWROUQDCZKqXrH7bE
3、修改根DN与添加密码,上面说过手动改文件是不可取,但是我是这么走过来的没问题,毕竟ldapmodify相关操作少之又少且麻烦!!!
vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
修改内容:
olcSuffix: dc=cpsino,dc=com
olcRootDN: cn=admin,dc=cpsino,dc=com
新增一行:
olcRootPW: {SSHA}r2fcL6Exxgr8oKkaWROUQDCZKqXrH7bE
注:.ldif文件内容冒号后面都是有空格的,结尾无空格。
4、修改验证
vi /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=admin,dc=cpsino,dc=com" read by * none
5、配置DB数据库
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 700 -R /var/lib/ldap
6、验证
slaptest -u
看见:config file testing succeeded #验证成功,否则失败。
7、授权,若不授权启动时或报错,权限不足
chown ldap:ldap -R /var/run/openldap
chown -R ldap:ldap /etc/openldap/
8、启动
systemctl start slapd //启动 stop停止
systemctl enable slapd //开机运行
systemctl status slapd //查看运行状态及相关输出日志
9、执行ldapsearch -x检查是否有如下输出
ldapsearch -x -b '' -s base'(objectclass=*)'
如显示上面信息,表示服务已经启动成功。
二、创建管理员账号
1、手动添加个ldif文件,划重点!!!教程上但凡有这个objectClass: dcObject也可以不用看了,这个根本就不能往下添加uid!!!!!!!!!!!!!!
vi base.ldif
dn: dc=cpsino,dc=com
dc: cpsino
objectClass: top
objectClass: domain
objectClass: domainRelatedObject
associatedDomain: cpsino.com
dn: cn=admin,dc=cpsino,dc=com
objectclass: organizationalRole
cn: admin
2、导入数据库
ldapadd -x -D "cn=admin,dc=cpsino,dc=com" -W -f base.ldif
这里要求输入管理员密码,输入密码后就会看到日志 插入成功。
三、OpenLDAP管理工具(LDAPAdmin windows桌面版)个人觉得很好用,也写了个web服务,用于公司添加员工账号的一个统一的入口。
四 遇到过的问题
1、ldap_bind: Invalid credentials (49)
这个问题一般都是设置完管理员密码之后,需要重启一下openldap服务,才会生效,或者你的用户名和密码输入错误。
2、ldap_add: Invalid syntax (21)
additional info: objectClass: value #0 invalid per syntax
这个问题网上大多说的是导入的语法有问题,比如:后要有空格,每一个节点要有空行,结尾不能有空格。按照所述改完依旧有问题,后来查资料
原来创建的初始节点的objectClass有问题,网上教程上千篇一律的objectClass:dcObject,这个属性他子节点根本add不进去。
参考https://www.dazhuanlan.com/2019/10/24/5db0ea2223951/ objectClass的使用。
如果有问题可以一起讨论:qq277736477