openldap部署

1 安装环境

OS: Centos 7.5
OpenLDAP: 2.4.44
Phpldapadmin: 1.2.3
主1:192.168.0.130
主2:192.168.0.10

2 安装OpenLDAP(主1)

2.1 Yum命令安装

1
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-devel

2.2 安装包说明

图1

2.3 配置方式

说明
这里就是重点中的重点了,从openldap2.4.23版本开始,所有配置说句都保存在slapd.d目录下的cn=config文件夹内,不再使用slapd.conf作为配置文件。配置文件的后缀为ldif,且每个配置文件都是通过命令自动生成的,任意打开一个配置文件,在开头都会有一行注释,说明此为自动生成的文件,请勿编辑,使用ldapmodify命令进行修改 # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.

有两种配置方式,一种是通过修改旧版配置文件slapd.conf,再用slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/导入到数据库中,这种方式非常麻烦,不建议使用。
一种是通过编辑ldif文件,再用ldapadd命令导入到数据库中,这种方式是动态配置,不需要重新启动服务端slapd进程。

2.4 查看安装版本

1
slapd -VV

2.5 启动OpenLDAP

1
2
3
4
5
6
7
8
9
10
11
# 复制一个默认配置到指定目录下,并授权,这一步一定要做,然后再启动服务,不然生产密码时会报错
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# 授权给ldap用户,此用户yum安装时便会自动创建
chown -R ldap. /var/lib/ldap/DB_CONFIG

# 启动服务,先启动服务,配置后面再进行修改
systemctl start slapd
systemctl enable slapd

# 查看状态,正常启动则ok
systemctl status slapd

2.6 设置管理员密码

安装openldap后,会有三个命令用于修改配置文件,分别为ldapadd,ldapmodify, ldapdelete,顾名思义就是添加修改删除。而需要修改或增加配置时,则需要先写一个ldif后缀的配置文件,然后通过命令将写的配置更新到slapd.d目录下的配置文件中去,完整的配置过程如下,跟着我做就可以了:

1
2
3
4
5
6
7
8
9
# 生成管理员密码,记录下这个密码,后面需要用到
[root@LDAP ldap]# slappasswd
New password: 2hjx@123
Re-enter new password: 2hjx@123
{SSHA}r1uEavrA6S6uINzNXHcPGK+YFLNGB3VV
# 新增修改密码文件,ldif为后缀,文件名随意,不要在/etc/openldap/slapd.d/目录下创建类似文件
# 生成的文件为需要通过命令去动态修改ldap现有配置,如下,我在家目录下,创建文件
cd /etc/openldap/zidingyi.conf
vim changepwd.ldif
1
2
3
4
5
6
7
----------------------------------------------------------------------
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}r1uEavrA6S6uINzNXHcPGK+YFLNGB3VV

----------------------------------------------------------------------

这里解释一下这个文件的内容:
第一行执行配置文件,这里就表示指定为 cn=config/olcDatabase={0}config 文件。你到/etc/openldap/slapd.d/目录下就能找到此文件
第二行 changetype 指定类型为修改
第三行 add表示添加 olcRootPW配置项
第四行指定 olcRootPW配置项的值

#在执行下面的命令前,你可以先查看原本的olcDatabase={0}config文件,里面是没有olcRootPW这个项的,执行命令后,你再看就会新增了olcRootPW项,而且内容是我们文件中指定的值加密后的字符串

#执行命令,修改ldap配置,通过-f执行文件
ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

执行修改命令后,有如下输出则为正常:
图2
查看slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif内容,新增了一个olcRootPW项。
图3
上面就是一个完整的修改配置的过程,切记不能直接修改/etc/openldap/slapd.d/目录下的配置。

2.7 导入Schema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进行导入,
# 依次执行下面的命令,导入基础的一些配置,我这里将所有的都导入一下,其中core.ldif是默认已经加载了的,不用导入
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

2.8 修改域名

#修改域名,新增changedomain.ldif, 这里我自定义的域名为 zhjx.com,管理员用户账号为admin

#如果要修改,则修改文件中相应的dc=zhjx,dc=com为自己的域名

1
vim changedomain.ldif
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
-------------------------------------------------------------------------

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=zhjx,dc=com" read by * none

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=zhjx,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}r1uEavrA6S6uINzNXHcPGK+YFLNGB3VV

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=zhjx,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=zhjx,dc=com" write by * read
-------------------------------------------------------------------------

#执行命令,修改配置

1
ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

图4

空白行检测有没有空格,否则报错
图5
2.9 启用memberof功能

