Puncte:0

autentificarea cu parolă nss-pam-ldapd nu funcționează pe CentOS 7 numai când se utilizează `su`

drapel cn

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.

Puncte:0
drapel cn

Bine, deci nu avea nicio legătură cu nslcd sau PAM-LDAP până la urmă...

/etc/pam.d/su avea această linie la sfârșit (din blocul „auth”)

auth required pam_wheel.so use_uid

Care nu era în /etc/pam.d/sshd de exemplu.

Comentând-o, a rezolvat problema

Linia a existat și pe CentOS 6, dar a existat un include declarație de mai sus care a sărit orice rând suplimentar, spre deosebire de substiva care nu.

Michael Hampton avatar
drapel cz
Aceasta este o schimbare majoră cu implicații de securitate; asigurați-vă că acest lucru este _cu adevărat_ ceea ce doriți înainte de a o face.
drapel cn
Într-adevăr, dar deja controlăm cine are acces la mașină, poate rula `su` sau `sudo` cu grupuri LDAP.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.