openLDAP安装与配置

根据官方信息来说,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里面的文件
根据对应的类型编写相应内容


image.png

将管理员账号配置写入到数据库

[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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容