Setări LDAP
From LimeSurvey Manual
General
Trebuie să activați suportul LDAP în config.php și să configurați parametrii LDAP în config/ldap.php pentru a utiliza această funcție.
Activarea LDAP în config.php
- $enableLdap: dacă doriți să utilizați funcțiile LDAP în LimeSurvey, trebuie să setați acest parametru la true (este setat implicit la false):
'config'=>array( 'debug'=>0, 'debugsql'=>0, 'enableLdap'=>true, )
Definirea serverelor LDAP
Mai întâi definiți opțiunile de conexiune la serverul LDAP în „application/config/ldap.php”. Pentru fiecare server, sunt disponibile următoarele opțiuni:
- $serverId: Un număr întreg care identifică acest server LDAP. Este folosit în definițiile de interogare pentru a lega un server la o anumită interogare;
- $ldap_server [ $serverId] [ 'server']: Adresa IP sau numele DNS al serverului LDAP. Dacă utilizați conexiuni securizate SSL (LDAP-uri sau LDAP+Start-TLS), acest nume trebuie să corespundă certificatului CN al serverului (sau SubjectAlternativeName);
- $ldap_server [ $serverId] [ 'protoversion']: Poate fi 'ldapv2' sau 'ldapv3', în funcţie de protocolul acceptat de serverul dumneavoastră. „ldapv3” este protocolul preferat. Cu toate acestea, dacă doriți să utilizați conexiuni criptate, rețineți că LDAP-urile sunt acceptate în modul „ldapv2”, în timp ce Start-TLS este metoda de criptare pentru „ldapv3”;
- $ldap_server [ $serverId] [ 'encrypt']: Definește metoda de criptare utilizată. „ldaps” este acceptat pentru serverele „ldapv2”, „start-tls” pentru serverele „ldapv3”. Cuvântul cheie „none” este folosit pentru comunicațiile LDAP cu text clar;
- Nu uitați că pentru criptarea „ldaps” sau „start-tls”, serverul web trebuie să poată verifica certificatul serverului LDAP. Astfel, trebuie să vă definiți autoritatea de certificare în biblioteca openldap (de obicei, acest lucru se face în fișierul /etc/openldap/ldap.conf sub Linux).
- $ldap_server [ $serverId] [ 'referrals']: Este un parametru boolean care definește dacă recomandările trebuie urmate sau nu (utilizați false pentru ActiveDirectory);
- $ldap_server [ $serverId] [ 'encoding']: Este un parametru opțional care oferă codificarea folosită de directorul LDAP pentru a stoca șiruri. De obicei, nu trebuie să configurați acest parametru deoarece codarea implicită presupusă, „utf-8”, este codarea standard pentru directoarele LDAP. Cu toate acestea, dacă utilizați Active Directory și aveți probleme la importarea șirurilor accentuate, atunci încercați să setați acest parametru la codificarea folosită în zona dvs. (de exemplu, „cp850” pentru Europa de Vest). Puteți consulta lista derulantă „Setul de caractere al fișierului” din GUI Import Token from CSV file pentru a avea lista completă de codificări acceptate.
Apoi, trebuie să definiți ce autentificare este necesară pentru a obține acces la director. Dacă accesul „anonim” este permis, NU setați următorii doi parametri, altfel setați-i corespunzător:
- $ldap_server [ $serverId] [ 'binddn']: DN-ul utilizatorului 'LDAP' căruia îi este permis să citească directorul;
- $ldap_server [ $serverId] [ 'bindpw']: Parola pentru utilizatorul LDAP de mai sus.
Dacă trebuie să definiți alte servere LDAP, adăugați următoarea linie pentru a incrementa serverID și a defini noi parametri:
- $serverId++.
Definirea interogărilor în config/ldap.php
Atenție: când este necesar un „nume de atribut ldap” într-unul dintre acești parametri, „utilizați numai nume cu minuscule”: de exemplu, displayname și NU displayName.
Vă rugăm să consultați fișierul config/ldap.php deoarece conține exemple de configurare.
Interogări simple
Să începem cu interogări simple. Aceste interogări filtrează numai intrările LDAP pe baza propriilor atribute și locație. Ele sunt de obicei suficiente pentru interogarea ActiveDirectory.
- $query_id: este id-ul interogării LDAP;
- $ldap_queries [ $query_id] [ 'ldapServerId']: Leagă interogarea la un anumit server;
- $ldap_queries [ $query_id] [ 'nume']: Șir care descrie interogarea. Acesta va fi afișat în GUI;
- $ldap_queries [ $query_id] [ 'userbase']: DN rădăcină de utilizat pentru căutările utilizatorilor;
- $ldap_queries [ $query_id] [ 'userfilter']: Este un filtru folosit pentru a selecta intrările potenţialilor utilizatori. Trebuie să fie cuprins între paranteze;
- $ldap_queries [ $query_id] [ 'userscope']: domeniul de aplicare al căutării LDAP pentru utilizatori ('bază', 'unul' sau 'sub');
- $ldap_queries [ $query_id] [ 'firstname_attr']: Atribut Ldap care va fi mapat la câmpul Firstname al intrării de simbol;
- $ldap_queries [ $query_id] [ 'lastname_attr']: Atribut Ldap care va fi mapat la câmpul Lastname al intrării de simbol;
- $ldap_queries [ $query_id] [ 'email_attr']: Atribut Ldap care va fi mapat la câmpul adresei de e-mail al intrării de simbol.
Opțional, puteți prelua mai multe informații din directorul:
- $ldap_queries [ $query_id] [ 'token_attr']: Atribut Ldap care va fi mapat la codul jetonului;
- $ldap_queries [ $query_id] [ 'language']: Atribut Ldap care va fi mapat la codul limbii utilizatorului;
- $ldap_queries [ $query_id] [ 'attr1']: Atribut Ldap care va fi mapat la câmpul attribute_1;
- $ldap_queries [ $query_id] [ 'attr2']: Atribut Ldap care va fi mapat la câmpul attribute_2.
Interogări de grup combinate cu membri DN
Să vedem acum cum să definim o interogare mai complicată.
Următoarele interogări utilizează o primă căutare LDAP care analizează grupurile LDAP. Un grup LDAP este o intrare LDAP care conține referințe la intrările utilizatorilor sub formă de:
- ID-uri de utilizator (de exemplu, posixGroups fac) ==> Consultați secțiunea următoare
- Sau DN-uri de utilizator (de exemplu, groupofnames și groupofuniquenames face) => vezi mai jos
Aici ne ocupăm de grupuri care conțin DN-uri de utilizator:
- define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ „nume”] după cum s-a explicat mai sus.
Apoi definiți parametrii filtrului de grup:
- $ldap_queries [ $query_id] [ 'groupbase']: DN-ul rădăcină de la care doriți să începeți căutarea intrărilor de grup;
- $ldap_queries [ $query_id] [ 'groupfilter']: Filtrul LDAP care va selecta potențialele intrări de grup;
- $ldap_queries [ $query_id] [ 'groupscope']: Domeniul de aplicare al căutării LDAP pentru grupuri ('on', 'base' sau 'sub');
- $ldap_queries [ $query_id] [ 'groupmemberattr']: Numele atributului LDAP din intrarea de grup care va conține referințe la intrările utilizatorilor;
- $ldap_queries [ $query_id] [ 'groupmemberisdn']: TRUE.
În acest moment, totul este configurat pentru a permite primei căutări LDAP să găsească utilizatorii corespunzători grupurilor selectate. Cu toate acestea, puteți restricționa care dintre acești „candidați utilizatori” vor fi selectați aplicând un alt filtru asupra lor. Acesta este, desigur, opțional:
- $ldap_queries [ $query_id] [ 'userbase']: DN-ul de bază pentru căutarea LDAP de utilizator (numai candidatul de utilizator care se potrivește cu această bază) va fi selectat;
- $ldap_queries [ $query_id] [ 'userscope']: Se va selecta domeniul de aplicare pentru căutarea LDAP de utilizator (numai candidatul de utilizator care se potrivește cu baza de utilizatori+sfera) va fi selectat;
- $ldap_queries [ $query_id] [ 'userfilter']: Este un filtru care se aplică fiecărei intrări candidat de utilizator (pe atributele sale) pentru a adăuga o altă selecție.
Interogări de grup combinate cu membri UID
Să vedem acum cum să definim o interogare de grup combinată atunci când membrii grupului sunt UID-uri utilizator și nu DN-uri utilizator.
În ceea ce privește interogările de grup cu membri DN-uri, aceste interogări folosesc o primă căutare LDAP care caută intrări de grupuri LDAP și își obțin membrii. Aceste valori ale membrilor sunt apoi utilizate într-un filtru de căutare de utilizator pentru a căuta intrările corespunzătoare. Astfel, un alt parametru trebuie configurat pentru a defini atributul utilizatorului din intrarea utilizatorului care ar trebui să se potrivească cu UID-ul membrului găsit în grupuri.
Să revizuim parametrii necesari:
- define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ „nume”] după cum s-a explicat mai sus
Apoi definiți parametrii filtrului de grup:
- $ldap_queries [ $query_id] [ 'groupbase']: DN-ul rădăcină de la care doriți să începeți căutarea intrărilor de grup;
- $ldap_queries [ $query_id] [ 'groupfilter']: Filtrul LDAP care va selecta potențialele intrări de grup;
- $ldap_queries [ $query_id] [ 'groupscope']: Domeniul de aplicare al căutării LDAP pentru grupuri ('on', 'base' sau 'sub');
- $ldap_queries [ $query_id] [ 'groupmemberattr']: Numele atributului LDAP din intrarea de grup care va conține referințe la intrările utilizatorilor;
- $ldap_queries [ $query_id] [ 'groupmemberisdn']: FALSE;
- $ldap_queries [ $query_id] [ 'useridattr']: numele atributului utilizatorului care trebuie să se potrivească cu UID-ul găsit în membrii grupului.
În acest moment, totul este configurat pentru a permite primei căutări LDAP să găsească UID-urile utilizatorilor corespunzătoare grupurilor selectate și va fi completat automat un filtru de căutare a utilizatorilor.
Cu toate acestea, puteți restricționa care dintre acești „candidați de utilizator” vor fi selectați completând filtrul automat de utilizator calculat din UID-urile membrilor. Acesta este, desigur, opțional:
- $ldap_queries [ $query_id] [ 'userbase']: DN-ul de bază pentru căutarea LDAP de utilizator (numai candidatul de utilizator care se potrivește cu această bază) va fi selectat;
- $ldap_queries [ $query_id] [ 'userscope']: Se va selecta domeniul de aplicare pentru căutarea LDAP de utilizator (numai candidatul de utilizator care se potrivește cu baza de utilizatori+sfera) va fi selectat;
- $ldap_queries [ $query_id] [ 'userfilter']: Este un filtru care se aplică fiecărei intrări candidat de utilizator (pe atributele sale) pentru a adăuga o altă selecție.
Ce zici de Active Directory?
Active Directory (AD) este un registru Microsoft care poate fi interogat utilizând protocolul LDAP.
Apoi este posibil să se utilizeze conținutul său pentru interogări de simbol LimeSurvey, dar acest lucru necesită cunoștințe despre modul în care este organizat AD.
- Baza rădăcină LDAP este dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1
==> De exemplu, dacă compania dvs. deține domeniul DNS „my-company.com” și domeniul Windows este „employees”, atunci baza dvs. rădăcină este dc=employees,dc=my-company,dc=com
* Utilizatorii și grupurile de utilizatori sunt stocate sub cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (vă rugăm să rețineți că acest lucru nu este ou=users);
- Active Directory Groups:
- Groups obiectele conțin DN de membri în atributul lor „member”;
- Membrii grupurilor sunt, de asemenea, stocate în atributul memberOf al fiecărei intrări de utilizator. Acest atribut conține DN-uri ale grupurilor din care aparține utilizatorul;
- unele grupuri sunt în CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
- De exemplu: cn=Administrator,CN =Builtin,dc=numele_domeniului_meu_windows,dc=dns_sufix2,dc=dns_suffix1;
În unele cazuri, nu este la fel de ușor să interogați un director activ, așa că iată un exemplu de configurație pentru obținerea unor informații despre un director activ:
//Conexiune la directorul activ Server:
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId] ['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "niciunul"; // Majoritatea serverelor AD LDAP nu vor avea criptarea setata implicit
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domeniu\\utilizator „;
$ldap_server[$serverId]['bindpw'] = „parolă de utilizator”;
//$ldap_server[$serverId]['binddn'] = „CN=utilizator, OU=grup de utilizatori, DC=xxx ,DC=aaa"; acesta nu va funcționa cu directorul activ, de aceea trebuie să utilizați „domeniu\\utilizator”
//Iată un exemplu de interogare pentru a obține toți utilizatorii activi ai unui director activ:
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Personal cu un cont activat';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514) ))';
//(!(userAccountControl=514)) nu puteți cere directorului activ pentru un utilizator activ, dar puteți solicita un utilizator neinactiv
$ldap_queries[$query_id][ 'userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Lăsați necompletat pentru generarea automată a simbolului de către phpsv
$ldap_queries[$query_id]['language'] = ''';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//Filtrarea grupului nu a fost posibilă în directorul activ, trebuie să adăugați atributul memberOf al unui utilizator. Iată un exemplu de interogare pentru a obține toți utilizatorii activi care sunt membri ai grupului „samplegroup” în directorul activ:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ ldap_queries[$query_id]['name'] = 'Toți membrii samplegroup';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(memberOf=CN=samplegroup,OU=Group Global,OU=USER_GROUP,DC=xxx,DC=yyy)(!(userAccountControl=514 )))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$ query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Lăsați necompletat pentru generarea automată a simbolului de către phpsv
$ldap_queries[$query_id]['language'] = ''';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
Un alt exemplu de interogare de utilizator:
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''user''')(!('''userAccountControl=514' '')))'; // AD nu recunoaște conturile activate în mod normal, așa că, în schimb, verificăm că utilizatorii nu sunt dezactivați
- După cum este sugerat în fișierul de configurare, luați în considerare adăugarea (!(email=*)) la filtrele dvs. de utilizator pentru a ignora utilizatorii fără adresă de e-mail.
Exemplu de interogare de grup:
$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''grup''')(cn=Administratori de domeniu))'; // AD nu folosește numele atributului standard pentru grupuri, așa că folosiți acest exemplu.
Găsiți mai multe informații despre structura Active Directory LDAP pe Active Directory Architecture și library/cc223122.aspx Specificații tehnice Active Directory.