你好,我正在谷歌搜索,以找出为什么我尝试更改 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。
还请注意,dn
tls.ldif 文件必须更改为:
dn: cn=config
changetype: modify
[...]
# same as before
这cn=config
是一个根命名空间,但它不是数据命名空间的叶命名空间。