Actions

LDAP-indstillinger

From LimeSurvey Manual

This page is a translated version of the page LDAP settings and the translation is 100% complete.
  Opmærksomhed : Denne funktion tillader LimeSurvey-undersøgelsesadministratorer at importere tokens via LDAP. Hvis du har brug for en LDAP-godkendelse, se venligst AuthLDAP-plugin.


Generelt

Du skal aktivere LDAP-understøttelse i config.php og konfigurere LDAP-parametre i config/ldap.php for at kunne bruge denne funktion.

  For at kunne bruge LDAP, skal du kontrollere, at LDAP-modulet er installeret i din PHP. Se venligst PHP LDAP-moduldokumentation om, hvordan du installerer denne udvidelse.


Aktivering af LDAP i config.php

  • $enableLdap: hvis du vil bruge LDAP-funktioner i LimeSurvey, skal du indstille denne parameter til sand (den er som standard sat til falsk):
'config'=>array(
 'debug'=>0,
 'debugsql'=>0,
 'enableLdap'=>sand,
 )

Definition af LDAP-servere

Definer først LDAP-serverforbindelsesmulighederne i "application/config/ldap.php". For hver server er følgende muligheder tilgængelige:

  • $serverId: Et heltal, der identificerer denne LDAP-server. Det bruges i forespørgselsdefinitioner til at binde en server til en specifik forespørgsel;
  • $ldap_server [ $serverId] [ 'server']: IP-adressen eller DNS-navnet på LDAP-serveren. Hvis du bruger SSL-sikrede forbindelser (LDAP'er eller LDAP+Start-TLS), skal dette navn svare til serverens Certificate CN (eller SubjectAlternativeName);
  • $ldap_server [ $serverId] [ 'protoversion']: Kan være 'ldapv2' eller 'ldapv3' afhængigt af den protokol, der understøttes af din server. 'ldapv3' er den foretrukne protokol. Men hvis du vil bruge krypterede forbindelser, skal du være opmærksom på, at LDAP'er understøttes i 'ldapv2'-tilstand, mens Start-TLS er krypteringsmetoden for 'ldapv3';
  • $ldap_server [ $serverId] [ 'encrypt']: Definerer den anvendte krypteringsmetode. 'ldaps' er understøttet for 'ldav2'-servere, 'start-tls' for 'ldapv3'-servere. 'none' nøgleordet bruges til klartekst LDAP-kommunikation;
    • Glem ikke, at for 'ldaps' eller 'start-tls'-kryptering skal webserveren være i stand til at kontrollere LDAP-serverens certifikat. Du skal således definere din certifikatautoritet i dit openldap-bibliotek (normalt gøres dette i filen /etc/openldap/ldap.conf under linux).
  • $ldap_server [ $serverId] [ 'referrals']: Det er en boolesk parameter, der definerer, om henvisninger skal følges eller ej (brug false for ActiveDirectory);
  • $ldap_server [ $serverId] [ 'encoding']: Det er en valgfri parameter, som giver den kodning, der bruges af LDAP-biblioteket til at gemme strenge. Du behøver normalt ikke at opsætte denne parameter, da den antagne standardkodning, 'utf-8', er standardkodningen for LDAP-mapper. Men hvis du bruger Active Directory og har problemer med at importere accentuerede strenge, så prøv at indstille denne parameter til den kodning, der bruges i dit område (f.eks. 'cp850' for Vesteuropa). Du kan henvise til rullelisten "Tegnsæt for filen" i Importer token fra CSV-fil GUI for at få den fulde liste over understøttede kodninger.

Dernæst skal du definere, hvilken godkendelse der er nødvendig for at få adgang til biblioteket. Hvis 'anonym' adgang er tilladt, skal du IKKE indstille de to følgende parametre, ellers indstille dem i overensstemmelse hermed:

  • $ldap_server [ $serverId] [ 'binddn']: DN for 'LDAP'-brugeren, der har tilladelse til at læse mappen;
  • $ldap_server [ $serverId] [ 'bindpw']: Adgangskode for ovennævnte LDAP-bruger.

Hvis du har brug for at definere andre LDAP-servere, skal du tilføje følgende linje for at øge server-ID'et og definere nye parametre:

  • $serverId++.

Definition af forespørgsler i config/ldap.php

Forsigtig: når et ldap-attributnavn er påkrævet i en af disse parametre, brug kun små bogstaver: f.eks. displayname og IKKE displayName.

Se venligst filen config/ldap.php, da den indeholder eksempler på konfiguration.

Simple forespørgsler

Lad os begynde med simple forespørgsler. Disse forespørgsler filtrerer kun LDAP-poster baseret på deres egne attributter og placering. De er normalt nok til at forespørge ActiveDirectory.

  • $query_id: er LDAP-forespørgslens id;
  • $ldap_queries [ $query_id] [ 'ldapServerId']: Binder forespørgslen til en bestemt server;
  • $ldap_queries [ $query_id] [ 'navn']: Streng, der beskriver forespørgslen. Det vil blive vist i GUI;
  • $ldap_queries [ $query_id] [ 'userbase']: Root-DN til brug for brugersøgninger;
  • $ldap_queries [ $query_id] [ 'userfilter']: Det er et filter, der bruges til at vælge potentielle brugeres indtastninger. Det skal være omgivet af parentes;
  • $ldap_queries [ $query_id] [ 'userscope']: omfanget af LDAP-søgningen efter brugere ('base', 'one' eller 'sub');
  • $ldap_queries [ $query_id] [ 'firstname_attr']: Ldap-attribut, der vil blive knyttet til feltet Fornavn for token-indgangen;
  • $ldap_queries [ $query_id] [ 'lastname_attr']: Ldap-attribut, der vil blive knyttet til feltet Efternavn for token-indgangen;
  • $ldap_queries [ $query_id] [ 'email_attr']: Ldap-attribut, der vil blive knyttet til e-mail-adressefeltet for token-indtastningen.

Du kan eventuelt hente mere information fra mappen:

  • $ldap_queries [ $query_id] [ 'token_attr']: Ldap-attribut, der vil blive knyttet til token-koden;
  • $ldap_queries [ $query_id] [ 'language']: Ldap-attribut, der vil blive knyttet til brugerens sprogkode;
  • $ldap_queries [ $query_id] [ 'attr1']: Ldap-attribut, der vil blive knyttet til feltet attribute_1;
  • $ldap_queries [ $query_id] [ 'attr2']: Ldap-attribut, der vil blive knyttet til attribute_2-feltet.

Kombinerede gruppeforespørgsler med DN-medlemmer

Lad os nu se, hvordan man definerer en mere kompliceret forespørgsel.

Følgende forespørgsler bruger en første LDAP-søgning, der ser på LDAP-grupper. En LDAP-gruppe er en LDAP-post, der indeholder referencer til brugernes indtastninger i form af:

  • bruger-id'er (f.eks. posixGroups do) ==> Se næste afsnit
  • Eller bruger-DN'er (f.eks. gruppenavne og gruppenavne do) ==> se nedenfor

Her beskæftiger vi os med grupper, der indeholder bruger-DN'er:

  • define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'navn'] som forklaret ovenfor.

