首页 > 解决方案 > slapd 在直接调用时启动,但不会从 systemctl 启动

问题描述

在这里运行 Fedora 27。我正在尝试从全新的 openldap 安装运行 slapd。当我尝试使用 运行时systemctl start openldap,守护程序无法启动。journalctl 给出以下输出:

Jun 19 00:30:25  slapd[1325]: @(#) $OpenLDAP: slapd 2.4.45 (Dec  6 2017 14:25:36) $
                                                                    mockbuild@buildhw-08.phx2.fedoraproject.org:/builddir/build/BUILD/openldap-2.4.45/openldap-2.4.45/servers/slapd
Jun 19 00:30:25  slapd[1326]: mdb_db_open: database "dc=my-domain,dc=com" cannot be opened: Permission denied (13). Restore from backup!
Jun 19 00:30:25  slapd[1326]: backend_startup_one (type=mdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (13)
Jun 19 00:30:25  slapd[1326]: slapd stopped.
Jun 19 00:30:25  audit[1326]: AVC avc:  denied  { map } for  pid=1326 comm="slapd" path="/var/lib/ldap/lock.mdb" dev="xvda1" ino=1716389 scontext=system_u:system_r:slapd_t:s0 tcontext=system_u:object_r:slapd_db_t:s0 tclass=file permissive=0

但是,如果我直接使用 运行守护程序/usr/sbin/slapd -u ldap -d -1 -h "ldap:/// ldaps:/// ldapi:///",则守护程序启动时没有问题。

我的 systemctl 脚本如下:

[Unit]
Description=OpenLDAP Server Daemon
After=syslog.target network-online.target
Documentation=man:slapd
Documentation=man:slapd-config
Documentation=man:slapd-hdb
Documentation=man:slapd-mdb
Documentation=file:///usr/share/doc/openldap-servers/guide.html

[Service]
Type=forking
ExecStartPre=/usr/libexec/openldap/check-config.sh
ExecStart=/usr/sbin/slapd -u ldap -h "ldap:/// ldaps:/// ldapi:///"

[Install]
WantedBy=multi-user.target
Alias=openldap.service

我检查了 ldap config 目录和 db 目录的权限,它们对于 ldap 用户来说似乎是正确的:

[root@localhost operations]# ll /etc/openldap/slapd.d/cn\=config
total 24
drwxr-x---. 2 ldap ldap 4096 Jun 15 23:00 'cn=schema'
-rw-------. 1 ldap ldap  378 Jun 15 23:00 'cn=schema.ldif'
-rw-------. 1 ldap ldap  513 Jun 15 23:00 'olcDatabase={0}config.ldif'
-rw-------. 1 ldap ldap  412 Jun 15 23:00 'olcDatabase={-1}frontend.ldif'
-rw-------. 1 ldap ldap  562 Jun 15 23:00 'olcDatabase={1}monitor.ldif'
-rw-------. 1 ldap ldap  609 Jun 15 23:00 'olcDatabase={2}mdb.ldif'

[root@localhost operations]# ll /var/lib/| grep ldap
drwx------. 2 ldap    ldap    4096 Jun 19 00:30 ldap

[root@localhost operations]# ll /var/lib/ldap/
total 0
-rw-------. 1 ldap ldap 8192 Jun 19 00:30 lock.mdb

任何建议将不胜感激。

标签: permissionsldapopenldapslapd

解决方案


看来您正在使用 back-mdb。好的。

您的数据库目录/var/lib/ldap/真的只包含文件lock.mdb吗?

还应该有一个名为data.mdb的更大文件,其中包含实际数据。


推荐阅读