nastavitve LDAP
From LimeSurvey Manual
Splošno
Za uporabo te funkcije morate omogočiti podporo LDAP v config.php in konfigurirati parametre LDAP v config/ldap.php.
Omogočanje LDAP v config.php
- $enableLdap: če želite uporabljati funkcije LDAP v LimeSurvey, morate ta parameter nastaviti na true (privzeto je nastavljen na false):
'config'=>array( 'debug'=>0, 'debugsql'=>0, 'enableLdap'=>true, )
Definiranje strežnikov LDAP
Najprej definirajte možnosti povezav strežnika LDAP v "application/config/ldap.php". Za vsak strežnik so na voljo naslednje možnosti:
- $serverId: Celo število, ki identificira ta strežnik LDAP. Uporablja se v definicijah poizvedbe za povezovanje strežnika z določeno poizvedbo;
- $ldap_server [ $serverId] [ 'server']: Naslov IP ali ime DNS strežnika LDAP. Če uporabljate zaščitene povezave SSL (LDAP ali LDAP+Start-TLS), mora to ime ustrezati CN potrdila strežnika (ali SubjectAlternativeName);
- $ldap_server [ $serverId] [ 'protoversion']: Lahko je 'ldapv2' ali 'ldapv3', odvisno od protokola, ki ga podpira vaš strežnik. 'ldapv3' je prednostni protokol. Vendar, če želite uporabiti šifrirane povezave, upoštevajte, da so LDAP-ji podprti v načinu 'ldapv2', medtem ko je Start-TLS metoda šifriranja za 'ldapv3';
- $ldap_server [ $serverId] [ 'encrypt']:' Določa uporabljeno metodo šifriranja. 'ldaps' je podprt za strežnike 'ldav2', 'start-tls' za strežnike 'ldapv3'. Ključna beseda 'none' se uporablja za komunikacije LDAP z jasnim besedilom;
- Ne pozabite, da mora biti za šifriranje 'ldaps' ali 'start-tls' spletni strežnik sposoben preveriti potrdilo strežnika LDAP. Zato morate v svoji knjižnici openldap definirati vašo overitelja potrdil (običajno se to naredi v datoteki /etc/openldap/ldap.conf pod linuxom).
- $ldap_server [ $serverId] [ 'referrals']:' To je logični parameter, ki določa, ali je treba napotitve upoštevati ali ne (uporabite false za ActiveDirectory);
- $ldap_server [ $serverId] [ 'encoding']: To je izbirni parameter, ki podaja kodiranje, ki ga uporablja imenik LDAP za shranjevanje nizov. Običajno vam tega parametra ni treba nastaviti, saj je privzeto predpostavljeno kodiranje, 'utf-8', standardno kodiranje za imenike LDAP. Vendar, če uporabljate Active Directory in imate težave z uvozom poudarjenih nizov, poskusite ta parameter nastaviti na kodiranje, ki se uporablja na vašem območju (na primer 'cp850' za Zahodno Evropo). Celoten seznam podprtih kodiranj si lahko ogledate na spustnem seznamu »Nabor znakov datoteke« v GUI Uvozi žeton iz datoteke CSV.
Nato morate določiti, kakšno preverjanje pristnosti je potrebno za dostop do imenika. Če je 'anonimni' dostop dovoljen, NE nastavite naslednjih dveh parametrov, sicer ju nastavite ustrezno:
- $ldap_server [ $serverId] [ 'binddn']: DN uporabnika 'LDAP', ki ima dovoljenje za branje imenika;
- $ldap_server [ $serverId] [ 'bindpw']:' Geslo za zgornjega uporabnika LDAP.
Če morate definirati druge strežnike LDAP, dodajte naslednjo vrstico, da povečate ID strežnika in definirate nove parametre:
- $serverId++.
Definiranje poizvedb v config/ldap.php
Pozor: ko je v enem od teh parametrov zahtevano ime atributa ldap, uporabite imena samo z malimi črkami: na primer displayname in NE displayName.
Glejte datoteko config/ldap.php, saj vsebuje vzorce konfiguracije.
Enostavne poizvedbe
Začnimo s preprostimi poizvedbami. Te poizvedbe filtrirajo samo vnose LDAP na podlagi njihovih lastnih atributov in lokacije. Običajno zadostujejo za poizvedovanje ActiveDirectory.
- $query_id: je id poizvedbe LDAP;
- $ldap_queries [ $query_id] [ 'ldapServerId']:' Poizvedbo poveže z določenim strežnikom;
- $ldap_queries [ $query_id] [ 'name']:' Niz, ki opisuje poizvedbo. Prikazan bo v GUI;
- $ldap_queries [ $query_id] [ 'userbase']:' Korenski DN za uporabo pri iskanju uporabnikov;
- $ldap_queries [ $query_id] [ 'userfilter']:' To je filter, ki se uporablja za izbiro vnosov potencialnih uporabnikov. Mora biti v oklepajih;
- $ldap_queries [ $query_id] [ 'userscope']: obseg iskanja LDAP za uporabnike ('base', 'one' ali 'sub');
- $ldap_queries [ $query_id] [ 'firstname_attr']: Atribut Ldap, ki bo preslikan v polje Firstname vnosa žetona;
- $ldap_queries [ $query_id] [ 'lastname_attr']: Atribut Ldap, ki bo preslikan v polje Lastname vnosa žetona;
- $ldap_queries [ $query_id] [ 'email_attr']: Atribut Ldap, ki bo preslikan v polje e-poštnega naslova vnosa žetona.
Po želji lahko pridobite več informacij iz imenika:
- $ldap_queries [ $query_id] [ 'token_attr']: Atribut Ldap, ki bo preslikan v kodo žetona;
- $ldap_queries [ $query_id] [ 'language']: Atribut Ldap, ki bo preslikan v uporabniško jezikovno kodo;
- $ldap_queries [ $query_id] [ 'attr1']: Atribut Ldap, ki bo preslikan v polje attribute_1;
- $ldap_queries [ $query_id] [ 'attr2']: Atribut Ldap, ki bo preslikan v polje attribute_2.
Kombinirane skupinske poizvedbe s člani DN
Poglejmo zdaj, kako definirati bolj zapleteno poizvedbo.
Naslednje poizvedbe uporabljajo prvo iskanje LDAP, ki išče skupine LDAP. Skupina LDAP je vnos LDAP, ki vsebuje sklice na vnose uporabnikov v obliki:
- ID-jev uporabnikov (na primer posixGroups do) ==> Glejte naslednji razdelek
- Ali DN-jev uporabnikov (na primer groupofnames in groupouniquenames do) ==> glej spodaj
Tukaj imamo opravka s skupinami, ki vsebujejo DN-je uporabnikov:
- define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'name'], kot je razloženo zgoraj.
Nato definirajte parametre skupinskega filtra:
- $ldap_queries [ $query_id] [ 'groupbase']: Korenski DN, iz katerega želite začeti iskati vnose skupine;
- $ldap_queries [ $query_id] [ 'groupfilter']: Filter LDAP, ki bo izbral potencialne skupinske vnose;
- $ldap_queries [ $query_id] [ 'groupscope']:' Obseg iskanja LDAP za skupine ('on', 'base' ali 'sub');
- $ldap_queries [ $query_id] [ 'groupmemberattr']:' Ime atributa LDAP v vnosu skupine, ki bo vseboval sklice na vnose uporabnikov;
- $ldap_queries [ $query_id] [ 'groupmemberisdn']: TRUE.
Na tej točki je vse nastavljeno tako, da lahko prvo iskanje LDAP najde uporabnike, ki ustrezajo izbranim skupinam. Vendar pa lahko omejite, kateri od teh "kandidatov za uporabnike" bo izbran, tako da zanje uporabite drug filter. To je seveda neobvezno:
- $ldap_queries [ $query_id] [ 'userbase']:' Izbran bo osnovni DN za iskanje uporabnika LDAP (samo kandidat za uporabnika, ki se ujema s to bazo);
- $ldap_queries [ $query_id] [ 'userscope']: Izbran bo obseg za iskanje uporabnika LDAP (samo kandidat za uporabnika, ki se ujema z uporabniško bazo+obseg);
- $ldap_queries [ $query_id] [ 'userfilter']:' To je filter, ki velja za vsak vnos kandidata za uporabnika (na njegovih atributih), da doda še en izbor.
Kombinirane skupinske poizvedbe s člani UID
Poglejmo zdaj, kako definirati kombinirano skupinsko poizvedbo, ko so člani skupine uporabniški UID-ji in ne uporabniški DN-ji.
Kar zadeva poizvedbe skupine s člani DN, te poizvedbe uporabljajo prvo iskanje LDAP, ki išče vnose skupin LDAP in pridobi njihove člane. Te vrednosti članov se nato uporabijo v uporabniškem iskalnem filtru za iskanje ustreznih vnosov. Zato je treba konfigurirati še en parameter za definiranje atributa uporabnika v vnosu uporabnika, ki se mora ujemati z UID-jem člana, najdenim v skupinah.
Oglejmo si zahtevane parametre:
- define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'name'], kot je razloženo zgoraj
Nato definirajte parametre skupinskega filtra:
- $ldap_queries [ $query_id] [ 'groupbase']: Korenski DN, iz katerega želite začeti iskati vnose skupine;
- $ldap_queries [ $query_id] [ 'groupfilter']: Filter LDAP, ki bo izbral potencialne skupinske vnose;
- $ldap_queries [ $query_id] [ 'groupscope']:' Obseg iskanja LDAP za skupine ('on', 'base' ali 'sub');
- $ldap_queries [ $query_id] [ 'groupmemberattr']:' Ime atributa LDAP v vnosu skupine, ki bo vseboval sklice na vnose uporabnikov;
- $ldap_queries [ $query_id] [ groupmemberisdn']: FALSE;
- $ldap_queries [ $query_id] [ 'useridattr']:' ime uporabniškega atributa, ki se mora ujemati z UID-jem, najdenim v članih skupine.
Na tej točki je vse nastavljeno tako, da omogoča prvo iskanje LDAP, da najde uporabniške UID-je, ki ustrezajo izbranim skupinam, filter za iskanje uporabnikov pa bo samodejno izpolnjen.
Vendar pa lahko omejite, kateri od teh 'kandidatov za uporabnike' bo izbran, tako da izpolnite samodejni uporabniški filter, izračunan iz članskih UID-jev. To je seveda neobvezno:
- $ldap_queries [ $query_id] [ 'userbase']:' Izbran bo osnovni DN za iskanje uporabnika LDAP (samo kandidat za uporabnika, ki se ujema s to bazo);
- $ldap_queries [ $query_id] [ 'userscope']: Izbran bo obseg za iskanje uporabnika LDAP (samo kandidat za uporabnika, ki se ujema z uporabniško bazo+obseg);
- $ldap_queries [ $query_id] [ 'userfilter']:' To je filter, ki velja za vsak vnos kandidata za uporabnika (na njegovih atributih), da doda še en izbor.
Kaj pa Active Directory?
Active Directory (AD) je Microsoftov register, po katerem je mogoče poizvedovati s protokolom LDAP.
Nato je mogoče uporabiti njegovo vsebino za poizvedbe žetonov LimeSurvey, vendar to zahteva znanje o tem, kako je AD organiziran.
- Korenska baza LDAP je dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1
==> Na primer, če je vaše podjetje lastnik domene DNS 'my-company.com' in je vaša domena Windows 'employees', potem je vaša korenska baza dc=employees,dc=my-company,dc=com
* Uporabniki in skupine uporabnikov so shranjeni pod cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (upoštevajte, da to ni ou=users);
- Skupine Active Directory:
- Skupine objekti vsebujejo DN članov v atributu 'member';
- Članstva v skupini so shranjena tudi v atributu memberOf vsakega uporabniškega vnosa. Ta atribut vsebuje DN skupin, ki jim uporabnik pripada;
- nekatere skupine so v CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
- Na primer: cn=Administrator,CN =Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;
V nekaterih primerih ni tako enostavno poizvedovati po aktivnem imeniku, zato je tukaj vzorčna konfiguracija za pridobivanje nekaterih informacij o aktivnem imeniku:
//Povezava z aktivnim imenikom Strežnik:
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId] ['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "brez"; // Večina strežnikov AD LDAP ne bo imela privzeto nastavljenega šifriranja
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\user ";
$ldap_server[$serverId]['bindpw'] = "uporabniško geslo";
//$ldap_server[$serverId]['binddn'] = "CN=uporabnik,OU=uporabniška_skupina,DC=xxx ,DC=yyy"; ta ne bo deloval z aktivnim imenikom, zato morate uporabiti "domain\\user"
//Tu je vzorčna poizvedba za pridobivanje vseh aktivnih uporabnikov aktivnega imenika:
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Osebje z omogočenim računom';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514) ))';
//(!(userAccountControl=514)) ne morete zahtevati aktivnega imenika za aktivnega uporabnika, lahko pa zahtevate neneaktivnega uporabnika
$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'] = ''; // Pustite prazno za samodejno ustvarjanje žetona s phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//Filtriranje skupin ni bilo mogoče v aktivnem imeniku, morate dodati atribut memberOf uporabnika. Tukaj je vzorčna poizvedba za pridobivanje vseh aktivnih uporabnikov, ki so člani skupine "samplegroup" v aktivnem imeniku:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ ldap_queries[$query_id]['name'] = 'Vsi člani vzorčne skupine';
$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'] = ''; // Pustite prazno za samodejno ustvarjanje žetona s phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
Drug primer uporabniške poizvedbe:
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''user''')(!('''userAccountControl=514' '')))'; // AD ne prepozna omogočenih računov na običajen način, zato namesto tega preverimo, ali uporabniki niso onemogočeni
- Kot je predlagano v konfiguracijski datoteki, razmislite o dodajanju (!(email=*)) vašim uporabniškim filtrom, da prezrete uporabnike brez e-poštnega naslova.
Primer skupinske poizvedbe:
$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Domain Admins))'; // AD ne uporablja standardnega imena atributa za skupine, zato namesto tega uporabite ta primer.
Poiščite več informacij o strukturi Active Directory LDAP na Active Directory Architecture in biblioteka/cc223122.aspx Tehnične specifikacije imenika Active Directory.