OpenLDAP篇-安装OpenLDAP服务01

news/2025/2/5 22:29:00/文章来源:https://www.cnblogs.com/boradviews/p/18700245

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,具体的条⽬): 存储⽤户的具体信息,⽐如⽤户名、⽤户所属的组,⽤户家⽬录、邮箱等.

image-20250204223047912

在 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服务端

image-20250204213701033

3、通过LdapAdmin查询条⽬

image-20250204213724247

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

6.4 访问phpldapadmin

1、访问: http://openldap.oldxu.net/ldapadmin 或 http://openldap.oldxu.net/phpldadmin

image-20250204222200857

2、登录Ldap,使⽤管理员⽤户: cn=admin,dc=oldxu,dc=net ,密码: 123456

image-20250204222407350

3、登陆后可以查看组织架构,以及通过图形界⾯的⽅式创建

image-20250204222347913

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879296.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集训3 20240127

集训3 20240127 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A: 题目大意:给定 \(n\) ,两个人轮流可以使 \(n\) 减去一个任意小于它且与它互质的数,求最后甲能否取胜 #include<bits/stdc++.h>using namespace std;int main() {long long n;cin&g…

RocketMQ实战—4.消息零丢失的方案

大纲 1.全链路分析为什么用户支付完成后却没有收到红包 2.RocketMQ的事务消息机制实现发送消息零丢失 3.RocketMQ事务消息机制的底层实现原理 4.是否可以通过同步重试方案来代替事务消息方案来实现发送消息零丢失 5.使用RocketMQ事务消息的代码案例细节 6.同步刷盘+Raft协议同步…

qoj7301 AGC036D 题解

qoj7301 orz yxx 有一个很牛的状态设计 \(f_{i,j,0/1}\),\(0\) 为 \(a_{i-1}>a_i\),\(j\) 记录 \(a_{i-1}\) 的值,\(a_i\) 的值未定;\(1\) 为 \(a_{i-1}<a_i\),\(j\) 记录 \(a_i\) 的值 这样可以完美解决 \(a_{i-1}>a_i<a_{i+1}\) 的问题 转移和优化都是简单的…

【PyTorch】对比Torch和Numpy

该部分主要通过对比Torch和Numpy基础知识,方便大家了解PyTorch。Numpy是处理数据的模块,处理各种矩阵的形式来多核加速运算。 Torch自称为神经网络界的Numpy,因为它能将torch产生的tensor(张量)放在 GPU 中加速运算(前提是你有合适的 GPU),就像Numpy会把array放在CPU中…

十. Redis 事务和 “锁机制”—— 并发秒杀处理的详细说明

十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明 @目录十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明1. Redis 的事务是什么?2. Redis 事务三特性3. Redis 关于事务相关指令 Multi、Exec、discard和 “watch & unwatch”3.1 快速入门(演示…

使用Tauri框架打造的FPS透视

使用Tauri框架打造的FPS透视,使用javascript读内存绘制透视框使用Vue前端和Rust后端打造FPS透视 前端使用P5js进行canvas绘制 后端封装内存读取工具,前端快速编写代码无需重启调试 Vue前端与后端通讯获取内存数据并在前端渲染 作者声明 [仅供学习 请勿非法用途 从事非法用途出…

Mybatis 动态查询

where和if标签搭配 user表如下图所示 有时候,我们想在java程序中自定义查询条件,例如,我想查询user表,有时候我输入name=“狂神”,查询所有name为狂神的数据,有时候我输入pwd=‘123456’,想查询所有密码为123456的数据,有时候我想查询name为狂神同时密码为123456的数据…

一文搞懂企业架构与DDD的融合

在当今数字化时代,企业架构(EA)和领域驱动设计(DDD)成为了构建高效、灵活且可扩展软件系统的关键方法论。本文将深入探讨企业架构TOGAF框架与DDD的融合之道,分析如何通过这种结合实现从业务战略到技术实现的无缝对接。今天聊聊企业架构与DDD如何进行融合。一、企业架构TO…

【监控】ElastAlert 实现 ES 钉钉群日志告警

一、ElastAlert 概述 ElastAlert 是一个开源的警报框架,由 Yelp 开发,它可以从 Elasticsearch 中提取数据并根据预定义的规则生成警报。ElastAlert 可用于监控您的日志和时间序列数据,以便在发生异常、错误或其他有趣的模式时立即采取行动。ElastAlert 能够与许多通知服务(…

状压dp串讲

知识讲解 前置知识:位运算 (学过的可以跳过) 众所周知,电脑使用的是二进制,那么对二进制位进行的计算就叫做位运算。那么经典的位运算有以下几种:&(按位与)规律:除非两者均为 \(1\),否则其他情况结果均为 \(0\)。若两者为均唯一则答案为 \(1\)。 |(按位或)规律…

DeepSeek本地化部署

DeepSeek-R1本地化部署 在 Mac 上使用 Ollama 运行 DeepSeek-R1,并通过 Open-WebUI 提供 Web 端访问。 1. 安装 Ollama Ollama官方:https://ollama.com/ Ollama 是一个轻量级的 AI 推理框架,支持本地运行 LLM(大型语言模型)。首先,下载并安装 Ollama。 # brew安装ollama …