Context
Am 2 mașini diferite aici, a căror principală diferență este că unul rulează CentOS6, celălalt CentOS7.
Ambele rulează cea mai recentă versiune disponibilă pentru distribuție a lib: 0.8.13 pentru COS7, 0.7.5 pentru CentOS6
Ambele rulează nss-pam-ldapd configurat „normal”:
/etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://ldap.example.org/
baza dc=exemplu,dc=org
ssl nr
tls_cacertdir /etc/openldap/cacerts
idle_timelimit 240
grup de bază ou=grupuri,dc=exemplu,dc=org
binddn cn=Numai citire,dc=exemplu,dc=org
bindpw **************
Permisiunile serverului:
olcAccess: {0}to attrs=userPassword,shadowLastChange de dn="cn=Manager,dc=cube-net,dc=org" scrieți de dn="cn=Readonly,dc=example,dc=org" niciunul prin autentificare anonimă prin sine scrie prin * niciunul
olcAccess: {1}la dn.base="cn=Readonly,dc=example,dc=org" de către dn="cn=Manager,dc=example,dc=org" scrie de * niciunul
olcAccess: {2}la dn.base="" prin * citiți
olcAccess: {3}pentru * de dn="cn=Manager,dc=example,dc=org" scrie de dn="cn=Readonly,dc=example,dc=org" citit de către sine scrie de *citește
Problema
Pot să caut utilizatori foarte bine, dar nu mă pot conecta ca utilizator folosind su
pe CentOS 7.
Eu iau :
mveroone@vm:~$ passwd
Schimbarea parolei pentru utilizatorul mveroone.
(actuală) Parolă LDAP:
Parolă Nouă:
Reintroduceți parola nouă:
passwd: toate jetoanele de autentificare au fost actualizate cu succes.
mveroone@vm:~$ su - mveroone
Parola:
su: Permisiune refuzată
mveroone@vm:~$ ssh localhost
Numai utilizări autorizate. Toată activitatea poate fi \ monitorizată și raportată.
parola mveroone@localhost:
Ultima conectare: vineri, 20 august, 16:10:24 2021
Numai utilizări autorizate. Toată activitatea poate fi \ monitorizată și raportată.
mveroone@vm:~$
Așa că da, mă pot autentifica folosind SSH, îmi pot schimba parola, dar nu folosesc su.
Ceea ce am incercat
Efectuarea a ldapwhoami
pe ambele servere funcționează folosind metoda de legare simplă, dar nu SASL (nu există un mecanism disponibil)
root@vm:~# ldapwhoami -D uid=user,ou=users,dc=example,dc=org -W -H ldap://ldap.example.org
Introduceți parola LDAP:
dn:uid=utilizator,ou=utilizatori,dc=exemplu,dc=org
Alergare nslcd -d
în timp ce încercați să autentificați prin parolă folosind su
arată asta numai în COS7:
nslcd: DEBUG: accept() eșuat (ignorat): resursa indisponibilă temporar
Deși pare a fi o eroare care poate fi ignorată în funcție de câteva fire de discuții din lista de corespondență.
Când rulați nslcd cu depanare suplimentară (nslcd -dd
), pot vedea că mai întâi încearcă să se lege cu utilizatorul, ceea ce reușește, apoi caută „(objectClass=*)”
, atribute de filtrare: dn
și baza = ea însăși care funcționează:
ldap_free_request (original 1, msgid 1)
ldap_parse_result
ldap_msgfree
ldap_search_ext
put_filter: "(objectClass=*)"
put_filter: simplu
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 Conexiuni:
* gazdă: port ldap.example.org: 389 (implicit)
refcnt: 2 stare: Conectat
ultima utilizare: vineri, 20 august 11:42:05 2021
** ld 0x7f7a9800cf60 Solicitări restante:
* msgid 2, original 2, status InProgress
recomandări restante 0, numărul de părinți 0
ld 0x7f7a9800cf60 număr de solicitări 1 (abandonat 0)
** ld 0x7f7a9800cf60 Coada de răspunsuri:
Gol
ld 0x7f7a9800cf60 numărul de răspunsuri 0
ldap_chkResponseList ld 0x7f7a9800cf60 msgid 2 all 0
ldap_chkResponseList returnează ld 0x7f7a9800cf60 NULL
ldap_int_select
read1msg: ld 0x7f7a9800cf60 msgid 2 all 0
read1msg: ld 0x7f7a9800cf60 msgid 2 tip de mesaj 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 original 2, msgid 2
ldap_msgdelete ld=0x7f7a9800cf60 msgid=2
ldap_free_request (original 2, msgid 2)
ldap_free_connection 0 1
ldap_free_connection: refcnt 1
ldap_msgfree
nslcd: [0e0f76] <authc="user"> DEBUG: ldap_unbind()
ldap_unbind
Deci calea este:
- Legați (OK)
- Căutați propriul DN (ok)
- Abandon
- Desface
Apoi îmi spune că nu poate autentifica utilizatorul. („Permisiune refuzată”, deci este diferit de „eșecul de autentificare”)
Am efectuat o captură de pachet și arată același lucru.
Am încercat să parcurg jurnalele de modificări ale nslcd ale versiunii 0.8.x pentru a vedea dacă s-a schimbat ceva, dar au fost multe modificări, fără suficiente detalii.