Nssnss-pam-ldapd 密碼驗證僅在使用
nss-pam-ldapd 密碼驗證僅在使用 su
時在 CentOS 7 上不起作用
語境
我這裡有 2 台不同的機器,它們的主要區別是一個執行 CentOS6,另一個執行 CentOS7。兩者都執行最新的可用分發版本的 lib:COS7 為 0.8.13,CentOS6 為 0.7.5 兩者都執行“正常”配置的 nss-pam-ldapd:
/etc/nslcd.conf
uid nslcd gid ldap uri ldap://ldap.example.org/ base dc=example,dc=org ssl no tls_cacertdir /etc/openldap/cacerts idle_timelimit 240 base group ou=groups,dc=example,dc=org binddn cn=Readonly,dc=example,dc=org bindpw **************
伺服器權限:
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=cube-net,dc=org" write by dn="cn=Readonly,dc=example,dc=org" none by anonymous auth by self write by * none olcAccess: {1}to dn.base="cn=Readonly,dc=example,dc=org" by dn="cn=Manager,dc=example,dc=org" write by * none olcAccess: {2}to dn.base="" by * read olcAccess: {3}to * by dn="cn=Manager,dc=example,dc=org" write by dn="cn=Readonly,dc=example,dc=org" read by self write by * read
問題
我可以很好地查找使用者,但我無法以
su
在 CentOS 7 上使用的使用者身份登錄。我得到:mveroone@vm:~$ passwd Changing password for user mveroone. (current) LDAP Password: New password: Retype new password: passwd: all authentication tokens updated successfully. mveroone@vm:~$ su - mveroone Password: su: Permission denied mveroone@vm:~$ ssh localhost Authorized uses only. All activity may be \ monitored and reported. mveroone@localhost's password: Last login: Fri Aug 20 16:10:24 2021 Authorized uses only. All activity may be \ monitored and reported. mveroone@vm:~$
所以是的,我可以使用 SSH 登錄,更改我的密碼,但不能使用 su。
我試過的
使用簡單的綁定方法在兩台伺服器上執行 a
ldapwhoami
工作,但不是 SASL(無可用機制)root@vm:~# ldapwhoami -D uid=user,ou=users,dc=example,dc=org -W -H ldap://ldap.example.org Enter LDAP Password: dn:uid=user,ou=users,dc=example,dc=org
nslcd -d
在嘗試使用密碼驗證時執行su
僅在 COS7 中顯示:nslcd: DEBUG: accept() failed (ignored): Resource temporarily unavailable
儘管根據幾個郵件列表執行緒,這似乎是一個可以忽略的錯誤。
當使用附加調試()執行 nslcd 時
nslcd -dd
,我可以看到它首先嘗試與使用者綁定,這成功了,然後它搜尋'(objectClass=*)'
,過濾屬性:dn
和 base = 本身有效:ldap_free_request (origid 1, msgid 1) ldap_parse_result ldap_msgfree ldap_search_ext put_filter: "(objectClass=*)" put_filter: simple put_simple_filter: "objectClass=*" ldap_build_search_req ATTRS: dn ldap_send_initial_request ldap_send_server_request ldap_result ld 0x7f7a9800cf60 msgid 2 wait4msg ld 0x7f7a9800cf60 msgid 2 (timeout 10000000 usec) wait4msg continue ld 0x7f7a9800cf60 msgid 2 all 0 ** ld 0x7f7a9800cf60 Connections: * host: ldap.example.org port: 389 (default) refcnt: 2 status: Connected last used: Fri Aug 20 11:42:05 2021 ** ld 0x7f7a9800cf60 Outstanding Requests: * msgid 2, origid 2, status InProgress outstanding referrals 0, parent count 0 ld 0x7f7a9800cf60 request count 1 (abandoned 0) ** ld 0x7f7a9800cf60 Response Queue: Empty ld 0x7f7a9800cf60 response count 0 ldap_chkResponseList ld 0x7f7a9800cf60 msgid 2 all 0 ldap_chkResponseList returns ld 0x7f7a9800cf60 NULL ldap_int_select read1msg: ld 0x7f7a9800cf60 msgid 2 all 0 read1msg: ld 0x7f7a9800cf60 msgid 2 message type search-entry ldap_get_dn nslcd: [0e0f76] <authc="user"> DEBUG: ldap_result(): uid=user,ou=users,dc=example,dc=org ldap_msgfree ldap_abandon 2 ldap_abandon_ext 2 do_abandon origid 2, msgid 2 ldap_msgdelete ld=0x7f7a9800cf60 msgid=2 ldap_free_request (origid 2, msgid 2) ldap_free_connection 0 1 ldap_free_connection: refcnt 1 ldap_msgfree nslcd: [0e0f76] <authc="user"> DEBUG: ldap_unbind() ldap_unbind
所以路徑是:
- 綁定(確定)
- 搜尋自己的DN(ok)
- 放棄
- 解綁
然後告訴我它無法驗證使用者。(“權限被拒絕”,所以它與“身份驗證失敗”不同)我執行了一個數據包擷取,它顯示了同樣的事情。
我嘗試過瀏覽 nslcd 的 0.8.x 版變更日誌,看看是否有變化,但有很多變化,沒有足夠的細節。
nslcd
好的,所以它最終與PAM-LDAP完全無關……
/etc/pam.d/su
最後有這一行(在他的“auth”塊之外)auth required pam_wheel.so use_uid
例如,其中沒有
/etc/pam.d/sshd
。評論它解決了這個問題
該行也存在於 CentOS 6 上,但
include
上面有一條語句跳過了任何進一步的行,而substack
沒有。