根据官方信息来说,2.4不再推荐使用,2.5为LTS版本,2.6为特性版本。
安装openLDAP
yum install epel-release -y
yum install openldap openldap-servers openldap-clients -y
启动服务
systemctl start slapd.service
systemctl enable slapd.service
systemctl status slapd.service
配置LDAP服务器
配置外部连接策略
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
getenforce
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
允许外部连接访问LDAP服务器
firewall-cmd --permanent --add-port=389/tcp --add-port=389/udp
firewall-cmd --reload
setsebool -P allow_ypbind=1 authlogin_nsswitch_use_ldap=1
setsebool -P httpd_can_connect_ldap on
配置文件ldap.conf文件
1.将BASE和URI注释取消
2.写入指定dc及服务器域名或者IP地址
vim /etc/openldap/ldap.conf
BASE dc=zonst,dc=com
URI 10.0.211.14
创建LDAP管理员用户
创建密码
生成密码字串记录下,后续使用
[root@localhost ~]# slappasswd
New password:
Re-enter new password:
{SSHA}a3UUBb28ufN29p+DpGIfUm48JVUSHnDB
编写管理员配置
修改管理员密码配置文件
olcRootPW填入生成密码字串
vim /openldapfile/rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}a3UUBb28ufN29p+DpGIfUm48JVUSHnDB
导入LDAP管理员配置文件
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldapfile/rootpw.ldif
导入LDAP基本模式
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
配置对 LDAP 服务器的访问权,并配置对服务器的 "管理者" 用户。 创建 manager.ldif 文件:
需查看对应数据库配置文件编号与类型,查看目录/etc/openldap/slapd.d/cn=config里面的文件
根据对应的类型编写相应内容

