31
2024
01
16:51:26

OpenLDAP部署

OpenLDAP部署

#一、前置环境


  • 系统: 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

image-20230726134234537

#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登录即可

image-20230726160548350

#6.5 创建用户
  • 创建组tchua001

image-20230726161722515

image-20230726161804681

image-20230726161857983

  • 创建用户

image-20230726162349540

image-20230726162648725




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/4968.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: