一、前置环境 系统: Centos7.8
OpenLDAP: 2.4.44
二、安装部署软件 包 openldap
安装其实非常简单,只是使用yum命令就可以完成安装操作。
2.1 yum安装 执行yum之后 会自动创建一个ldap
的用户
yum install -y openldap openldap-clients openldap-servers compat-openldap openldap-devel 1
2.2 启动 监听端口389
systemctl enable slapd
systemctl start slapd 1 2
三、openldap配置 从OpenLDAP 2.4 版本开始,官方推荐使用动态配置(cn=config)及在/etc/openldap/slapd.d
目录下的cn=config
文件夹内而不是传统的静态配置文件(slapd.conf)。动态配置将数据库配置保存在 LDAP 数据库中,使用动态配置允许管理员在运行时修改服务器配置,而无需重启服务,以便更轻松地进行管理和修改。
3.1 常用管理命令 查看当前配置,列出 cn=config 数据库中的所有配置项及其 DN
[root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dndn: cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}monitor,cn=config
dn: olcDatabase={2}hdb,cn=config 1 2 3 4 5 6 7 8 9 10 11 12 13 14
添加配置项,此时我们需要先创建一个以.ldif
为后缀的文件,然后执行修改命名,这样会动态的把配置新增至cn=config
目录下指定的配置文件中
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f your_ldif_file.ldif 1
修改配置
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f your_ldif_file.ldif 1
删除配置
ldapdelete -Q -Y EXTERNAL -H ldapi:/// dn_of_entry_to_delete 1
3.2 配置管理员密码 生成管理员密码hash值
# 管理员密码[root@iZuf6e7po5t1w13q6mtt4lZ ~]# slappasswd -s 123456{SSHA}EP+CWjDM2mwqLdoDvXtAU7OZ+vMvTatE 1 2 3
创建配置,上面我们说过所有的配置 都需要动态修改,因此我们需要先创建一个后缀为.ldif
的文件 然后应用
# vim adminPass.ldifdn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}EP+CWjDM2mwqLdoDvXtAU7OZ+vMvTatE 1 2 3 4 5
参数解释
dn: olcDatabase={0}config,cn=config
: 这是要修改的配置项的 DN(Distinguished Name),表示是 cn=config
数据库下(/etc/openldap/slapd.d/cn\=config
目录) 的 olcDatabase={0}config
配置。这个配置项指的是 cn=config
数据库的配置,也称为 config
配置。
changetype: modify
: 表示此 LDIF 文件中包含要进行的修改操作。
add: olcRootPW
: 表示要添加一个新的属性 olcRootPW
(超级用户密码)。
olcRootPW: {SSHA}kUhPHG2ffoZKzwl/pUxQg6W+WaFwpjQ/
: 这是超级用户密码的哈希值。在这个例子中,密码的哈希值是 {SSHA}kUhPHG2ffoZKzwl/pUxQg6W+WaFwpjQ/,它是一个基于 SSHA 算法的密码哈希值。
执行命令,执行之后,会在olcDatabase={0}config
中新增olcRootPW
配置
[root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f adminPass.ldif SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0modifying entry "olcDatabase={0}config,cn=config" 1 2 3 4 5
3.3 导入默认schema 在 OpenLDAP
中,自带了一些常用的基本架构(Schema),以支持通用的 LDAP 对象类和属性。这些自带的 Schema 可以在安装 OpenLDAP 后直接使用,无需额外的配置或安装,这些目录位于/etc/openldap/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 2 3 4 5 6 7 8 9 10 11 12
常用说明 :
core
: 这是 OpenLDAP 的核心架构,包含了基本的 LDAP 对象类和属性定义。它定义了 LDAP 的基本元素,如 "dc"(域组件)和 "ou"(组织单位)等。这个架构会在安装 OpenLDAP 时自动加载。
cosine
: 这是 Internet 常见架构之一,它定义了一些通用的对象类和属性,如 "inetOrgPerson"(Internet 组织人员)和 "mail"(电子邮件地址)等。
inetorgperson
: 这个架构定义了 "inetOrgPerson" 对象类,它扩展了 "organizationalPerson",并增加了一些用于互联网组织的属性,如邮件地址和电话号码等。
nis
: 这是 Network Information Service (NIS) 架构,用于支持 UNIX/Linux 系统中的 NIS 映射。它定义了一些 NIS 相关的对象类和属性,如 "posixAccount"(UNIX 账户)和 "posixGroup"(UNIX 用户组)等。
collective
: 这个架构定义了 "collectiveAttribute" 对象类,它用于在集体条目中存储共享属性。集体属性不会直接应用于条目本身,而是在查询时进行合并展示。
3.4 管理域配置 管理域是指用于存储配置和管理数据的特定域(DIT,Directory Information Tree)。这个域通常被称为配置数据库(cn=config)或管理数据库,它用于存储 OpenLDAP 服务器的运行配置和其他管理信息。配置数据库是一个特殊的数据库,使用动态配置方式,以 LDIF(LDAP Data Interchange Format)的形式存储配置信息。
准备域名: ldap.tbchip.com,此域名作为根域 ,编辑配置文件时注意空行及缩进
# vim domain.ldifdn: 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=ldap,dc=tbchip,dc=com" read
by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ldap,dc=tbchip,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=ldap,dc=tbchip,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}kUhPHG2ffoZKzwl/pUxQg6W+WaFwpjQ/
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess# 访问控制规则 只允许登录的用户进行修改自己密码olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=ldap01,dc=pwb,dc=com" write by anonymous auth by self write by * none
# 访问控制规则 允许所有用户 对根目录有读操作权限olcAccess: {1}to dn.base="" by * read# 访问控制规则 允许管理员admin用户有操作写权限olcAccess: {2}to * by dn="cn=admin,dc=ldap,dc=tbchip,dc=com" write by * read 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
参数说明
dn: olcDatabase={2}hdb,cn=config
: 这是要修改的配置项的 DN(Distinguished Name),表示是 cn=config 数据库下的 "hdb" 后端数据库配置。这个配置项指的是 hdb
后端数据库的配置。
changetype: modify
: 表示此 LDIF 文件中包含要进行的修改操作。
replace: olcSuffix
: 表示要替换(修改) "olcSuffix" 属性的值。
olcSuffix: dc=ldap,dc=tbchip,dc=com
: 这是要将根域(Suffix)修改为的新值。在这个例子中,根域被修改为 "dc=ldap,dc=tbchip,dc=com"。
olcAccess
:定义了监视数据库的访问控制规则。
执行命令,应用新配置
[root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0modifying entry "olcDatabase={1}monitor,cn=config"modifying entry "olcDatabase={2}hdb,cn=config"modifying entry "olcDatabase={2}hdb,cn=config"modifying entry "olcDatabase={2}hdb,cn=config"modifying entry "olcDatabase={2}hdb,cn=config" 1 2 3 4 5 6 7 8 9 10 11 12 13
3.5 启用memberof功能 memberof
功能是 OpenLDAP
中的一个重要模块,它用于处理组成员关系。它提供了一种方便的方法来管理用户和组之间的关系,使得管理用户组和组成员更加简单和高效。
编辑memberof配置文件,开启memberof支持并新增用户支持memberof配置
dn: cn=module{0},cn=config
cn: module{0}objectClass: olcModuleList
objectclass: topolcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: topolcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
配置说明
加载refint模块,在 LDAP 中,"refint" 模块通过确保 "member" 和 "memberOf" 属性之间的引用关系保持一致,来实现引用完整性检查。
# vim mod-refint.ldifdn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint 1 2 3 4 5
"refint" 模块的配置项,以下配置会确保 "memberof"、"uniqueMember"、"manager" 和 "owner" 属性之间的引用关系始终保持一致。如果一个属性的值发生了更改或删除,"refint" 模块会自动更新相关引用,以保持数据的完整性。
# vim add-refint.ldifdn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: topolcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner 1 2 3 4 5 6 7 8
依次执行下面命令,加载配置
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f mod-refint.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-refint.ldif 1 2 3
经过以上配置,ldap的配置就算修改完成,接下来我们来使用即可
四、创建组织 4.1 组织 组织是 LDAP 目录结构中的最顶层单位。它通常代表一个实际的组织、公司或机构,如一个大学、企业、政府机构等。组织在 LDAP 中被表示为 "o"(organization)属性的值。组织是一个可选的顶层条目,它用于对目录进行逻辑划分和命名空间的管理。
创建 一个losinx组织,并在其下创建一个 admin 的组织角色
# losin-ou.ldifdn: dc=ldap,dc=tbchip,dc=com
objectClass: topobjectClass: dcObject
objectClass: organization
o: losinx
dc: ldap
dn: cn=admin,dc=ldap,dc=tbchip,dc=com
objectClass: organizationalRole
cn: admin 1 2 3 4 5 6 7 8 9 10 11
执行命令 创建组织,需要注意dc=ldap,dc=tbchip,dc=com
配置要对应自己的根域
[root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -x -D cn=admin,dc=ldap,dc=tbchip,dc=com -W -f losinx-ou.ldif Enter LDAP Password:
adding new entry "dc=ldap,dc=tbchip,dc=com"adding new entry "cn=admin,dc=ldap,dc=tbchip,dc=com" 1 2 3 4 5
4.2 组织单元 组织单元是 LDAP 目录结构中的一个较低层级的单位。它用于更细粒度地划分和组织目录中的条目。组织单元在 LDAP 中被表示为 "ou"(organizational unit)属性的值。组织单元是一个可选的条目,用于更好地组织和管理目录中的条目。
创建Groups和Users组织单元
dn: ou=Groups,dc=ldap,dc=tbchip,dc=com
objectClass: organizationalUnit
ou: Groups
dn: ou=Users,dc=ldap,dc=tbchip,dc=com
objectClass: organizationalRole
cn: Users 1 2 3 4 5 6 7
执行命令
[root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -x -D cn=admin,dc=ldap,dc=tbchip,dc=com -W -f losinx-ou.ldif Enter LDAP Password:
adding new entry "ou=Groups,dc=ldap,dc=tbchip,dc=com"adding new entry "ou=Users,dc=ldap,dc=tbchip,dc=com" 1 2 3 4 5
说明
通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中dc=ldap,dc=tbchip,dc=com
是该树的根节点,其下有一个管理域 cn=admin,dc=ldap,dc=tbchip,dc=com
和两个组织单元 ou=Users,dc=ldap,dc=tbchip,dc=com
及 ou=Groups,dc=ldap,dc=tbchip,dc=com
五、用户及组管理 5.1 创建用户 为用户生成密码hash值
[root@iZuf6e7po5t1w13q6mtt4lZ ~]# slappasswd -s 123456{SSHA}Iu1xMEVDhljSoipHz3ovsIxfirdXmGAm 1 2
编辑用户文件,添加一个tchua的用户,在名为Public的ou下
# vim tchua-user.ldifdn: cn=tchua,ou=Users,dc=ldap,dc=tbchip,dc=com
objectClass: inetOrgPerson
cn: tchua
sn: Hua
userPassword: {SSHA}Iu1xMEVDhljSoipHz3ovsIxfirdXmGAm 1 2 3 4 5 6
执行命令添加用户
[root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -x -D "cn=admin,dc=ldap,dc=tbchip,dc=com" -W -f tchua-user.ldif Enter LDAP Password:
adding new entry "cn=tchua,ou=Users,dc=ldap,dc=tbchip,dc=com" 1 2 3
5.2 创建组 编辑创建组文件,添加一个用户组名为wms的cn,在名为Public的ou下,并把上面的tchua用户加如该组
# vim wms-group.ldifdn: cn=wms,ou=Groups,dc=ldap,dc=tbchip,dc=com
changetype: addadd: cn
cn: wms
objectClass: groupOfUniqueNames
uniqueMember: cn=tchua,ou=Users,dc=ldap,dc=tbchip,dc=com 1 2 3 4 5 6 7
六、图形化 OpenLDAP
我们可以把它当做数据库,没有酷炫的图形界面的,这种反人类的设计真的不是给人用的,虽然也有图形化的工具,但是也丑的不行且不好用,接下来我们介绍下使用最多的phpLDAPadmin
图形化的工具。
6.1 yum安装 yum install -y phpldapadmin 1
6.2 修改配置 上面安装后,会使用apache服务提供web服务,我们需要修改下相关配置
# vim /etc/httpd/conf.d/phpldapadmin.conf
<IfModule mod_authz_core.c>
# Apache 2.4
Require all granted </IfModule> 1 2 3 4 5
6.3 修改登录配置 # 398行,默认是使用uid进行登录,我这里改为cn,也就是用户名$servers->setValue('login','attr','cn');
# 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息# 打开注释,修改为false$servers->setValue('login','anon_bind',false);
# 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn')); 1 2 3 4 5 6 7 8 9
6.4 启动访问 systemctl enable httpd
systemctl start httpd 1 2
浏览器输入: 服务器IP/ldapadmin,使用开始创建的admin/123456
登录即可
6.5 创建用户