#新增add-memberof.ldif,

#开启memberof支持并新增用户支持memberof配置
vim add-memberof.ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-------------------------------------------------------------
[root@LDAP zidingyi.conf]# 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
-------------------------------------------------------------

1
2
3
4
5
6
7
8
 
# 新增refint1.ldif文件
vim refint1.ldif
-------------------------------------------------------------
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
-------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
# 新增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
-------------------------------------------------------------

#依次执行下面命令,加载配置,顺序不能错

1
2
3
4
5
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif

ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

2.10 创建组织及admin组织角色

到此,配置修改完了,在上述基础上,我们来创建一个叫做 zhjx 的组织,并在其下创建一个 admin 的组织角色(该组织角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元:

#新增配置文件

1
vim zhjx.ldif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
----------------------------------------------------------
dn: dc=zhjx,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: zhjx Company
dc: zhjx

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

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

dn: ou=Group,dc=zhjx,dc=com
objectClass: organizationalRole
cn: Group
----------------------------------------------------------

#执行命令,添加配置, 这里要注意修改域名为自己配置的域名,然后需要输入上面我们生成的密码

1
ldapadd -x -D cn=admin,dc=yaobili,dc=com -W -f zhjx.ldif

图6

通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中基准 dc=zhjx,dc=com 是该树的根节点,其下有一个管理域 cn=admin,dc=zhjx,dc=com和两个组织单元 ou=People,dc=zhjx,dc=comou=Group,dc=zhjx,dc=com

2.11 关闭匿名访问

在以下两个文件添加如下属性

1
2
3
4
/etc/openldap/cn=config/cn=config.ldif
添加:
olcDisallows: bind_anon
olcRequires: authc

1
2
3
/etc/openldap/cn=config/olcDatabase={-1}frontend.ldif
添加:
olcRequires: authc

新建disabled_anon.ldif,

1
vim disabled_anon.ldif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
------------------------------------

dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon

dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
-----------------------------------
1
ldapadd -Y EXTERNAL -H ldapi:/// -f zidingyi/disabled_anon.ldif

2.12 安装phpldapadmin

ldap装好后,下面安装web界面phpldapadmin。

1
2
3
4
# yum安装时,会自动安装apache和php的依赖。
# 注意: phpldapadmin很多没更新了,只支持php5,如果你服务器的环境是php7,则会有问题,页面会有各种报错
yum -y install epel-release
yum install -y phpldapadmin

修改apache配置

1
2
3
4
5
6
7
8
9
10
11
# 修改apache的phpldapadmin配置文件
# 修改如下内容,放开外网访问,这里只改了2.4版本的配置,因为centos7 默认安装的apache为2.4版本。所以只需要改2.4版本的配置就可以了
# 如果不知道自己apache版本,执行 rpm -qa|grep httpd 查看apache版本

vim /etc/httpd/conf.d/phpldapadmin.conf
-----------------------------------------------------------------
<IfModule mod_authz_core.c>
# Apache 2.4
Require all granted
</IfModule>
-----------------------------------------------------------------

修改phpldapadmin配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 修改配置用DN登录ldap
vim /etc/phpldapadmin/config.php
-----------------------------------------------------------------
# 398行,默认是使用uid进行登录,我这里改为cn,也就是用户名
$servers->setValue('login','attr','cn');

# 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息
$servers->setValue('login','anon_bind',false);

# 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));

# 538行,设置登陆信息,连接多个服务器可添加多个
$servers->setValue('server','name','众合景轩-LDAP Server');
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=zhjx,dc=com'));
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=admin,dc=zhjx,dc=com');
$servers->setValue('login','bind_pass','2hjx@123');
$servers->setValue('server','tls',false);
-----------------------------------------------------------------

启动apache

1
2
systemctl start httpd
systemctl enable httpd

3 主2安装

配置主2服务,安装过程参考 2.1——2.8步骤。参考2.12安装phpldapadmin

3.1 管理员密码信息

1
2
3
4
[root@localhost ~]# slappasswd
New password: 2hjx@123
Re-enter new password: 2hjx@123
{SSHA}AFKgWr+wyQ47fZMdgeUU6b5fcytXgA8W

4 配置双主同步

4.1 配置双主复制,在主1和主2上执行下面的步骤

4.1.1 添加syncprov模块

4.1.1.1 mod_syncprov.ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@test1] ~/ldif$ vim mod_syncprov.ldif 


# create new
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la

[root@test1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config

4.1.1.2 syncprov.ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@test1] ~/ldif$ vim syncprov.ldif 
# create new
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100

