OpenLDAP TLS 配置 - 无法设置 TLS - 凭据无效

OpenLDAP TLS 配置 - 无法设置 TLS - 凭据无效

你好,我正在谷歌搜索,以找出为什么我尝试更改 TLS 的 Open LDAP 配置时访问权限失败:

root@labm:~/slapd# more /root/slapd/tls.ldif
dn: cn=config,dc=LDAPTEST,dc=NET
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/key.pem
-
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ssl/cert.pem


ldapmodify -x -D "cn=admin,dc=LDAPTEST,dc=NET" -W -f /root/slapd/tls.ldif
Enter LDAP Password:
modifying entry "cn=config"
ldap_modify: Insufficient access (50)

失败了,因为我显然使用了 admin 来更改配置条目。我找到了一篇关于同一问题的文章,那里的解决方案是为配置数据库设置 root 密码,然后尝试修改它。所以我为我的 mypassword 创建了一个哈希并将其存储在 changepwd.ldif 中:

slappasswd -h {SSHA} -s <mypassword>

vi /root/slapd/changepwd.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}av9lfvBlCwBBETzHxxxxxxxxxxxxxxxx

成功修改了配置 olcRootPW(并且我在 /etc/ldap/slap.d/cn=config/ 文件中检查了它)

ldapmodify -H ldapi:/// -Y EXTERNAL -D 'cn=config' -f /root/slapd/changepwd.ldif

但是当我再次尝试使用和新的密码更改 TLS 设置时cn=config,尝试因凭据无效而失败:

ldapmodify -x -D "cn=config,dc=LDAPTEST,dc=NET" -W -f /root/slapd/tls.ldif
Enter LDAP Password: <mypassword>
ldap_bind: Invalid credentials (49)

配置文件的内容是:

 cat /etc/ldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 175b5eb1
dn: olcDatabase={0}config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break
olcRootDN: cn=admin,cn=config
structuralObjectClass: olcDatabaseConfig
entryUUID: a965b54a-7586-1036-95d8-ad7092a067bf
creatorsName: cn=config
createTimestamp: 20170123070944Z
olcRootPW:: e1NTSxxxxxxxxxxxxxxxxxxx
entryCSN: 20170124144811.769576Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20170124144811Z

知道我做错了什么吗?

答案1

你需要:

sudo ldapmodify -H ldapi:/// -Y EXTERNAL -f /root/slapd/tls.ldif

(注意sudo)。

您的配置数据库中的访问条件:

olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

EXTERNAL意味着如果 uidNumber 和 gidNumber 为零(即:它是 root),则允许使用方法身份验证的用户访问配置数据库。

EXTERNAL在这种情况下,auth 意味着您通过文件系统上的管道(ldapi:/// 方案)访问目录,并且操作系统根据您的用户进行身份验证/授权。

这就是为什么您需要成为 root。

还请注意,dntls.ldif 文件必须更改为:

dn: cn=config
changetype: modify
[...]
# same as before

cn=config是一个根命名空间,但它不是数据命名空间的叶命名空间。

相关内容