Definer derefter gruppefilterparametrene:

  • $ldap_queries [ $query_id] [ 'groupbase']: Root-DN, hvorfra du vil begynde at søge efter gruppeposter;
  • $ldap_queries [ $query_id] [ 'groupfilter']: LDAP-filteret, der vil vælge potentielle gruppeindgange;
  • $ldap_queries [ $query_id] [ 'groupscope']: Omfanget af LDAP-søgningen efter grupper ('on', 'base' eller 'sub');
  • $ldap_queries [ $query_id] [ 'groupmemberattr']: Navnet på LDAP-attributten i gruppeindgangen, der vil indeholde referencer til brugernes indtastninger;
  • $ldap_queries [ $query_id] [ 'groupmemberisdn']: SAND.

På dette tidspunkt er alt sat op til at lade den første LDAP-søgning finde brugere svarende til de valgte grupper. Du kan dog begrænse, hvilke af disse "brugerkandidater" der bliver valgt ved at anvende et andet filter på dem. Dette er selvfølgelig valgfrit:

  • $ldap_queries [ $query_id] [ 'userbase']: Base DN for brugerens LDAP-søgning (kun brugerkandidat, der matcher denne base) vil blive valgt;
  • $ldap_queries [ $query_id] [ 'userscope']: Omfang for brugerens LDAP-søgning (kun brugerkandidat, der matcher userbase+scope) vil blive valgt;
  • $ldap_queries [ $query_id] [ 'userfilter']: Det er et filter, der gælder for hver brugerkandidatindgang (på dens attributter) for at tilføje endnu et valg.

Kombinerede gruppeforespørgsler med UID-medlemmer

Lad os nu se, hvordan man definerer en kombineret gruppeforespørgsel, når gruppemedlemmer er bruger-UID'er og ikke bruger-DN'er.

Hvad angår gruppeforespørgsler med DNs-medlemmer, bruger disse forespørgsler en første LDAP-søgning, der søger efter LDAP-gruppeposter og får deres medlemmer. Disse medlemsværdier bruges derefter i et brugersøgefilter til at søge efter tilsvarende poster. En anden parameter skal således konfigureres til at definere brugerattributten i brugerens indtastning, der skal matche medlems-UID'et, der findes i grupperne.

Lad os gennemgå de nødvendige parametre:

  • define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'navn'] som forklaret ovenfor

Definer derefter gruppefilterparametrene:

  • $ldap_queries [ $query_id] [ 'groupbase']: Root-DN, hvorfra du vil begynde at søge efter gruppeposter;
  • $ldap_queries [ $query_id] [ 'groupfilter']: LDAP-filteret, der vil vælge potentielle gruppeindgange;
  • $ldap_queries [ $query_id] [ 'groupscope']: Omfanget af LDAP-søgningen efter grupper ('on', 'base' eller 'sub');
  • $ldap_queries [ $query_id] [ 'groupmemberattr']: Navnet på LDAP-attributten i gruppeindgangen, der vil indeholde referencer til brugernes indtastninger;
  • $ldap_queries [ $query_id] [ 'groupmemberisdn']: FALSK;
  • $ldap_queries [ $query_id] [ 'useridatr']: navn på brugerattributten, der skal matche den UID, der findes i gruppemedlemmerne.

