Puncte:1

Se poate autentifica SSSD prin LDAP cu legare anonimă fie interzisă în ACL-uri și cu „olcRequires: authc” impus?

drapel jp

Gestionez o rețea LAN cu o listă de utilizatori care accesează casele lor partajate prin NFS în timp ce sunt autentificați prin NIS/YP (clienți și servere bazate pe CentOS/Fedora).

Sunt într-un proces dureros de migrare din NIS/YP (care este eliminat treptat, dar ireversibil pe Red Hat și altele asemenea) către ceea ce părea înlocuitorul cel mai puțin dificil de configurat pentru partea de autentificare, SSSD (pentru clienții) și LDAP (pentru baza de date a utilizatorilor de pe servere).

După o serie de încercări, am ajuns la ceea ce pare a fi o configurație de funcționare acceptabilă și am început să mă gândesc la o întărire a securității, dar există ceva care mă tot eluda.

În mare parte peste tot, ACL-urile standard pentru interogarea unei baze de date LDAP pentru a autentifica utilizatorii care se conectează sunt ceva de acest fel:

olcAccess: {0}to attrs=userParola de sine stătătoare prin autorizare anonimă de * niciunul
olcAccess: {1}to attrs=shadowLastChange by self scrie prin * read
olcAccess: {2}pentru a * prin * citire

si totul functioneaza fara probleme.

Deoarece prefer să nu las utilizatorii să se uite în înregistrările celuilalt, am modificat-o pe ultima astfel:

olcAccess: {2}la * de * niciunul

Apoi am găsit „olcRequires: authc” care ar trebui să dezactiveze legăturile anonime la LDAP (pare o îmbunătățire a securității, nu?) și l-am activat și totul pare să continue.

Apoi, din nou, privind primul ACL, vedeți că autentificarea anonimă împotriva unei parole de utilizator este încă autorizată (ceea ce pare redundant dacă regula anterioară este în vigoare) și am încercat să o elimin:

olcAccess: {0}to attrs=userPassword by self =wx by * none

si nimic nu mai functioneaza.

Continuând să citesc, am descoperit că problema este că SSSD trebuie să poată interoga în mod minim baza de date pentru a prelua suficientă structură pentru a converti un nume de utilizator precum „foo” într-un nume distinctiv LDAP ca „uid=foo,ou=People,dc”. =example,dc=com' pe care LDAP îl poate procesa apoi.

Înțeleg că SSSD poate folosi un „utilizator proxy” pentru a face exact asta, așa că am adăugat un astfel de utilizator în baza mea de date, configurat SSSD să-l folosească:

ldap_default_bind_dn = cn=autobind,dc=exemplu,dc=com
ldap_default_authtok = parolă foarte secretă

și, m-am gândit, am adăugat ACL-urile necesare pentru a-l lăsa să-și facă treaba:

olcAccess: {0}to attrs=userPassword by self =wx by dn="cn=autobind,dc=example,dc=com" =x by * none
olcAccess: {1}to attrs=shadowLastChange by self write by dn="cn=autobind,dc=example,dc=com" read by * none
olcAccess: {2}to * by dn="cn=autobind,dc=example,dc=com" citit de * none

Inutil să spun că nu funcționează - nu numai pentru autentificare, ceea ce ar putea foarte bine să fie configurat greșit de SSSD, dar baza de date în sine devine indiscutabilă, returnând eroarea 49 (acreditări invalide) chiar și prin intermediul ldapsearch.

Readăugând prin autorizare anonimă îl face să funcționeze din nou; evident, este ceva ce nu înțeleg corect.

Înțeleg că nu pare mare lucru, în afară de acel „anonim” care apare în ACL-urile mele care mă enervează foarte tare, dar nu pare să poată accesa ceva important.

Deci, întrebările mele sunt: ​​este o configurație mai sigură, în care accesul „anonim” este complet eliminat în ACL-urile pentru baza mea de date cu utilizatori LDAP, înlocuind în cele din urmă funcțiile necesare cu cele ale unui utilizator proxy specific utilizării SSSD? Dacă nu, ce ați face pentru a întări și mai mult securitatea?

Puncte:1
drapel fr

unul în care accesul „anonim” este complet eliminat din ACL-urile pentru baza de date cu utilizatori LDAP, înlocuind în cele din urmă funcțiile necesare cu cele ale unui proxy

În acest caz, nu. Tu poate sa interziceți toate operațiunile de citire/căutare pentru conexiuni anonime și lăsați SSSD să se lege la contul mașinii înainte de a efectua căutarea utilizatorului (folosesc Kerberos pentru aceasta, SSSD preia automat /etc/krb5.keytab), dar clienții anonimi încă mai au nevoie auth drepturi la minimum.

Mai exact, prin autorizare anonimă este necesar în ACL-urile OpenLDAP pentru ca legarea inițială „simple” să funcționeze, deoarece conexiunea care efectuează legarea este, în continuare, în stare anonimă până după ce legarea reușește.

Deci, dacă definiți un cont „proxy”, doar schimbați puțin problema, dar nu o schimbați de fapt â o conexiune anonimă are nevoie de drepturi de „autentificare” pentru a putea bind ca cont proxy. Sau, cu alte cuvinte, dacă doriți ca clientul să fie deja autentificat pentru a se autentifica, atunci cum se va autentifica ca cont proxy în primul rând?


De asemenea, nu aș folosi de obicei olcNecesită: authc la nivel global, pentru că împiedică citirea intrării rootDSE (DN nul), care este modul în care clienții descoperă ce mecanisme de autentificare sunt disponibile pe server, precum și dacă StartTLS este disponibil (dacă portul 636 nu este utilizat). Prin împiedicarea conexiunilor anonime să citească atribute pe DN-ul nul, este posibil să rupeți autentificarea SASL (de exemplu, Kerberos/GSSAPI) și să vă limitați doar la „legare simplă” bazată pe parolă.

Francesco avatar
drapel jp
Mulțumesc, ceea ce îmi spui se potrivește cu ceea ce discută alții [aici](https://stackoverflow.com/questions/61521692/ldap-anonymous-auth) dar voiam să fiu sigur că tragerea SSSD în întrebare nu va schimba răspunsul . Crezi că nu mai este posibilă întărire de făcut într-o astfel de configurație?
user1686 avatar
drapel fr
Interzicerea operațiunilor prin olcAccess ar trebui să fie suficientă (dar dacă faceți acest lucru prin ACL "frontend", asigurați-vă că acordați citire anonimă rootDSE, adică `dn.exact=""`). Ar putea fi util să puneți un ACL foarte restrictiv în partea de sus, pentru a preveni deschiderea accidentală prea mult prin ACL-uri ulterioare: `to * by anonymous auth by * none break` ar opri orice procesare ACL ulterioară pentru anonim (deci numai 'auth drepturile sunt acordate), dar ar încălca (încălca) regulile tale principale pentru toți ceilalți.

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.