LDAP beállítások
From LimeSurvey Manual
Általános
A funkció használatához engedélyeznie kell az LDAP támogatást a config.php fájlban, és be kell állítania az LDAP paramétereket a config/ldap.php fájlban.
LDAP engedélyezése a config.php-ben
- $enableLdap: Ha LDAP függvényeket szeretne használni a LimeSurvey-ben, ezt a paramétert igazra kell állítani (alapértelmezés szerint false):
'config'=>array( 'debug'=>0, 'debugsql'=>0, 'enableLdap'=>true, )
LDAP szerverek meghatározása
Először adja meg az LDAP kiszolgáló csatlakozási beállításait az "application/config/ldap.php" fájlban. Minden szerverhez a következő opciók állnak rendelkezésre:
- $serverId: Ezt az LDAP-kiszolgálót azonosító egész szám. A lekérdezésdefiníciókban arra használják, hogy egy szervert egy adott lekérdezéshez rendeljenek;
- '$ldap_server [ $serverId] [ 'szerver']: Az LDAP-szerver IP-címe vagy DNS-neve. Ha SSL-védett kapcsolatokat használ (LDAP vagy LDAP+Start-TLS), ennek a névnek meg kell egyeznie a szerver tanúsítvány CN-jével (vagy SubjectAlternativeName);
- '$ldap_server [ $serverId] [ 'protoversion']: Lehet 'ldapv2' vagy 'ldapv3' a szerver által támogatott protokolltól függően. Az 'ldapv3' a preferált protokoll. Ha azonban titkosított kapcsolatokat szeretne használni, vegye figyelembe, hogy az LDAP-ok 'ldapv2' módban támogatottak, míg a Start-TLS az 'ldapv3';
- '$ldap_server titkosítási módszere [ $serverId] [ 'titkosítás']: Meghatározza a használt titkosítási módszert. Az 'ldaps' az 'ldav2' szervereknél, a 'start-tls' az 'ldapv3' szervereknél támogatott. A 'none' kulcsszót a tiszta szövegű LDAP-kommunikációhoz használják;
- Ne feledje, hogy 'ldaps' vagy 'start-tls' titkosítás esetén a webszervernek képesnek kell lennie az LDAP-szerver tanúsítványának ellenőrzésére. Ezért meg kell határoznia a tanúsító hatóságot az openldap könyvtárban (ez általában az /etc/openldap/ldap.conf fájlban történik linux alatt).
- '$ldap_server [ $serverId] [ 'referrals']: Ez egy logikai paraméter, amely meghatározza, hogy a hivatkozásokat követni kell-e vagy sem (hamis értéket használjon az ActiveDirectoryhoz);
- $ldap_server [ $serverId] [ 'encoding']: Ez egy opcionális paraméter, amely megadja az LDAP-könyvtár által a karakterláncok tárolására használt kódolást. Ezt a paramétert általában nem kell beállítani, mivel az alapértelmezett feltételezett kódolás, az 'utf-8', az LDAP-címtárak szabványos kódolása. Ha azonban Active Directoryt használ, és problémái vannak az ékezetes karakterláncok importálásával, próbálja meg beállítani ezt a paramétert az Ön területén használt kódolásra (például 'cp850' Nyugat-Európa esetében). A támogatott kódolások teljes listájának megtekintéséhez tekintse meg a „Fájl karakterkészlete” legördülő listát a Token importálása CSV-fájlból GUI-ban.
Ezután meg kell határoznia, hogy milyen hitelesítés szükséges a címtárhoz való hozzáféréshez. Ha az "anonim" hozzáférés engedélyezett, NE állítsa be a következő két paramétert, ellenkező esetben állítsa be őket megfelelően:
- '$ldap_server [ $serverId] [ 'binddn']: A könyvtár olvasására jogosult 'LDAP' felhasználó DN-je;
- '$ldap_server [ $serverId] [ 'bindpw']: Jelszó a fenti LDAP felhasználóhoz.
Ha más LDAP-kiszolgálókat is meg kell határoznia, adja hozzá a következő sort a szerverazonosító növeléséhez és új paraméterek meghatározásához:
- $serverId++.
== Lekérdezések meghatározása a config/ldap.php== fájlban
Figyelem: ha ezen paraméterek egyikében egy ldap attribútumnév szükséges, csak kisbetűs neveket használjon: például displayname és NOT displayName.
Kérjük, tekintse meg a config/ldap.php fájlt, amely konfigurációs mintákat tartalmaz.
Egyszerű lekérdezések
Kezdjük az egyszerű lekérdezésekkel. Ezek a lekérdezések csak saját attribútumuk és helyük alapján szűrik az LDAP bejegyzéseket. Általában elegendőek az ActiveDirectory lekérdezéséhez.
- $query_id: az LDAP lekérdezés azonosítója;
- $ldap_queries [ $query_id] [ 'ldapServerId']: Egy adott szerverhez köti a lekérdezést;
- '$ldap_queries [ $query_id] [ 'name']: A lekérdezést leíró karakterlánc. Megjelenik a grafikus felhasználói felületen;
- $ldap_queries [ $query_id] [ 'userbase']: Root DN a felhasználói keresésekhez;
- '$ldap_queries [ $query_id] [ 'userfilter']: Ez egy szűrő, amely a potenciális felhasználók bejegyzéseinek kiválasztására szolgál. Zárójelek közé kell tenni;
- '$ldap_queries [ $query_id] [ 'userscope']: a felhasználók LDAP keresésének hatóköre ('base', 'one' vagy 'sub');
- '$ldap_queries [ $query_id] [ 'firstname_attr']: Ldap attribútum, amely a token bejegyzés Firstname mezőjére lesz leképezve;
- $ldap_queries [ $query_id] [ 'lastname_attr']: Ldap attribútum, amely a token bejegyzés Vezetéknév mezőjére lesz leképezve;
- '$ldap_queries [ $query_id] [ 'email_attr']: Ldap attribútum, amely a token bejegyzés e-mail cím mezőjére lesz leképezve.
Opcionálisan további információkat is lekérhet a következő könyvtárból:
- $ldap_queries [ $query_id] [ 'token_attr']: Ldap attribútum, amely a token kódra lesz leképezve;
- $ldap_queries [ $query_id] [ 'language']: Ldap attribútum, amely a felhasználói nyelvi kódra lesz leképezve;
- '$ldap_queries [ $query_id] [ 'attr1']: Ldap attribútum, amely az attribútum_1 mezőre lesz leképezve;
- '$ldap_queries [ $query_id] [ 'attr2']: Ldap attribútum, amely az attribútum_2 mezőre lesz leképezve.
Kombinált csoportlekérdezések DN-tagokkal
Nézzük meg, hogyan határozhatunk meg egy bonyolultabb lekérdezést.
A következő lekérdezések az első LDAP-keresést használják, amely az LDAP-csoportokat vizsgálja. Az LDAP-csoport egy olyan LDAP-bejegyzés, amely hivatkozásokat tartalmaz a felhasználók bejegyzéseire a következő formában:
- felhasználói azonosítók (például posixGroups do) ==> Lásd a következő részt
- Vagy felhasználói DN-ek (például groupofnames és groupofuniquenames do) ==> lásd alább
Itt a felhasználói DN-eket tartalmazó csoportokkal foglalkozunk:
- define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'név'] a fentebb leírtak szerint.
Ezután adja meg a csoportszűrő paramétereit:
- '$ldap_queries [ $query_id] [ 'groupbase']: A gyökér DN, amelyből a csoportbejegyzések keresését el szeretné kezdeni;
- '$ldap_queries [ $query_id] [ 'groupfilter']: Az LDAP szűrő, amely kiválasztja a lehetséges csoportbejegyzéseket;
- '$ldap_queries [ $query_id] [ 'groupscope']: A csoportok LDAP-keresésének hatóköre ('on', 'base' vagy 'sub');
- '$ldap_queries [ $query_id] [ 'groupmemberattr']: Az LDAP attribútum neve a csoportbejegyzésben, amely hivatkozásokat fog tartalmazni a felhasználók bejegyzéseire;
- $ldap_queries [ $query_id] [ 'groupmemberisdn']:' TRUE.
Ezen a ponton minden be van állítva, hogy az első LDAP-keresés megtalálja a kiválasztott csoportoknak megfelelő felhasználókat. Korlátozhatja azonban, hogy ezek közül a "felhasználójelöltek" közül melyik kerüljön kiválasztásra, ha egy másik szűrőt alkalmaz rájuk. Ez természetesen nem kötelező:
- '$ldap_queries [ $query_id] [ 'userbase']: A felhasználói LDAP-keresés alap DN-je (csak az ennek az alapnak megfelelő felhasználójelölt) lesz kiválasztva;
- '$ldap_queries [ $query_id] [ 'userscope']: A felhasználói LDAP keresés hatóköre (csak a felhasználói bázis+hatókörnek megfelelő felhasználójelölt) lesz kiválasztva;
- '$ldap_queries [ $query_id] [ 'userfilter']: Ez egy szűrő, amely minden felhasználójelölt bejegyzésre vonatkozik (az attribútumaira), hogy újabb kijelölést adjon hozzá.
Kombinált csoportlekérdezések UID-tagokkal
Lássuk most, hogyan definiálhatunk kombinált csoportlekérdezést, ha a csoporttagok felhasználói UID-k és nem felhasználói DN-ek.
Ami a DN-tagokat tartalmazó csoportlekérdezéseket illeti, ezek a lekérdezések az első LDAP-keresést használják, amely megkeresi az LDAP-csoportok bejegyzéseit, és lekéri a tagokat. Ezeket a tagértékeket ezután a rendszer egy felhasználói keresési szűrőben használja a megfelelő bejegyzések keresésére. Így egy másik paramétert kell konfigurálni a felhasználói attribútum meghatározásához a felhasználó bejegyzésében, amelynek meg kell egyeznie a csoportokban található tag UID-vel.
Tekintsük át a szükséges paramétereket:
- define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'név'] a fentebb leírtak szerint
Ezután adja meg a csoportszűrő paramétereit:
- '$ldap_queries [ $query_id] [ 'groupbase']: A gyökér DN, amelyből a csoportbejegyzések keresését el szeretné kezdeni;
- '$ldap_queries [ $query_id] [ 'groupfilter']: Az LDAP szűrő, amely kiválasztja a lehetséges csoportbejegyzéseket;
- '$ldap_queries [ $query_id] [ 'groupscope']: A csoportok LDAP-keresésének hatóköre ('on', 'base' vagy 'sub');
- '$ldap_queries [ $query_id] [ 'groupmemberattr']: Az LDAP attribútum neve a csoportbejegyzésben, amely hivatkozásokat fog tartalmazni a felhasználók bejegyzéseire;
- $ldap_queries [ $query_id] [ 'groupmemberisdn']:' HAMIS;
- $ldap_queries [ $query_id] [ 'useridattr']:' a felhasználói attribútum neve, amelynek meg kell egyeznie a csoporttagokban található UID-vel.
Ezen a ponton minden úgy van beállítva, hogy az első LDAP-keresés megtalálja a kiválasztott csoportoknak megfelelő felhasználói UID-ket, és egy felhasználói keresési szűrő automatikusan kitöltésre kerül.
Korlátozhatja azonban, hogy ezek közül a „felhasználójelöltek” közül melyik kerüljön kiválasztásra a tagi UID-kből számított automatikus felhasználói szűrő kitöltésével. Ez természetesen nem kötelező:
- '$ldap_queries [ $query_id] [ 'userbase']: A felhasználói LDAP-keresés alap DN-je (csak az ennek az alapnak megfelelő felhasználójelölt) lesz kiválasztva;
- '$ldap_queries [ $query_id] [ 'userscope']: A felhasználói LDAP keresés hatóköre (csak a felhasználói bázis+hatókörnek megfelelő felhasználójelölt) lesz kiválasztva;
- '$ldap_queries [ $query_id] [ 'userfilter']: Ez egy szűrő, amely minden felhasználójelölt bejegyzésre vonatkozik (az attribútumaira), hogy újabb kijelölést adjon hozzá.
Mi a helyzet az Active Directoryval?
Az Active Directory (AD) egy Microsoft rendszerleíró adatbázis, amely az LDAP protokoll használatával lekérdezhető.
Ezután felhasználható a LimeSurvey token lekérdezésekhez, de ehhez ismerni kell az AD rendszerezését.
- Az LDAP gyökérbázisa dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1
==> Például, ha az Ön cége a „my-company.com” DNS-tartomány tulajdonosa, és a Windows tartománya az „alkalmazottak”, akkor az Ön gyökérbázisa dc=alkalmazottak,dc=my-company,dc=com
* A felhasználók és felhasználói csoportok a cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 alatt találhatók (kérjük, vegye figyelembe, hogy ez nem ou=users);
- Active Directory csoportok:
- Csoportok Az objektumok a tagok DN-jét tartalmazzák a 'member' attribútumban;
- A csoporttagságok is tárolódnak az egyes felhasználói bejegyzések memberOf attribútumaiban. Ez az attribútum tartalmazza azon csoportok megkülönböztetett neveit, amelyekhez a felhasználó tartozik;
- egyes csoportok a CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
- alatt találhatók. Például: cn=Adminisztrátor,CN =Beépített,dc=my_windows_domain_name,dc=dns_utótag2,dc=dns_utótag1;
Egyes esetekben nem olyan egyszerű lekérdezni egy aktív könyvtárat, ezért itt van egy példa konfigurációs információ az aktív könyvtárról:
//Kapcsolódás az aktív könyvtárhoz Szerver:
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId] ['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "nincs"; // A legtöbb AD LDAP szerveren alapértelmezés szerint nincs titkosítás beállítva
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\felhasználó ";
$ldap_server[$serverId]['bindpw'] = "felhasználói jelszó";
//$ldap_server[$serverId]['binddn'] = "CN=felhasználó,OU=felhasználói_csoport,DC=xxx ,DC=ééé"; ez nem fog működni aktív könyvtárral, ezért kell a "domain\\user"-t használni
//Itt van egy mintalekérdezés egy aktív könyvtár összes aktív felhasználójának lekérdezéséhez:
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Engedélyezett fiókkal rendelkező alkalmazottak';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514) ))';
//(!(userAccountControl=514)) aktív felhasználóhoz nem kérdezhet aktív könyvtárat, de nem inaktív felhasználóhoz igen
$ldap_queries[$query_id][ 'userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'adott név';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = '; // Hagyja üresen az automatikus token generálásához phpsv által
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//A csoportszűrés nem volt lehetséges az aktív könyvtárban, hozzá kell adni egy felhasználó memberOf attribútumait. Íme egy példalekérdezés az összes aktív felhasználónak, aki a "samplegroup" csoport tagja az aktív könyvtárban:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ ldap_queries[$query_id]['name'] = 'A mintacsoport összes tagja';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=felhasználó)(memberOf=CN=mintacsoport,OU=Globális csoport,OU=USER_GROUP,DC=xxx,DC=yyyy)(!(userAccountControl=514) ))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'adott név';
$ldap_queries[$ query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = '; // Hagyja üresen az automatikus token generálásához phpsv által
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
Egy másik példa Felhasználói lekérdezés:
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Személy''')(objectClass='''user''')(!('''userAccountControl=514' '')))'; // Az AD a normál módon nem ismeri fel az engedélyezett fiókokat, ezért ehelyett ellenőrizzük, hogy a felhasználók nincsenek letiltva
- A konfigurációs fájlban javasoltak szerint fontolja meg (!(email=*)) hozzáadását a felhasználói szűrőihez, hogy figyelmen kívül hagyja az e-mail címmel nem rendelkező felhasználókat.
Példa csoportos lekérdezésre:
$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Domain Admins))'; // Az AD nem használja a szabványos attribútumnevet a csoportokhoz, ezért használja inkább ezt a példát.
Creating one query per Active Directory group automatically
If you keep the groups for your survey participants in one organizational unit (OU), you do not have to write a query for each group. The following code lists all groups in that OU and creates one query per group. The query includes all enabled members of the group, including members of nested groups.
Add the code to config/ldap.php after your server and query definitions and before the line //DO NOT CHANGE BELOW HERE. Then set the four variables at the top:
- $groupServerId: the $serverId of the server to use;
- $groupContainer: the DN of the OU that holds the groups. Only groups directly in this OU are listed, not groups in sub-OUs;
- $groupUserBase: the root DN under which the group members are searched;
- $groupNameAttr: the group attribute (in lower case) used as the query name in the GUI, for instance 'info' (the "Notes" field in "Active Directory Users and Computers") or 'description'. If a group has no value in this attribute, its cn is used.
$groupServerId = 0;
$groupContainer = 'OU=Survey groups,DC=xxx,DC=yyy';
$groupUserBase = 'DC=xxx,DC=yyy';
$groupNameAttr = 'info';
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
$srv = $ldap_server[$groupServerId];
$ds = ldap_connect(($srv['encrypt'] == 'ldaps' ? 'ldaps://' : 'ldap://') . $srv['server'] . ':' . $srv['port']);
if ($ds) {
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $srv['protoversion'] == 'ldapv3' ? 3 : 2);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
// Never send the bind password if Start-TLS was requested but failed
$secure = $srv['encrypt'] != 'start-tls' || @ldap_start_tls($ds);
$bound = $secure && (empty($srv['binddn']) ? @ldap_bind($ds) : @ldap_bind($ds, $srv['binddn'], $srv['bindpw']));
$result = $bound ? @ldap_list($ds, $groupContainer, '(objectCategory=group)', array('cn', $groupNameAttr)) : false;
$groups = $result ? ldap_get_entries($ds, $result) : array('count' => 0);
for ($i = 0; $i < $groups['count']; $i++) {
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = $groupServerId;
$ldap_queries[$query_id]['name'] = isset($groups[$i][$groupNameAttr][0]) ? $groups[$i][$groupNameAttr][0] : $groups[$i]['cn'][0];
$ldap_queries[$query_id]['userbase'] = $groupUserBase;
// Enabled users with an email address that are members of the group, directly or through nested groups
$ldap_queries[$query_id]['userfilter'] = '(&(objectCategory=person)(objectClass=user)(mail=*)'
. '(!(userAccountControl:1.2.840.113556.1.4.803:=2))'
. '(memberOf:1.2.840.113556.1.4.1941:=' . ldap_escape($groups[$i]['dn'], '', LDAP_ESCAPE_FILTER) . '))';
$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'] = '';
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
}
ldap_unbind($ds);
}
Things to keep in mind:
- The code connects to the directory each time the "Import participants from LDAP" page is opened or submitted, so new groups appear without changing the configuration. If the connection or the bind fails, the page only shows the queries you defined by hand.
- The matching rule 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) resolves nested groups. It only exists in Active Directory, so this example does not work with other LDAP servers. On those, use a combined group query for each group instead.
- To also list groups in sub-OUs of $groupContainer, replace ldap_list with ldap_search.
- To list groups from more than one OU, repeat the code with other values for the four variables.
Az Active Directory LDAP-struktúrájáról a Active Directory Architecture és a webhelyeken talál további információt. library/cc223122.aspx Active Directory műszaki specifikációja.