På dette tidspunkt er alt sat op til at lade den første LDAP-søgning finde brugernes UID'er svarende til udvalgte grupper, og et brugersøgefilter vil automatisk blive udfyldt.

Du kan dog begrænse, hvilke af disse 'brugerkandidater', der vil blive valgt, ved at udfylde det automatiske brugerfilter, der beregnes fra medlems-UID'er. Dette er selvfølgelig valgfrit:

  • $ldap_queries [ $query_id] [ 'userbase']: Base DN for brugerens LDAP-søgning (kun brugerkandidat, der matcher denne base) vil blive valgt;
  • $ldap_queries [ $query_id] [ 'userscope']: Omfang for brugerens LDAP-søgning (kun brugerkandidat, der matcher userbase+scope) vil blive valgt;
  • $ldap_queries [ $query_id] [ 'userfilter']: Det er et filter, der gælder for hver brugerkandidatindgang (på dens attributter) for at tilføje endnu et valg.

Hvad med Active Directory?

Active Directory (AD) er et Microsoft-register, der kan forespørges ved hjælp af LDAP-protokollen.

Det er så muligt at bruge dets indhold til LimeSurvey token-forespørgsler, men dette kræver viden om, hvordan AD er organiseret.

  • LDAP-rodbasen er dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1

==> For eksempel, hvis din virksomhed ejer DNS-domænet 'my-company.com' og dit Windows-domæne er 'employees', så er din rodbase dc=employees,dc=my-company,dc=com

* Brugere og brugergrupper er gemt under cn=Brugere,dc=mit_vinduesdomænenavn,dc=dns_suffix2,dc=dns_suffix1 (bemærk venligst, at dette ikke er ou=brugere);
  • Active Directory-grupper:
    • -grupper objekter indeholder DN af medlemmer i deres 'member'-attribut;
    • Gruppemedlemskaber gemmes også i memberOf-attributten for hver brugerpost. Denne attribut indeholder DN'er for grupper, som brugeren tilhører;
    • nogle grupper er i CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
      • For eksempel: cn=Administrator,CN =Indbygget,dc=mit_vinduesdomænenavn,dc=dns_suffix2,dc=dns_suffix1;

I nogle tilfælde er det ikke så nemt at forespørge på et aktivt bibliotek, så her er et eksempel på en konfiguration for at få nogle oplysninger om en aktiv mappe:

//Forbindelse til den aktive mappe 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'] = "ingen"; // De fleste AD LDAP-servere vil ikke have kryptering indstillet som standard
$ldap_server[$serverId]['referrals'] = falsk;
$ldap_server[$serverId]['binddn'] = "domæne\\bruger ";
$ldap_server[$serverId]['bindpw'] = "brugeradgangskode";
//$ldap_server[$serverId]['binddn'] = "CN=bruger,OU=brugergruppe,DC=xxx ,DC=ååå"; denne vil ikke fungere med Active Directory, derfor skal du bruge "domain\\user"
//Her er et eksempel på en forespørgsel til at få alle aktive brugere af en Active Directory:
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Personal med en aktiveret konto';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514))';
//(!(userAccountControl=514)) du er ikke i stand til at spørge active directory for en aktiv bruger, men du kan bede om en ikke-inaktiv bruger
$ldap_queries[$query_id][ 'userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'fornavn';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
 $ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Lad være tomt for automatisk tokengenerering af phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//Gruppefiltrering var ikke mulig i Active Directory, du skal tilføje memberOf-attributten for en bruger. Her er et eksempel på en forespørgsel til at få alle aktive brugere, der er medlem af gruppen "samplegroup" i active directory:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ ldap_queries[$query_id]['name'] = 'Alle medlemmer af prøvegruppen';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=ååå';
 $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'] = 'fornavn';
$ldap_queries[$ query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Lad være tomt for automatisk tokengenerering af phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';

Et andet eksempel på brugerforespørgsel:

 
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''bruger''')(!('''userAccountControl=514' '')))'; // AD genkender ikke aktiverede konti på normal vis, så i stedet kontrollerer vi, at brugerne ikke er deaktiveret
  • Som foreslået i konfigurationsfilen, overvej at tilføje (!(email=*)) til dine brugerfiltre for at ignorere brugere uden e-mailadresse.

Eksempel på gruppeforespørgsel:

$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''gruppe''')(cn=Domæneadministratorer))'; // AD bruger ikke standardattributnavnet til grupper, så brug dette eksempel i stedet.

Find flere oplysninger om Active Directory LDAP-strukturen på Active Directory Architecture og library/cc223122.aspx Active Directory Technical Specification.