将管理员账号配置写入到数据库
[root@localhost openldapfile]# vim manager.ldif
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=Manager,dc=zonst,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=zonst,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=zonst,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}a3UUBb28ufN29p+DpGIfUm48JVUSHnDB
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=zonst,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=zonst,dc=com" write by * read
ldapmodify -Y EXTERNAL -H ldapi:/// -f manager.ldif
创建新的 LDIF 文件以创建组织组:
vim /openldapfile/org.ldif
dn: dc=xq5,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: xq5
dc: xq5
dn: ou=Users,dc=xq5,dc=com
objectClass: organizationalUnit
ou: Users
导入组织信息
ldapadd -x -D cn=admin,dc=xq5,dc=com -W -f org.ldif
安装openldap图形管理界面
yum install phpldapadmin -y
修改配置文件/etc/httpd/conf.d/phpldapadmin.conf
Require ip 10.0.0.0/8
修改配置文件
vim /etc/phpldapadmin/config.php +397
397 // $servers->setValue('login','attr','dn');
398 $servers->setValue('login','attr','uid');
397 $servers->setValue('login','attr','dn');
398 //$servers->setValue('login','attr','uid');
重启httpd服务
systemctl restart httpd
memberOf模块
添加memberOf模块,根据实际情况选择数据库类型及编号
查看数编号及类型路径 /etc/openldap/slapd.d/cn=config
确认数据类型文件名,/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif,这个文件通常有两种类型,一种是olcDatabase={2}hdb.ldif,一种是olcDatabase={2}bdb.ldif,根据实际情况编辑开启memberof配置文件
添加memberof模块
加载初始化内容
[root@localhost openldapfile]# vim memberof.ldif
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: memberof.la
olcModulePath: **/usr/lib64/openldap**
将memberof配置到数据库
dn: olcOverlay={0}memberof,**olcDatabase={2}hdb**,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
编辑完成后,通过ldapadd添加memberof模块,执行如下命令
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof.ldif
在目录/etc/openldap/slapd.d/cn=config 中新生成一个目录为olcDatabase={2}hdb/olcOverlay={0}memberof.ldif
添加自动更新用户组模块
创建refint文件,初始化内容
vim /root/openldap/module4refint.ldif
dn: cn=module{0},cn=config
add: olcModuleLoad
olcModuleLoad: refint.la
更新配置
ldapadd -Y EXTERNAL -H ldapi:/// -f module4refint.ldif
修改配置文件
vim 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
加载配置
ldapadd -Y EXTERNAL -H ldapi:/// -f refint2.ldif
检查配置是否生效
1.查看已启用的模块
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config | grep -i module
2.查看安装路径memberof模块目录
find / -iname memberof.la
find / -iname refint.la
新建自定义模板文件zonst.ldif
创建自定义模板
vim /etc/openldap/schema/zonst.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 03cffc1c
dn: cn=user,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: user
olcAttributeTypes: {0}( 1.3.6.1.4.1.42.2.27.4.1.98 NAME 'userName' DESC 'userName' SUP name SINGLE-VALUE )
olcAttributeTypes: {1}( 1.3.6.1.4.1.42.2.27.4.1.88 NAME 'jobNumber' DESC 'Aninteger uniquely identifying a user jobNumber' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {2}( 1.3.6.1.4.1.42.2.27.4.1.77 NAME 'mailAddress' DESC 'mailAddress' SUP mail )
olcAttributeTypes: {3}( 1.3.6.1.4.1.42.2.27.4.1.66 NAME 'isRoot' DESC 'isRoot' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
olcAttributeTypes: {4}( 1.3.6.1.4.1.42.2.27.4.1.55 NAME 'regDate' DESC 'regDate' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcAttributeTypes: {5}( 1.3.6.1.4.1.42.2.27.4.1.44 NAME 'regUnixtime' DESC 'regUnixtime' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.4.1.42.2.27.4.1.22 NAME 'user' DESC 'User' SUP top STRUCTURAL MUST ( userName $ surName $ jobNumber $ givenName $userPassword $ mailAddress $ telephoneNumber ) MAY ( isRoot $ regDate $ regUnixtime ) )
structuralObjectClass: olcSchemaConfig
entryUUID: 111ecf80-4535-103d-9c96-21245c603c07
creatorsName: cn=config
createTimestamp: 20230220063927Z
entryCSN: 20230220063927.714701Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230220063927Z
导入模板
slapadd -l /etc/openldap/schema/zonst.ldif -n 0
chmod 755 -R /etc/openldap/slapd.d/cn=config/cn=schema
导出用户信息
openldap的数据目录是/var/lib/dlap,备份可以直接备份/var/lib/ldap文件夹,恢复使用备份的文件夹替换就行
备份数据目录
cp -ar /var/lib/ldap /var/lib/ldap.bak
导出现有用户数据
slapcat > /root/openldap/ldapuserbak.ldif
停止应用
systemctl stop slapd && systemctl status slapd
删除用户数据,可以使用ldapdelete或者控制台删除,可以删除部分数据,也可以直接物理删除,以下为物理删除
rm -rf /var/lib/ldap/*
拷贝需要的数据文件,并赋权
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap/*
启动服务,导入响应的与备份数据对应的组织架构
ldapadd -x -D cn=admin,dc=xq5,dc=com -W -f org.ldif
根据导出用户数据恢复
systemctl stop slapd && systemctl status slapd
slapadd -l /root/openldap/ldapuser.ldif
赋权/var/lib/ldap新生成用户数据
chown -R ldap:ldap /var/lib/ldap/*
重启服务
systemctl restart slapd
openldap常用命令
使用ldapmodify命令执行条目的增删改
vim /tmp/entrymods
dn: cn=Modify Me,dc=example,dc=com
changetype: modify
replace: mail
mail: modme@example.com
-
add: title
title: Grand Poobah
-
add: jpegPhoto
jpegPhoto:< file:///tmp/modme.jpeg
-
delete: description
执行命令:
ldapmodify -f /tmp/entrymods
那么对于"cn=Modify Me,dc=example,dc=com"这条记录,会进行以下操作:
(1) 将属性"mail"的值改为“modme@example.com”;
(2) 添加属性"title",值为"Grand Poobah";
(3) 添加属性"jpegPhoto",值为"/tmp/modme.jpeg";
(4) 删除属性“description”
使用ldapadd执行添加条目
vim /tmp/newentry
dn: cn=Barbara Jensen,dc=example,dc=com
objectClass: person
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: bjensen@example.com
uid: bjensen
执行命令ldapadd -f /tmp/newentry
使用ldapmodify执行删除条目
vim /tmp/entrymods
dn: cn=Barbara Jensen,dc=zonst,dc=com
changetype: delete
执行命令:
ldapmodify -f /tmp/entrymods
使用ldapadd创建Group(memberof),并将指定用户加入到该组
vim /tmp/opsitgroup
dn: cn=IT,ou=Group,dc=zonst,dc=com
objectclass: groupOfNames
cn: IT
member: uid=superman,ou=Shenyang,ou=people,dc=zonst,dc=com
查看指定组内用户命令:ldapsearch -x -LLL -b dc=zonst,dc=com 'cn=IT'
查看用户信息
ldapsearch -x -b 'dc=xq5,dc=com'
ldapsearch -x -LLL -b dc=xq5,dc=com 'userName=huangshuan'
检查配置文件是否有错误
slaptest -u
导入自定义模板
自定义模板为zonst.ldif
执行slapadd -l zonst.ldif -n 0,在目录/etc/openldap/slapd.d/cn=config/cn=schema会生成1个文件
修改该目录权限为755,执行chmod 755 -R /etc/openldap/slapd.d/cn=config/cn=schema
导入导出用户数据
导出数据
sldapcat > /tmp/ldap_xq5.ldif 导出ldap数据
导出数据处理(针对用户多余数据删除)
cat >slapcat.regex <<EOF
/^creatorsName: /d
/^createTimestamp: /d
/^modifiersName: /d
/^modifyTimestamp: /d
/^structuralObjectClass: /d
/^entryUUID: /d
/^entryCSN: /d
EOF
cat back.ldif | sed -f slapcat.regex > back1.ldif
数据处理完成后重新导入
slapadd -l /tmp/ldap_xq5.ldif 导入ldap数据
修改slapd服务监听端口
SLAPD_URLS="ldapi:/// ldap://:10000"
vim /etc/sysconfig/slapd
# OpenLDAP server configuration
# see 'man slapd' for additional information
# Where the server will run (-h option)
# - ldapi:/// is required for on-the-fly configuration using client tools
# (use SASL with EXTERNAL mechanism for authentication)
# - default: ldapi:/// ldap:///
# - example: ldapi:/// ldap://127.0.0.1/ ldap://10.0.0.1:1389/ ldaps:///
#SLAPD_URLS="ldapi:/// ldap:///"
SLAPD_URLS="ldapi:/// ldap://:10000"
# Any custom options
#SLAPD_OPTIONS=""
# Keytab location for GSSAPI Kerberos authentication
#KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"
数据备份导入与导出
https://www.cnblogs.com/wangyuanguang/p/18197798
openldap导出数据处理方法
https://blog.csdn.net/Michaelwubo/article/details/126746171
openldap安装指导文档
https://www.ibm.com/docs/zh/rpa/21.0?topic=ldap-installing-configuring-openldap