[toc]
centos7安装openldap
ldap相关术语
Entry (or object) 条目(或对象)
:LDAP中的每个单元都认为是条目
dn
:条目名称
ou
:组织名称
dc
:域组件,例如,baidu.com
是这样写的 dc=baidu,dc=com
cn
:通用名称,如原文链接:https://www.baidu.com 名或某个对象的名字
安装openldap
系统环境
系统版本
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
内核版本
$ uname -a
Linux pptfz 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
安装包
yum -y install openldap openldap-clients openldap-servers
查看版本
$ slapd -V
@(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
启动ldap
修改目录权限
/var/lib/ldap/
目录以及目录下的所有文件所有者默认为 root
,需要设置为ldap用户所有
$ ll /var/lib/ldap/
total 372
-rw-r--r-- 1 root root 2048 Jun 6 13:21 alock
-rw------- 1 root root 303104 Jun 6 13:21 __db.001
-rw------- 1 root root 40960 Jun 6 13:21 __db.002
-rw------- 1 root root 49152 Jun 6 13:21 __db.003
-rw------- 1 root root 8192 Jun 6 13:21 dn2id.bdb
-rw------- 1 root root 32768 Jun 6 13:21 id2entry.bdb
-rw------- 1 root root 10485760 Jun 6 13:21 log.0000000001
否则在启动ldap服务的时候会报错如下
Jun 06 14:20:13 pptfz runuser[11314]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Jun 06 14:20:13 pptfz runuser[11314]: pam_unix(runuser:session): session closed for user ldap
Jun 06 14:20:13 pptfz check-config.sh[11293]: Read/write permissions for DB file '/var/lib/ldap/__db.003' are required.
Jun 06 14:20:13 pptfz runuser[11316]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Jun 06 14:20:13 pptfz runuser[11316]: pam_unix(runuser:session): session closed for user ldap
Jun 06 14:20:13 pptfz check-config.sh[11293]: Read/write permissions for DB file '/var/lib/ldap/__db.002' are required.
Jun 06 14:20:13 pptfz runuser[11318]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Jun 06 14:20:13 pptfz runuser[11318]: pam_unix(runuser:session): session closed for user ldap
Jun 06 14:20:13 pptfz check-config.sh[11293]: Read/write permissions for DB file '/var/lib/ldap/__db.001' are required.
Jun 06 14:20:13 pptfz runuser[11320]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Jun 06 14:20:13 pptfz runuser[11320]: pam_unix(runuser:session): session closed for user ldap
Jun 06 14:20:13 pptfz check-config.sh[11293]: Read/write permissions for DB file '/var/lib/ldap/dn2id.bdb' are required.
Jun 06 14:20:13 pptfz systemd[1]: slapd.service: control process exited, code=exited status=1
Jun 06 14:20:13 pptfz systemd[1]: Failed to start OpenLDAP Server Daemon.
chown -R ldap.ldap /var/lib/ldap/
启动并设置开机自启
systemctl enable slapd && systemctl start slapd
查看端口
ldap默认监听 tcp 389端口
$ netstat -ntpl|grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 16930/slapd
tcp6 0 0 :::389 :::* LISTEN 16930/slapd
查看进程
ldap默认以ldap用户启动
$ ps aux|grep slapd
ldap 16930 0.0 0.3 139712 12488 ? Ssl 14:38 0:00 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
查看启动
$ systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2025-06-06 14:38:17 CST; 8min ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Main PID: 16930 (slapd)
CGroup: /system.slice/slapd.service
└─16930 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
Jun 06 14:38:17 pptfz runuser[16919]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Jun 06 14:38:17 pptfz runuser[16919]: pam_unix(runuser:session): session closed for user ldap
Jun 06 14:38:17 pptfz runuser[16921]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Jun 06 14:38:17 pptfz runuser[16921]: pam_unix(runuser:session): session closed for user ldap
Jun 06 14:38:17 pptfz runuser[16923]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Jun 06 14:38:17 pptfz runuser[16923]: pam_unix(runuser:session): session closed for user ldap
Jun 06 14:38:17 pptfz slapd[16927]: @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
Jun 06 14:38:17 pptfz slapd[16930]: hdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap: (2).
Expect poor performance for suffix "dc=my-domain,dc=com".
Jun 06 14:38:17 pptfz slapd[16930]: slapd starting
Jun 06 14:38:17 pptfz systemd[1]: Started OpenLDAP Server Daemon.
配置openldap
设置管理员密码
这里我们设置管理员密码为 admin
,执行命令后会生成一堆加密后的字符,记录好,之后配置文件里会需要的
$ slappasswd -s admin
{SSHA}uUFY4EJIccmbnIZBPMiq06QK4HG9vO/a
修改相关配置文件
修改 /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
文件默认内容如下
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 2d0f9516
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: aac2ae46-d6e1-103f-960a-2797f63ca3bd
creatorsName: cn=config
createTimestamp: 20250606052012Z
entryCSN: 20250606052012.864229Z#000000#000#000000
modifiersName: cn=config
需要修改的是 olcSuffix
、olcRootDN
这2个字段
修改如下两行
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
修改为
olcSuffix: dc=ops,dc=com
olcRootDN: cn=admin,dc=ops,dc=com
还需要新增一行配置,是在执行 slappasswd -s admin
后生成的字符串
olcRootPW: {SSHA}uUFY4EJIccmbnIZBPMiq06QK4HG9vO/a
修改ldap的相关文件不要使用命令手动编辑,在开头也会有 # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
的相关提示,正确的方式是先创建 *.ldif
文件,然后使用 ldapmodify
命令进行修改
创建 modify-olcDatabase={2}hdb.ldif
文件,用来修改 /etc/openldap/slapd.d/cn\=config/olcDatabase={2}hdb.ldif
文件中的 olcSuffix
、olcRootDN
字段
cat >> modify-olcDatabase={2}hdb.ldif << EOF
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ops,dc=com
-
replace: olcRootDN
olcRootDN: cn=admin,dc=ops,dc=com
EOF
创建 add-rootpw.ldif
文件,用来新增 /etc/openldap/slapd.d/cn\=config/olcDatabase={2}hdb.ldif
文件中的 olcRootPW
字段
如果该字段已经存在,请将 add:
改为 replace:
,否则会报错 type or value exists
cat >> add-rootpw.ldif << EOF
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}uUFY4EJIccmbnIZBPMiq06QK4HG9vO/a
EOF