大数据平台,LDAP和kerberos的统一账户管理和认证是必不可少的。通过Openldap来搭建LDAP服务器。
1. 安装openldap软件包
yum install openldap openldap-* -y |
2. 初始化配置文件,不要手动去创建slapd.conf,可能会由于格式问题导致问题
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf |
3. 初始化数据库配置文件
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG |
4. 修改权限
chown -R ldap.ldap /etc/openldap chown -R ldap.ldap /var/lib/ldap |
5. slapd.conf配置文件如下
# egrep -v "#|^$" /etc/openldap/slapd.conf include /etc/openldap/ schema /corba. schema include /etc/openldap/ schema /core. schema include /etc/openldap/ schema /cosine. schema include /etc/openldap/ schema /duaconf. schema include /etc/openldap/ schema /dyngroup. schema include /etc/openldap/ schema /inetorgperson. schema include /etc/openldap/ schema /java. schema include /etc/openldap/ schema /misc. schema include /etc/openldap/ schema /nis. schema include /etc/openldap/ schema /openldap. schema include /etc/openldap/ schema /ppolicy. schema include /etc/openldap/ schema /collective. schema include /etc/openldap/ schema /kerberos. schema <<<<<<<由于后面需要配合kerberos认证,这里增加kerberos. schema ,参考第6步骤 allow bind_v2 pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args loglevel 4095 TLSCACertificatePath /etc/openldap/certs TLSCertificateFile ""OpenLDAP Server"" TLSCertificateKeyFile /etc/openldap/certs/ password access to * by self write by users read by anonymous read database config access to * by dn.exact= "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none database monitor access to * by dn.exact= "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.exact= "cn=admin,ou=ldap,ou=admin,dc=testserver,dc=com" read by * none database bdb suffix "dc=testserver,dc=com" checkpoint 1024 15 cachesize 10000 rootdn "cn=admin,ou=ldap,ou=admin,dc=testserver,dc=com" rootpw {SSHA}LPbWMTEOprpTvqjmxy/mTW+i0IPrugJc <<<<<<<<<<<<<<<参考第7步骤,生成加密密码 directory /var/lib/ldap index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub |
6. 安装kerberos软件
1 | yum install krb5* -y |
查找kerberos.schema文件,并拷贝到/etc/openldap/schema/kerberos.schema
1 2 3 | # cd /usr/share/doc/krb5-server-ldap-1.10.3/ # ls 60kerberos.ldif kerberos.ldif kerberos. schema |
7. 生成LDAP的root管理密码
1 2 | slappasswd -s 123456 {SSHA}L4uH7lVxwdS0/L/vspdseXORcneIWfeb |
8. 检查配置文件是否有格式错误
1 2 | # slaptest -f /etc/openldap/slapd.conf config file testing succeeded |
9. 准备生成LDAP数据库结构
先删除slapd.d的原有结构
1 | rm -rf /etc/openldap/slapd.d/* |
生成新的数据结构
1 | slaptest -f /etc/openldap/slapd.conf -F/etc/openldap/slapd.d |
修改权限,这个很重要,不然后面会报错
1 | chown -R ldap:ldap /etc/openldap/slapd.d |
每次修改都需要重启ldap
1 | service slapd restart |
10. 测试LDAP的连接,这里足足让我纠结两周,无数次的安装,有的时候可以正常登陆,有的时候会报错,明确说认证错误(密码错误)。这个一直让我以为是密码部分的格式设置有问题。各种尝试都无法正常解决掉。最后突然发现,是rootdn的问题,而不是rootpw的问题。
1 2 3 | # ldapsearch -x -D "cn=admin,dc=testserver,dc=com" -h 10.24.103.17 -W -b 'ou=People,dc=testserver,dc=com' Enter LDAP Password : ldap_bind: Invalid credentials (49) |
就是说,下面的命令中,要完整的复制sldap.conf中的“rootdn "cn=admin,ou=ldap,ou=admin,dc=testserver,dc=com"”条目信息,不能多,不能少。
这样才能正常查询结果
1 | ldapsearch -x -D "cn=admin,ou=ldap,ou=admin,dc=testserver,dc=com" -h 10.24.103.17 -W |
11. LDAP创建成功之后,需要创建数据。由于我是迁移数据过来,只是将生产的ldap数据导出导入。
ldap数据备份的方式有两种:一种是通过ldapsearch ,一种是通过slapcat命令。很多人都是建议通过slapcat来完成,但是我测试一下,没有成功,就先使用ldapsearch导出,ldapadd导入的
1 2 | /usr/sbin/slapcat > /tmp/liang/ldapdbak.ldif /usr/sbin/slapadd -l /tmp/liang/ldapdbak.ldif |
12. 导入数据命令
1 | ldapadd -x -D "cn=admin,ou=ldap,ou=admin,dc=testserver,dc=com" -h 10.24.103.17 -W -f ldapexport.ldif |
13. 查询数据,确认已经导入成功即可
1 | ldapsearch -LLL -x -D "cn=admin,ou=ldap,ou=admin,dc=testserver,dc=com" -W -b "dc=testserver,dc=com" '(uid=*)' |
15. 在客户端安装ldap软件,我比较偷懒,全都安装了,实际只安装openldap-clients就可以了
1 | yum install openldap openldap-* -y |
16. 设置LDAP客户端,客户端设置有几种方式
---1. 通过图形化命令完成LDAP client设置
1 | LANG=C authconfig-tui |
---2. 通过authconfig命令,配置客户端。由于是大数据平台运维,所以我是通过命令行实现的,这样比较方便批量处理。
authconfig --enablemkhomedir --disableldaptls --enablemd5 --enableldap --enableldapauth --ldapserver=ldap://10.24.103.17 --ldapbasedn="dc=testserver,dc=com" --enableshadow --update |