什么是LDAP?

轻型目录访问协议(Lightweight Directory Access Protocol,LDAP):是一个开放的、中立的、业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息,它是由目录数据库和一套访问协议组成的系统,详情请查看维基百科LDAP

为什么用LDAP?

LDAP是开放的Internet标准,市场上或者开源社区的绝大多数软件都支持LDAP协议。简单来说,LDAP协议最大的好处就是能统一管理用户密码,新人报道创建一个用户就能登录公司的所有平台(gitlab、jumpserver、监控等等),离职一键删除即可。

LDAP相关概念

  • dn(Distinguished Name):区分名称,LDAP中每个条目都有自己的dn,dn是该条目在整棵树中的唯一标识,如同文件系统中,带路径的文件名就是DN。
  • rdn(Relative dn):相对区别名称,好比linux中的相对路径。
  • dc(Domain Component):域名组件。其格式是将完整的域名分成几部分,如将example.com变成dc=example,dc=com。
  • uid(User ID):用户ID,如merle.chang。
  • ou(Organization Unit):组织单元。
  • cn(Common Name):公共名称。
  • sn(surname):姓氏。
  • c(Country):国家,如“CN”或者“US”。
  • o(Organization):组织名,如中华人民共和国公安局。

LDAP产品举例

  1. SUN公司的SUNONE Directory Server。
  2. IBM公司的IBM Directory Server。
  3. Novell公司的Novell Directory Server。
  4. 微软公司的Microsoft Active Directory。
  5. 开源的OpenLDAP。

OpenLDAP简介

  OpenLDAP是LDAP基于开源的一种实现,现已被包含在众多流行的Linux发行版中。需要说明的是,从openLDAP 2.4.23开始,不在使用 /etc/openldap/ldap.conf 作为配置文件,所有配置都保存在/etc/openldap/slapd.d/cn=config目录下,配置文件后缀为.ldif,每个配置文件都是通过命令生成的,禁止手动编辑修改。

 

OpenLDAP部署

1、部署环境

  • CentOS 7.6.181
  • openldap 2.4.44
  • phpldapadmin 1.2.3-10

2、安装程序

[root@openldap ~]# yum -y install openldap openldap-clients openldap-servers

3、以默认配置为基础生成配置文件,并授权启动。

[root@openldap ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@openldap ~]# chown -R ldap. /var/lib/ldap
[root@openldap ~]# systemctl start slapd.service 
[root@openldap ~]# systemctl enable slapd.service

4、修改OpenLDAP管理员密码。

# 生成加密密码。
[root@openldap ~]# slappasswd -s 123456
{SSHA}awYpAiE+Hyv1D0q1fkS31tfqdE2rI0dN
# 在/etc/openldap/slapd.d目录外任意位置创建修改密码的配置文件。
[root@openldap ~]# vim changepasswd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}awYpAiE+Hyv1D0q1fkS31tfqdE2rI0dN
# 执行本次修改。 [root@openldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f 1change_passwd.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" # 执行成功后,会发现olcDatabase={0}config.ldif配置文件中多出一行olcRootPW项。 [root@openldap ~]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase={0}config.ldif | grep olcRootPW olcRootPW:: e1NTSEF9MzRUK0xPVUtub3dKWjF4MTN5dEpsSk5uN2dCeWM1NUI=

5、导入一些基础的schema配置。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

6、修改OpenLDAP域名。

[root@openldap ~]# vim change_domain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=baidu,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=baidu,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=baidu,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}awYpAiE+Hyv1D0q1fkS31tfqdE2rI0dN

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=baidu,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=baidu,dc=com" write by * read
# 执行配置文件修改,无报错则继续。 [root@openldap ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f 2change_domain.ldif

注意如果数据已存在  把  add: olcAccess 替换成 replace: olcAccess

7、启用memberof功能。

[root@openldap ~]# vim 3add_memberof.ldif
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectClass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf
[root@openldap
~]# vim 4refint1.ldif dn: cn=module{0},cn=config changetype: modify add: olcmoduleload olcmoduleload: refint
[root@openldap
~]# vim 5refint2.ldif dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config objectClass: olcConfig objectClass: olcOverlayConfig objectClass: olcRefintConfig objectClass: top olcOverlay: refint olcRefintAttribute: memberof uniqueMember manager owner
# 执行配置文件修改。 [root@openldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f 3add_memberof.ldif [root@openldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f 4refint1.ldif [root@openldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f 5refint2.ldif

8、创建组织:组织角色和组织单元。

[root@openldap ~]# vim 6organization.ldif
dn: dc=baidu,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: baidu Company
dc: baidu

dn: cn=admin,dc=baidu,dc=com
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=baidu,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=baidu,dc=com
objectClass: organizationalUnit
ou: Group
# 执行配置文件修改。 [root@openldap ~]# ldapadd -x -D 'cn=admin,dc=baidu,dc=com' -W -f 6organization.ldif Enter LDAP Password: # 输入前面设定的密码:147258 adding new entry "dc=baidu,dc=com" adding new entry "cn=admin,dc=baidu,dc=com" adding new entry "ou=People,dc=baidu,dc=com" adding new entry "ou=Group,dc=baidu,dc=com"

 

 

phpldapadmin部署

1、安装相关程序。

[root@openldap ~]# yum -y install phpldapadmin

2、修改配置文件,并启动apache。

# 放开外网访问
[root@openldap ~]#  cd /etc/httpd/conf.d/
[root@openldap ~]# sed -i.bak 's@Require local@Require all granted@g' phpldapadmin.conf
# 修改配置用DN登录ldap。 [root@openldap ~]# vim /etc/phpldapadmin/config.php $servers->setValue('login','attr','cn'); # 398将此行的uid改为cn $servers->setValue('login','anon_bind',false); # 460行取消注释,关闭匿名登录。 $servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn')); # 519行取消注释,增加cn和sn两项。 [root@openldap ~]# systemctl start httpd [root@openldap ~]# systemctl enable httpd

3、登录phpldapadmin界面(http://IP/ldapadmin),用户:admin,密码:123456。

OpenLDAP安装介绍_vim