1、OpenLDAP统⼀⽤户认证系统
1.1 为什么需要OpenLDAP
在没有OpenLDAP统⼀⽤户认证系统的环境中,往往会⾯临如下问题:
- 1、当⽤户需要访问多台服务器时,管理员需要在每台服务器上⼿动创建账户。如果员⼯离职,还需逐台删除账户,整体操作繁琐且容易出现遗漏的情况,因此存在较⼤的安全隐患。
- 2、公司常⽤的业务系统(如 GitLab、Jenkins、Zabbix、Harbor 等)各⾃独⽴管理⽤户信息。管理员需要为每个⽤户单独注册账户,并分别设置权限,⼤⼤增加了运维复杂度。
为了解决这些问题,我们需要⼀个集中式的⽤户管理系统,把所有服务器和业务系统的⽤户信息整合到⼀起。⽽ OpenLDAP 就是这样的⼀个⼯具,它可以统⼀存储和管理⽤户信息数据,并为各种服务提供统⼀的认证,帮助企业实现账号的集中认证和管理。
1.2 什么是OpenLDAP
OpenLDAP 是基于 LDAP(轻量级⽬录访问协议)实现的⼀款开源⽤户管理⼯具。简单来说,LDAP 是⼀种标准协议,⽤来“集中存储”和查询⽤户信息。可以将其理解为⼀个“⽤户信息数据库”。
但它与传统数据库通过表格(⾏和列)存储数据的⽅式不同, LDAP使⽤了类似DNS 的树状结构来组织数据,整个⽬录从顶层的根节点开始,逐层划分为分⽀节点、⼦分⽀节点和叶⼦节点。 每⼀层都承担不同的功能, 通过这种分层的⽅式,使得LDAP 能够直观地展示⽤户、部⻔之间的层级关系。(如下图所示)
- 顶层是根节点(类似 DNS 的根域): 表示整个⽬录的起点;
- 中间是分⽀节点(OU,组织单元): 可以根据公司部⻔进⾏划分;
- 次级是⼦分⽀节点(CN,逻辑组): 可以根据部⻔中的⻆⾊、或项⽬进⼀步划分;
- 底层是叶⼦节点(Entry,具体的条⽬): 存储⽤户的具体信息,⽐如⽤户名、⽤户所属的组,⽤户家⽬录、邮箱等.
在 LDAP 的树状结构中,每⼀个“节点”都代表⼀个“条⽬(Entry)”,这些条⽬可以是组织单元(OU)、逻辑组(CN)或具体的⽤户(UID)。为了能够对树状结构中的每个条⽬进⾏标识,LDAP 使⽤了⼀种类似路径的命名⽅式,这种路径被称为 DN。
1.3 OpenLDAP条⽬标识DN
DN是⼀个条⽬在⽬录树中的唯⼀标识。可以把 DN 理解为条⽬的“绝对路径”,它从⽬录树的根节点出发,逐层向下定位到条⽬所在的位置。 例如: uid=oldxu,cn=admins,ou=ops,dc=oldxu,dc=net 这就是⼀个完整的 DN,这个DN 表示 oldxu ⽤户的条⽬,它的位置可以通过⽬录树结构逐层解析:
- dc=oldxu,dc=net: ⽬录树的根节点,表示根域名为 oldxu.net
- ou=ops: 根节点下的⼀个组织单元(OU),表示运维部⻔;
- cn=admins: 运维部⻔下的⼀个组,表示系统管理员组;
- uid=oldxu: 系统管理员组中的⼀个⽤户条⽬,表示具体的⽤户。
通过这种层次化的树状结构,使得DN 能清晰地描述了条⽬的层级关系,并快速定位到具体的条⽬。
此外,当我们需要创建、修改或删除条⽬时,都必须通过完整的 DN 精确定位到⽬标条⽬,才能完成对应的操作。例如:当我们想要修改 oldxu ⽤户的密码时,需要先通过完整的 DN 定位到该⽤户,然后才能进⾏密码修改。
dn: uid=oldxu,cn=admins,ou=ops,dc=oldxu,dc=net
changetype: modify
replace: userPassword
userPassword: new_password
2、OpenLDAP Schema
2.1 什么是Schema
在 OpenLDAP 中,我们已经知道,每⼀个条⽬(Entry)都有⼀个唯⼀标识,称为 DN,它⽤于定位条⽬在⽬录树中的具体位置。但仅仅有 DN 还不够。因为DN只能告诉我们“条⽬在哪⾥”,却不能告诉我们“条⽬⾥⾯有什么”。 ⽐如,⼀个⽤户条⽬ uid=oldxu 除了唯⼀标识外,还需要存储其他信息:
- ⽤户的名字
- 邮箱
- 电话号码
这些数据该如何组织?它们的类型是什么?哪些字段是必须的?哪些字段是可选的?如果没有⼀套规范,来约束这些条⽬的内容,那么条⽬的内容就会变得混乱。
这时,Schema 就派上⽤场了。在 OpenLDAP 中,Schema 就像是⽬录树的“规则⼿册”或“说明书”,它规定了每个条⽬可以存储哪些类型的数据、哪些数据字段是必须,哪些是可选的。
举个例⼦:假设我们正在开发⼀个学校的学⽣信息系统,需要记录学⽣的名字、学号、班级、年龄等信息。如果没有规则,系统的字段可能随意添加,⽐如有⼈写了“宠物名字”,有⼈写了“喜欢的颜⾊”。这样⼀来,系统的数据就会变得杂乱⽆章,⽆法统⼀管理。为了防⽌这种情况,我们需要⼀套规则明确规定:
- 必须包含哪些字段:⽐如“姓名”和“班级、学号”;
- 可以包含哪些字段:⽐如“年龄、联系电话”;
- 每个字段的数据类型:⽐如“姓名”必须是字符串,“年龄”必须是数字。
通过上⾯的示例,我们可以看到Schema 的作⽤就是为条⽬提供⼀套规范,规定哪些字段是必须的、哪些是可选的,以及每个字段的数据类型。那么Schema 是如何来实现这些规则的?在 OpenLDAP 中,Schema 的规则主要通过两部分来定义:“对象类”和“属性”
-
1、对象类: 决定了条⽬的类型(是⽤户、还是⽤户组), 以及该类型条⽬
中可以包含哪些属性字段(包括必需字段和可选字段);
-
2、属性:则定义了条⽬中具体数据的字段,例如字段的名称、字段值的类型(是字符串或者是数字)。
2.2 什么是对象类
对象类(ObjectClass)是条⽬的类型定义。可以看作是条⽬的“模板”,它决定了⼀个条⽬“是什么”,以及它可以包含哪些字段(属性)。
举个例⼦:
- 如果⼀个条⽬是 ⽤户(User),它需要由 inetOrgPerson 对象类来定义;
- 如果⼀个条⽬是 组织单元(OU),它需要由 organizationalUnit 对象类来定义;
- 如果⼀个条⽬是 设备(Device),它需要由 device 对象类来定义。⽽每⼀个对象类都有⼀组预定义的属性字段:
- 必须的属性(Required Attributes): 也就是条⽬中必须包含的属性,⽐如⽤户条⽬中的 cn (名字)和 sn (姓⽒)。
- 可选的属性(Optional Attributes): 也就是条⽬中可选的属性,⽐如 mail (邮箱)和 telephoneNumber (电话号码)。
因此,对象类可以看作是条⽬的‘框架’,它定义了条⽬的结构(即可以包含哪些字段),并规范了条⽬内容的范围和⽤途(即哪些字段是必需的,哪些是可选的)。通过对象类,条⽬的类型和内容得到了标准,从⽽避免了可以随意添加字段的情况,保证了⽬录结构的⼀致性。
2.3 什么是属性
属性是“对象类”提供的具体数据字段,决定了条⽬中可以存储哪些字段属性。每个属性有以下⼏个关键要素:
- 名称: 属性的唯⼀标识符,⽐如 cn 表示名字, mail 表示邮箱。
- 数据类型:属性存储字段值的类型,例如字符串、数字、布尔值等。
- 限制条件:是否必需、是否可以多值、值的最⼤⻓度等。
举个例⼦:对于⼀个通过 inetOrgPerson对象类 定义的“⽤户条⽬”来说,它的属性可能包括:
必须的属性:
- cn :⽤户的名字(字符串类型,最⼤⻓度32768个字符)。
- sn :⽤户的姓⽒(字符串类型,最⼤⻓度32768个字符)。
可选的属性:
- mail :⽤户的邮箱(字符串类型,最⼤⻓度256个字符)。
- userPassword :⽤户的密码(字符串类型,最⼤⻓度128个字符)。
- telephoneNumber :⽤户的电话号码(字符串类型,最⼤⻓度32个字符)。
通过这些属性,就能完整地描述这个⽤户的具体信息
2.4 总结
在 OpenLDAP 中,⽤户信息是通过对象类当中提供的属性来描述的,⽽对象类依赖于 Schema 的定义,因此想要在 OpenLDAP 中添加⽤户,⾸先需要加载Schema。Schema 提供了对象类及其属性的定义,从⽽可以利⽤这些属性来完整地描述⽤户的具体信息。
3、安装OpenLDAP服务
3.1 环境说明
系统 | 地址 | 主机名 | ⻆⾊ |
---|---|---|---|
RockyLinux9.x | 10.0.0.100 | ldap-ha.oldxu.net | Haproxy负载均衡(⾼可⽤使⽤) |
RockyLinux9.x | 10.0.0.31 | ldap-master01.oldxu.net | OpenldapServer-1 |
RockyLinux9.x | 10.0.0.32 | ldap-master02.oldxu.net | OpenldapServer-2 |
RockyLinux9.x | 10.0.0.34 | ldap-client01.oldxu.net | Openldap-Client |
RockyLinux9.x | 10.0.0.35 | ldap-client02.oldxu.net | Openldap-Client |
3.2主机名解析
echo "10.0.0.99 ldap-vip.oldxu.net" >> /etc/hosts
echo "10.0.0.100 ldap-ha.oldxu.net" >> /etc/hosts
echo "10.0.0.31 ldap-master01.oldxu.net" >> /etc/hosts
echo "10.0.0.32 ldap-master02.oldxu.net" >> /etc/hosts
3.3安装OpenLDAP
yum install openldap-servers openldap-clients -y
3.4启动OpenLDAP
[root@k8s-master31 ~]# systemctl enable slapd.service --now
Created symlink /etc/systemd/system/openldap.service → /usr/lib/systemd/system/slapd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/slapd.service → /usr/lib/systemd/system/slapd.service.
[root@k8s-master31 ~]# netstat -lntp|grep slapd
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 51322/slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 51322/slapd
tcp6 0 0 :::636 :::* LISTEN 51322/slapd
tcp6 0 0 :::389 :::* LISTEN 51322/slapd
[root@k8s-master31 ~]#
4、配置OpenLDAP服务
配置LDAP⽅式
修改 OpenLDAP配置,有两种⽅式:
1、通过配置⽂件⽅式来配置LDAP
实现⽅法:通过 slapd.conf 静态配置⽂件来变更配置,修改后需要重新⽣成数据库⽂件、重新授权,⽽后重启服务⽣效。
⽅式缺点:这种⽅式会导致服务中断,影响正在使⽤ LDAP 服务的⽤户,⽐如⽤户认证可能会出现短暂不可⽤的情况。
2、通过动态⽅式 cn=config ⽅式来配置OpenLDAP(推荐)
实现⽅式:通过 ldapadd、ldapmodify 等命令直接操作配置⽂件、或数据库⽂件。
⽅式优点:配置更改会⽴即⽣效,⽆需重启服务。同时还不会影响⽤户的正常使⽤,系统可以不间断地提供服务。
配置LDAP根域
1、使⽤ ldapmodify 命令,通过 replace ⽅式修改 /etc/openldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif ⽂件中的 olcSuffix 字段。将 olcSuffix 设置为 dc=oldxu,dc=net ,以更改 LDAP 数据库的根域。
ldapmodify -Y EXTERNAL -H ldapi:// <<EOF
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=oldxu,dc=net
EOF
检查配置⽂件是否变更
[root@k8s-master31 ~]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}mdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 c1ba7061
dn: olcDatabase={2}mdb
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcMdbConfig
entryUUID: 337c1bee-7735-103f-98d4-45e7d796422b
creatorsName: cn=config
createTimestamp: 20250204111618Z
olcSuffix: dc=oldxu,dc=net
entryCSN: 20250204112419.414539Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20250204112419Z
配置LDAP管理账户
1. ⽣成ldap管理员账户的密码(后⾯需要使⽤)
[root@k8s-master31 ~]# slappasswd -s 123456
{SSHA}sHbtQDiqVcMXP4hZCXZ2567+qmRrt7el
2.通过 ldapmodify 命令修改 olcDatabase={2}mdb 的配置,完成以下操作:
- 使⽤ replace 操作修改 olcRootDN 字段,设置管理员账号的 DN(例如 cn=admin,dc=oldxu,dc=net )。
- 使⽤ add 操作添加 olcRootPW 字段,为管理员账户设置加密密码。
[root@k8s-master31 ~]# ldapmodify -Y EXTERNAL -H ldapi:// <<EOF
> dn: olcDatabase={2}mdb,cn=config
> changetype: modify
> replace: olcRootDN
> olcRootDN: cn=admin,dc=oldxu,dc=net
> -
> add: olcRootPW
> olcRootPW: {SSHA}sHbtQDiqVcMXP4hZCXZ2567+qmRrt7el
> EOF
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}mdb,cn=config"[root@k8s-master31 ~]#
3.检查配置⽂件是否变更
[root@k8s-master31 ~]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}mdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 4c100ee1
dn: olcDatabase={2}mdb
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcMdbConfig
entryUUID: 337c1bee-7735-103f-98d4-45e7d796422b
creatorsName: cn=config
createTimestamp: 20250204111618Z
olcSuffix: dc=oldxu,dc=net
olcRootDN: cn=admin,dc=oldxu,dc=net ## 新增的配置
olcRootPW:: e1NTSEF9c0hidFFEaXFWY01YUDRoWkNYWjI1NjcrcW1ScnQ3ZWw= ## 新增的配置
entryCSN: 20250204122928.207054Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20250204122928Z
4.4导⼊LDAP的Schema
Schema 定义了对象类(ObjectClass)和属性(Attribute),它们决定了LDAP 数据库中可以存储哪些类型的数据。例如,⽤户账户信息、组信息等都需要依赖 Schema 来定义,但是默认LDAP中Schema⽐较少,因此我们还需要导⼊⼀些常⽤的Schema。
1.LDAP 默认会加载⼀些基础的 Schema,可以通过查看以下⽬录中的⽂件来确认已加载的 Schema
[root@k8s-master31 ~]# ll /etc/openldap/slapd.d/cn\=config/cn\=schema
总用量 16
-rw------- 1 ldap ldap 15575 2月 4 19:16 'cn={0}core.ldif' ## 核心Schema
2.除了默认的 core.ldif ,我们还需要导⼊⼀些常⽤的 Schema,来⽀持更多的对象类和属性。
- cosine.ldif :提供了 posixGroup 对象类,后期对接Linux系统时,会使⽤该对象类创建“⽤户组”相关信息;
- inetorgperson.ldif :提供了inetOrgPerson 对象类,后期对接Linux系统时,会使⽤该对象类创建“⽤户”相关信息(例如:名称、邮箱、等)
- nis.ldif :提供了posixAccount对象类,后期对接Linux系统时,会使⽤该对象创建“⽤户登陆”信息(⽐如⽤户名、UID、家⽬录等)同时还提供了shadowAccount 对象类,⽤于存储“登陆⽤户”的密码信息
[root@k8s-master31 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"[root@k8s-master31 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"[root@k8s-master31 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
3.Schema 导⼊成功后,可以再次查看 Schema ⽂件⽬录,确认新的 Schema是否已加载
[root@k8s-master31 ~]# ll /etc/openldap/slapd.d/cn\=config/cn\=schema
总用量 40
-rw------- 1 ldap ldap 15575 2月 4 19:16 'cn={0}core.ldif'
-rw------- 1 ldap ldap 11453 2月 4 20:42 'cn={1}cosine.ldif'
-rw------- 1 ldap ldap 2947 2月 4 20:42 'cn={2}inetorgperson.ldif'
-rw------- 1 ldap ldap 6583 2月 4 20:42 'cn={3}nis.ldif'
5、创建OpenLDAP组织架构
5.1 创建DC根域节点
在 LDAP 中,所有的数据(⽤户、组、部⻔等)都需要挂载在⽬录树的某个节点下,⽽⽬录树的顶层必须是⼀个 根域,如果不定义根域,LDAP 就⽆法存储任何数据。
[root@k8s-master31 ~]# ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: dc=oldxu,dc=net
objectClass: dcObject
objectClass: organization
o: oldxu.net
EOF
adding new entry "dc=oldxu,dc=net"
5.2 创建OU组织节点
OU 是 LDAP ⽬录树中的⼀种逻辑节点类型,⽤来对对象进⾏分类和组织管理。
1、创建 dev 开发部⻔
[root@k8s-master31 ~]# ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
> dn: ou=dev,dc=oldxu,dc=net
> objectClass: organizationalUnit
> objectClass: top
> ou: dev
> EOF
adding new entry "ou=dev,dc=oldxu,dc=net"
2、创建 ops 运维部⻔
ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: ou=ops,dc=oldxu,dc=net
objectClass: organizationalUnit
objectClass: top
ou: ops
EOF
5.3 创建CN⽤户组节点
LDAP 中创建⽤户组( posixGroup )条⽬,并按部⻔( ou=dev 和 ou=ops )进⾏分类,并为每个组分配⼀个唯⼀的组 ID
1、在dev开发部⻔下创建(javateam组:并设定组ID为2000、goteam组,并设定组ID为3000)
[root@k8s-master31 ~]# ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: cn=javateam,ou=dev,dc=oldxu,dc=net
objectClass: posixGroup
cn: javateam
gidNumber: 2000
EOF
adding new entry "cn=javateam,ou=dev,dc=oldxu,dc=net"[root@k8s-master31 ~]# ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: cn=golangteam,ou=dev,dc=oldxu,dc=net
objectClass: posixGroup
cn: golangteam
gidNumber: 3000
EOF
adding new entry "cn=golangteam,ou=dev,dc=oldxu,dc=net"
2、在ops运维部⻔下创建(sreteam组,并设定组ID为4000、dbateam组,并设定组ID为5000)
[root@k8s-master31 ~]# ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: cn=sreteam,ou=ops,dc=oldxu,dc=net
objectClass: posixGroup
cn: sreteam
gidNumber: 4000
EOF
adding new entry "cn=sreteam,ou=ops,dc=oldxu,dc=net"[root@k8s-master31 ~]# ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: cn=dbateam,ou=ops,dc=oldxu,dc=net
objectClass: posixGroup
cn: dbateam
gidNumber: 5000
EOF
adding new entry "cn=dbateam,ou=ops,dc=oldxu,dc=net"
5.4 创建UID⽤户节点
1、创建的⽤户,如果加密登陆系统的密码,则通过如下⽅式进⾏加密。
[root@k8s-master31 ~]# slappasswd -h {SSHA} -s 123456
{SSHA}WS9+4CaT6Q0BKn+ZAzSYP0bqs4R4iQec
2、在sreteam组下创建⼀个sre01的⽤户
[root@k8s-master31 ~]# ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: uid=sre01,cn=sreteam,ou=ops,dc=oldxu,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
homeDirectory: /home/sre01
userPassword: 123456
loginShell: /bin/bash
uid: sre01
cn: sre01
uidNumber: 4001
gidNumber: 4000
sn: System Sreteam Group Usres
EOF
adding new entry "uid=sre01,cn=sreteam,ou=ops,dc=oldxu,dc=net"
2、在dbateam组下创建—个dba01的⽤户
ldapadd -x -D cn=admin,dc=oldxu,dc=net -w 123456 <<EOF
dn: uid=dba01,cn=dbateam,ou=ops,dc=oldxu,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
homeDirectory: /home/dba01
userPassword: 123456
loginShell: /bin/bash
uid: dba01
cn: dba01
uidNumber: 5001
gidNumber: 5000
sn: System DBAteam Groups Users
EOF
5.5 查询创建的节点
1、修改ldap客户端配置⽂件,并添加如下两⾏内容;
[root@master01 ~]# vim /etc/openldap/ldap.conf
BASE dc=oldxu,dc=net
URI ldap://127.0.0.1
2、使⽤ ldapsearch 命令⼯具查询
[root@k8s-master31 ~]# ldapsearch -x -LLL
dn: dc=oldxu,dc=net
objectClass: dcObject
objectClass: organization
o: oldxu.net
dc: oldxudn: ou=dev,dc=oldxu,dc=net
objectClass: organizationalUnit
objectClass: top
ou: devdn: ou=ops,dc=oldxu,dc=net
objectClass: organizationalUnit
objectClass: top
ou: opsdn: cn=javateam,ou=dev,dc=oldxu,dc=net
objectClass: posixGroup
cn: javateam
gidNumber: 2000dn: cn=golangteam,ou=dev,dc=oldxu,dc=net
objectClass: posixGroup
cn: golangteam
gidNumber: 3000dn: cn=sreteam,ou=ops,dc=oldxu,dc=net
objectClass: posixGroup
cn: sreteam
gidNumber: 4000dn: cn=dbateam,ou=ops,dc=oldxu,dc=net
objectClass: posixGroup
cn: dbateam
gidNumber: 5000dn: uid=sre01,cn=sreteam,ou=ops,dc=oldxu,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
homeDirectory: /home/sre01
userPassword:: MTIzNDU2
loginShell: /bin/bash
uid: sre01
cn: sre01
uidNumber: 4001
gidNumber: 4000
sn: System Sreteam Group Usresdn: uid=dba01,cn=dbateam,ou=ops,dc=oldxu,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
homeDirectory: /home/dba01
userPassword:: MTIzNDU2
loginShell: /bin/bash
uid: dba01
cn: dba01
uidNumber: 5001
gidNumber: 5000
sn: System DBAteam Groups Users
6、OpenLDAP可视化⼯具
6.1 LDAP可视化⼯具介绍
在前⾯使⽤ ldapsearch 命令查询数据时,会发现展示的不够直观,因此我们可以选择⼀些图形化⼯具来进⾏直观的展示。此外图形化⼯具还⽀持对⽬录树种的条⽬进⾏创建、删除和修改。通过这些图形化⼯具,可以完全替代命令⾏⼯具完成 LDAP 中的各类操作。
- 1、Apache Directory Studio:⼀款跨平台的 LDAP 管理⼯具,提供⽤户界⾯,可以轻松浏览、编辑和管理 LDAP 数据。
- 2、LdapAdmin:轻量级的 Windows 客户端⼯具,适合简单的 LDAP 管理任务。它界⾯简洁,容易上⼿,对 Windows ⽤户⾮常友好。
- 3、phpLDAPadmin:基于 WebUI 的 LDAP 管理⼯具,功能强⼤且开源。通过浏览器即可轻松浏览和管理 LDAP 的数据。
6.2 LDAPAdmin图形⼯具
1、 ldapadmin 图形管理⼯具,官⽅下载地址 http://www.ldapadmin.org/download/ldapadmin.html
wget http://file.oldxu.net/openldap/LdapAdmin_v1.8.3.0.exe
2、配置LdapAdmin连接Openldap服务端
3、通过LdapAdmin查询条⽬
6.3 安装phpldapadmin
欧拉添加epel源
[root@k8s-master31 yum.repos.d]# cat epel.repo
[epel]
name=epel
baseurl=https://repo.huaweicloud.com/epel/7/x86_64/
enabled=1
gpgcheck=0
priority=1
1、使⽤yum安装 httpd、phpldapadmin
yum install httpd phpldapadmin -y
2、配置 phpldapadmin ,编辑 /etc/phpldapadmin/config.php ⽂件
[root@master01 ~]# vim /etc/phpldapadmin/config.php
# 修改时区为亚洲上海
$config->custom->appearance['timezone'] = 'Asia/Shanghai';
# 配置ldap基础信息
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=oldxu,dc=net')); //BaseDN,不配置会出现⽆法显示⽬录树
# 登陆⽅式
$servers->setValue('login','attr','dn'); // 取消注释
//$servers->setValue('login','attr','uid'); // 注释掉
# 去掉登录页⾯的匿名登录选项(可选)
$servers->setValue('login','anon_bind',false);
3、编辑 phpldapadmin 的 httpd 配置⽂件,将仅允许本地访问 Require local 修改为允许所有⼈访问 Require all granted
[root@k8s-master31 ~]# vim /etc/httpd/conf.d/phpldapadmin.conf
#
# Web-based tool for managing LDAP servers
#Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs<Directory /usr/share/phpldapadmin/htdocs><IfModule mod_authz_core.c># Apache 2.4# Require localRequire all granted</IfModule><IfModule !mod_authz_core.c># Apache 2.2Order Deny,AllowDeny from allAllow from 127.0.0.1Allow from ::1</IfModule>
</Directory>
4、重新加载httpd服务
[root@master01 ~]# systemctl restart httpd