Ssl

OpenLDAP TLS 配置 - 無法設置 TLS - 憑據無效

  • January 25, 2017

嗨,我正在Google上搜尋為什麼我嘗試更改開放 ldap 的 TLS 配置在訪問權限上失敗:

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

但是,當我嘗試使用cn=config新的 mypassword 更改 TLS 設置時,嘗試在無效憑據上失敗:

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

任何想法我做錯了什麼?

你需要:

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),則允許使用方法進行身份驗證的使用者訪問 config db 。

EXTERNALauth 在這種情況下意味著您通過文件系統上的管道(ldapi:/// 方案)訪問目錄,並且作業系統根據您的使用者進行身份驗證/授權。

這就是為什麼你需要root。

另請注意dntls.ldif 文件必須更改為:

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

cn=config是一個根命名空間,它不是數據命名空間的葉命名空間。

引用自:https://serverfault.com/questions/828472