OpenLDAP简介及部署

LDAP说明

什么是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.1810
    • openldap 2.4.44
    • phpldapadmin 1.2.3-10
  2. 安装相关程序。

[root@openldap ~]# yum -y install openldap openldap-clients openldap-servers
  1. 以默认配置为基础生成配置文件,并授权启动。
[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
  1. 修改OpenLDAP管理员密码。
# 生成加密密码。
[root@openldap ~]# slappasswd -s 147258
{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 change_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=
  1. 导入一些基础的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
  1. 修改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=jingxue,dc=com" read by * none

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=jingxue,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=jingxue,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=jingxue,dc=com" write by * read
# 执行配置文件修改,无报错则继续。
[root@openldap ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f change_domain.ldif
  1. 启用memberof功能。
[root@openldap ~]# vim add_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 refint1.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcmoduleload
olcmoduleload: refint
[root@openldap ~]# vim refint2.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 add_memberof.ldif
[root@openldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f refint1.ldif
[root@openldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f refint2.ldif
  1. 创建组织:组织角色和组织单元。
[root@openldap ~]# vim organization.ldif
dn: dc=jingxue,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Jingxue Company
dc: jingxue

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

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

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

adding new entry "cn=admin,dc=jingxue,dc=com"

adding new entry "ou=People,dc=jingxue,dc=com"

adding new entry "ou=Group,dc=jingxue,dc=com"

phpldapadmin部署

  1. 安装相关程序。
[root@openldap ~]# yum -y install phpldapadmin
  1. 修改配置文件,并启动apache。
# 放开外网访问
[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
  1. 登录phpldapadmin界面(http://IP/ldapadmin),用户:admin,密码:147258。


写作不易,转载请注明出处,谢谢~~

posted @ 2020-12-08 10:24  merlee  阅读(5865)  评论(0编辑  收藏  举报