[root@test1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"

4.2 在主1和主2上执行下面的步骤,但是注意需要替换olcServerID和provider的值

4.2.1 主1 master01.ldif模块配置

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
35
36
37
38
39
40
41
[root@test1] ~/ldif$ vim master01.ldif 
# create new
dn: cn=config
changetype: modify
replace: olcServerID
# specify uniq ID number on each server
olcServerID: 0 #主2上替换为1,使用不同ID

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://192.168.0.10:389/ #主2 IP,主2的配置上改为主1IP
bindmethod=simple
binddn="cn=admin,dc=zhjx,dc=com" # 绑定用户名字,这里用管理员,双主密码一样
credentials=2hjx@123 #明文密码 可以选择加密的
searchbase="dc=zhjx,dc=com" #搜索根域,主1和2一样
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

####[root@test1 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f master01.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"

4.2.2 主2 master02.ldif模块配置

参考主1 master01.ldif模块配置,修改相应参数.

4.3 重启服务

主1和主2重启openLDAP服务,重启后生效

1
systemctl restart slapd

图7
图8

此时,配置成功,在任意节点添加/删除/修改都能实时同步。

4.4 LDAP高可用

4.4.1 安装keepalived,分别在主1/主2上安装,配置

通过VIP地址实现LDAP高可用

1
yum install keepalived.x86_64

4.4.2 修改配置文件

1
vim /etc/keepalived/keepalived.conf

4.4.2.1 主1配置

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
35
36
37
38
39
40
global_defs {
router_id LVS_LDAP
}

vrrp_script CheckK8sMaster {
script "curl -k ldap://192.168.0.129:389" # 这里侦测VIP连接地址
interval 3
timeout 9
fall 2
rise 2
}

vrrp_instance VI_1 {
state MASTER #主节点用MASTER,备节点用BACKUP
interface ens192 # 网卡名字
virtual_router_id 61
# 主节点权重最高 依次减少
priority 100 # 主节点权重高于备节点
advert_int 1
#修改为本地IP
mcast_src_ip 192.168.0.130 # 本机IP
nopreempt
authentication {
auth_type PASS
auth_pass sqP05dQgMSlzrxHj
}
unicast_peer {
#注释掉本地IP # 主备节点IP
#192.168.1.221
192.168.0.130
192.168.0.10
}
virtual_ipaddress {
192.168.0.129/23 #VIP 地址
}
track_script {
CheckK8sMaster
}

}

4.4.2.2 主2配置

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
35
36
37
38
39
40
global_defs {
router_id LVS_LDAP
}

vrrp_script CheckK8sMaster {
script "curl -k ldap://192.168.0.129:389"
interval 3
timeout 9
fall 2
rise 2
}

vrrp_instance VI_1 {
state BACKUP # 备节点用BACKUP
interface enp3s0 # 网卡名字
virtual_router_id 61
# 主节点权重最高 依次减少
priority 99 # 备节点权重低于主节点
advert_int 1
#修改为本地IP
mcast_src_ip 192.168.0.10 # 本机IP
nopreempt
authentication {
auth_type PASS
auth_pass sqP05dQgMSlzrxHj
}
unicast_peer {
#注释掉本地IP # 主备节点IP
#192.168.1.221
192.168.0.130
192.168.0.10
}
virtual_ipaddress {
192.168.0.129/23 #VIP 地址
}
track_script {
CheckK8sMaster
}

}

4.4.3 重启服务

1
systemctl restart keepalived.service

4.4.3.1 测试VIP

1) ip a 命令查看IP

图9
图10
2) 关闭主1 keepalived服务,查看ip,当主1失去连接,vip转移到主2节点
图11
图12

配置成功。

5 pholdapadmin使用

5.1 创建组

类似部门分组,没有gid.
图13
图14
图15

5.2 创建角色组

举例:在jenkins组里面创建jenkins-admin角色组,拥有gid,主要用于与其他平台对接,根据不同gid内的用户,区分权限
图16
图17

建组时没有添加用户,后期添加,需要添加memberUid属性后添加用户
图18

5.3 创建用户

用户统一放到ou=People,dc=zhjx,dc=com下

图19
图20
图21

-------------本文结束感谢您的阅读-------------

本文标题:openldap部署

文章作者:OperationMAN

发布时间:2019年08月07日 - 14:08

最后更新:2022年03月31日 - 13:03

原始链接:https://kxinter.gitee.io/2019/08/07/openldap部署/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!