Actions

LDAP-Einstellungen

From LimeSurvey Manual

Revision as of 08:34, 27 March 2024 by Maren.fritz (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
  Achtung : Mit dieser Funktion können LimeSurvey-Umfrageadministratoren Token über LDAP importieren. Wenn Sie eine LDAP-Authentifizierung benötigen, lesen Sie bitte AuthLDAP-Plugin.


Generelles

Um diese Funktion nutzen zu können, müssen Sie die LDAP-Unterstützung in config.php aktivieren und LDAP-Parameter in config/ldap.php konfigurieren.

  Um LDAP verwenden zu können, müssen Sie überprüfen, ob das LDAP-Modul in Ihrem PHP installiert ist. Informationen zur Installation dieser Erweiterung finden Sie in der Dokumentation zum PHP-LDAP-Modul.


LDAP in config.php aktivieren

  • $enableLdap: Wenn Sie LDAP-Funktionen in LimeSurvey verwenden möchten, müssen Sie diesen Parameter auf true setzen (standardmäßig ist er auf false gesetzt):
'config'=>array(
 'debug'=>0,
 'debugsql'=>0,
 'enableLdap'=>true,
 )

LDAP-Server definieren

Definieren Sie zunächst die LDAP-Serververbindungsoptionen in „application/config/ldap.php“. Für jeden Server stehen die folgenden Optionen zur Verfügung:

  • $serverId: Eine Ganzzahl, die diesen LDAP-Server identifiziert. Es wird in Abfragedefinitionen verwendet, um einen Server an eine bestimmte Abfrage zu binden;
  • $ldap_server[$serverId]['server']: Die IP-Adresse oder der DNS-Name des LDAP-Servers. Wenn Sie SSL-gesicherte Verbindungen (LDAPs oder LDAP+Start-TLS) verwenden, muss dieser Name dem Zertifikat-CN (oder SubjectAlternativeName) des Servers entsprechen;
  • $ldap_server[$serverId]['protoversion']: Kann je nach dem von Ihrem Server unterstützten Protokoll 'ldapv2' oder 'ldapv3' sein. „ldapv3“ ist das bevorzugte Protokoll. Wenn Sie jedoch verschlüsselte Verbindungen verwenden möchten, beachten Sie, dass LDAPs im Modus „ldapv2“ unterstützt wird, während Start-TLS die Verschlüsselungsmethode für „ldapv3“;
  • $ldap_server ist[$serverId]['encrypt']: Definiert die verwendete Verschlüsselungsmethode. „ldaps“ wird für „ldav2“-Server unterstützt, „start-tls“ für „ldapv3“-Server. Das Schlüsselwort „none“ wird für Klartext-LDAP-Kommunikation verwendet;
    • Vergessen Sie nicht, dass der Webserver für die Verschlüsselung „ldaps“ oder „start-tls“ in der Lage sein muss, das Zertifikat des LDAP-Servers zu überprüfen. Daher müssen Sie Ihre Zertifizierungsstelle in Ihrer openldap-Bibliothek definieren (normalerweise erfolgt dies in der Datei /etc/openldap/ldap.conf unter Linux).
  • $ldap_server[$serverId]['referrals']: Es handelt sich um einen booleschen Parameter, der definiert, ob Verweisen gefolgt werden muss oder nicht (verwenden Sie false für ActiveDirectory);
  • $ldap_server[$serverId]['encoding']: Dies ist ein optionaler Parameter, der die vom LDAP-Verzeichnis zum Speichern von Zeichenfolgen verwendete Codierung angibt. Normalerweise müssen Sie diesen Parameter nicht einrichten, da die standardmäßig angenommene Kodierung „utf-8“ die Standardkodierung für LDAP-Verzeichnisse ist. Wenn Sie jedoch Active Directory verwenden und Probleme beim Importieren von akzentuierten Zeichenfolgen haben, versuchen Sie, diesen Parameter auf die in Ihrer Region verwendete Codierung einzustellen (z. B. „cp850“ für Westeuropa). Die vollständige Liste der unterstützten Kodierungen finden Sie in der Dropdown-Liste „Zeichensatz der Datei“ in der GUI Import Token from CSV file.

Als Nächstes müssen Sie definieren, welche Authentifizierung erforderlich ist, um Zugriff auf das Verzeichnis zu erhalten. Wenn „anonymer“ Zugriff erlaubt ist, legen Sie die beiden folgenden Parameter NICHT fest, andernfalls legen Sie sie entsprechend fest:

  • $ldap_server[$serverId]['binddn']: DN des 'LDAP'-Benutzers, der das Verzeichnis lesen darf;
  • $ldap_server[$serverId]['bindpw']: Passwort für den oben genannten LDAP-Benutzer.

Wenn Sie andere LDAP-Server definieren müssen, fügen Sie die folgende Zeile hinzu, um die Server-ID zu erhöhen und neue Parameter zu definieren:

  • $serverId++.

Definieren von Abfragen in config/ldap.php

Achtung: Wenn in einem dieser Parameter ein „LDAP-Attributname“ erforderlich ist, „verwenden Sie nur Namen in Kleinbuchstaben“, zum Beispiel „displayname“ und NICHT „displayName“.

Bitte beachten Sie die Datei config/ldap.php, da sie Beispielkonfigurationen enthält.

Einfache Abfragen

Beginnen wir mit einfachen Abfragen. Diese Abfragen filtern LDAP-Einträge nur basierend auf ihren eigenen Attributen und ihrem Standort. Sie reichen normalerweise aus, um ActiveDirectory abzufragen.

  • $query_id: Ist die ID der LDAP-Abfrage;
  • $ldap_queries[$query_id]['ldapServerId']: Bindet die Abfrage an einen bestimmten Server;
  • $ldap_queries[$query_id]['name']: String, der die Abfrage beschreibt. Es wird in der GUI angezeigt;
  • $ldap_queries[$query_id]['userbase']: Root-DN zur Verwendung für Benutzersuchen;
  • $ldap_queries[$query_id] ['userfilter']: Dies ist ein Filter, der zur Auswahl potenzieller Benutzereinträge verwendet wird. Es muss in Klammern eingeschlossen werden;
  • $ldap_queries[$query_id]['userscope']: Umfang der LDAP-Suche nach Benutzern ('base', 'one' oder 'sub');
  • $ldap_queries[$query_id]['firstname_attr']: Ldap-Attribut, das dem Firstname-Feld des Token-Eintrags zugeordnet wird;
  • $ldap_queries[$query_id]['lastname_attr']: Ldap-Attribut, das dem Feld Nachname des Token-Eintrags zugeordnet wird;
  • $ldap_queries[$query_id]['email_attr']: Ldap-Attribut, das dem E-Mail-Adressfeld des Token-Eintrags zugeordnet wird.

Optional können Sie weitere Informationen aus dem Verzeichnis abrufen:

  • $ldap_queries[$query_id]['token_attr']: Ldap-Attribut, das dem Token-Code zugeordnet wird;
  • $ldap_queries[$query_id]['Sprache']: Ldap-Attribut, das dem Benutzersprachencode zugeordnet wird;
  • $ldap_queries[$query_id]['attr1']: Ldap-Attribut, das dem Feld attribute_1 zugeordnet wird;
  • $ldap_queries[$query_id]['attr2']: Ldap-Attribut, das dem Feld attribute_2 zugeordnet wird.

Kombinierte Gruppenabfragen mit DN-Mitgliedern

Sehen wir uns nun an, wie eine kompliziertere Abfrage definiert wird.

Die folgenden Abfragen verwenden eine erste LDAP-Suche, die in LDAP-Gruppen sucht. Eine LDAP-Gruppe ist ein LDAP-Eintrag, der Verweise auf Benutzereinträge in der Form enthält:

  • Benutzer-IDs (z. B. posixGroups) ==> siehe nächster Abschnitt
  • Oder Benutzer-DNs (z. B. groupofnames und groupofuniquenames) ==> siehe unten

Hier beschäftigen wir uns mit Gruppen, die Benutzer-DNs enthalten:

  • definiere $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['Name'] wie oben erläutert.

Definieren Sie dann die Gruppenfilterparameter:

  • $ldap_queries[$query_id]['groupbase']: Der Root-DN, von dem aus Sie mit der Suche nach Gruppeneinträgen beginnen möchten;
  • $ldap_queries[$query_id]['groupfilter']: Der LDAP-Filter, der potenzielle Gruppeneinträge auswählt;
  • $ldap_queries[$query_id]['groupscope']: Der Bereich der LDAP-Suche nach Gruppen ('on', 'base' oder 'sub');
  • $ldap_queries[$query_id]['groupmemberattr']: Der Name des LDAP-Attributs im Gruppeneintrag, der Verweise auf Benutzereinträge enthält;
  • $ldap_queries[$query_id]['groupmemberisdn']: TRUE.

Zu diesem Zeitpunkt ist alles so eingerichtet, dass die erste LDAP-Suche Benutzer findet, die den ausgewählten Gruppen entsprechen. Sie können jedoch einschränken, welche dieser „Benutzerkandidaten“ ausgewählt werden, indem Sie einen anderen Filter auf sie anwenden. Dies ist natürlich optional:

  • $ldap_queries[$query_id]['userbase']: Basis-DN für die Benutzer-LDAP-Suche (nur Benutzerkandidaten, die dieser Basis entsprechen) wird ausgewählt;
  • $ldap_queries[$query_id]['userscope']: Bereich für die Benutzer-LDAP-Suche (nur Benutzerkandidaten, die der Benutzerbasis+Bereich entsprechen) wird ausgewählt;
  • $ldap_queries[$query_id]['userfilter']: Es handelt sich um einen Filter, der auf jeden Benutzerkandidateneintrag (auf seine Attribute) angewendet wird, um eine weitere Auswahl hinzuzufügen.

Kombinierte Gruppenabfragen mit UID-Mitgliedern

Sehen wir uns nun an, wie eine kombinierte Gruppenabfrage definiert wird, wenn Gruppenmitglieder Benutzer-UIDs und keine Benutzer-DNs sind.

Was die Gruppenabfragen mit DNs-Mitgliedern betrifft, verwenden diese Abfragen eine erste LDAP-Suche, die nach LDAP-Gruppeneinträgen sucht und deren Mitglieder abruft. Diese Mitgliedswerte werden dann in einem Benutzersuchfilter verwendet, um nach entsprechenden Einträgen zu suchen. Daher muss ein weiterer Parameter konfiguriert werden, um das Benutzerattribut im Benutzereintrag zu definieren, das mit der in den Gruppen gefundenen Mitglieds-UID übereinstimmen soll.

Sehen wir uns die erforderlichen Parameter an:

  • definiere $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['Name'] wie oben erläutert

Definieren Sie dann die Gruppenfilterparameter:

  • $ldap_queries[$query_id]['groupbase']: Der Root-DN, von dem aus Sie mit der Suche nach Gruppeneinträgen beginnen möchten;
  • $ldap_queries[$query_id]['groupfilter']: Der LDAP-Filter, der potenzielle Gruppeneinträge auswählt;
  • $ldap_queries[$query_id]['groupscope']: Der Bereich der LDAP-Suche nach Gruppen ('on', 'base' oder 'sub');
  • $ldap_queries[$query_id]['groupmemberattr']: Der Name des LDAP-Attributs im Gruppeneintrag, der Verweise auf Benutzereinträge enthält;
  • $ldap_queries[$query_id]['groupmemberisdn']: FALSE;
  • $ldap_queries[$query_id]['useridattr']: Name des Benutzerattributs, das mit der in den Gruppenmitgliedern gefundenen UID übereinstimmen muss.

An diesem Punkt ist alles so eingerichtet, dass die erste LDAP-Suche Benutzer-UIDs findet, die den ausgewählten Gruppen entsprechen, und ein Benutzersuchfilter wird automatisch ausgefüllt.

Sie können jedoch einschränken, welche dieser „Benutzerkandidaten“ ausgewählt werden, indem Sie den automatischen Benutzerfilter ausfüllen, der aus den UIDs der Mitglieder berechnet wird. Dies ist natürlich optional:

  • $ldap_queries[$query_id]['userbase']: Basis-DN für die Benutzer-LDAP-Suche (nur Benutzerkandidaten, die dieser Basis entsprechen) wird ausgewählt;
  • $ldap_queries[$query_id]['userscope']: Bereich für die Benutzer-LDAP-Suche (nur Benutzerkandidaten, die der Benutzerbasis+Bereich entsprechen) wird ausgewählt;
  • $ldap_queries[$query_id]['userfilter']: Es handelt sich um einen Filter, der auf jeden Benutzerkandidateneintrag (auf seine Attribute) angewendet wird, um eine weitere Auswahl hinzuzufügen.

Was ist mit Active Directory?

Active Directory (AD) ist eine Microsoft-Registrierung, die mithilfe des LDAP-Protokolls abgefragt werden kann.

Es ist dann möglich, seinen Inhalt für LimeSurvey-Token-Abfragen zu verwenden, aber dies erfordert Kenntnisse darüber, wie AD organisiert ist.

  • Die LDAP-Stammbasis ist dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1

==> Wenn Ihr Unternehmen beispielsweise die DNS-Domäne "meine-firma.com" besitzt und Ihre Windows-Domäne "Mitarbeiter" ist, dann lautet Ihre Stammdatenbasis dc=Mitarbeiter,dc=meine-firma,dc=com

  • Benutzer und Benutzergruppen werden unter cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 gespeichert (bitte beachten Sie, dass dies nicht ou=users ist);
  • Active Directory Gruppen:
    • Gruppenobjekte enthalten den DN der Mitglieder in ihrem Attribut "member";
    • Gruppenmitgliedschaften werden auch im memberOf-Attribut eines jeden Benutzereintrags gespeichert. Dieses Attribut enthält die DNs der Gruppen, denen der Benutzer angehört;
    • Einige Gruppen befinden sich in CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
      • Zum Beispiel: cn=Administrator,CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;

In manchen Fällen ist es nicht so einfach, ein Active Directory abzufragen. Daher finden Sie hier eine Beispielkonfiguration zum Abrufen einiger Informationen zu einem Active Directory:

//Verbindung zum Active Directory 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'] = "none"; // Bei den meisten AD-LDAP-Servern ist die Verschlüsselung standardmäßig nicht eingestellt
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\user ";
$ldap_server[$serverId]['bindpw'] = "userpassword";
//$ldap_server[$serverId]['binddn'] = "CN=user,OU=user_group,DC=xxx ,DC=yyy"; Dies funktioniert nicht mit Active Directory, deshalb müssen Sie „domain\\user“ verwenden
//Hier ist eine Beispielabfrage zum Abrufen aller aktiven Benutzer eines Active Directory:
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Mitarbeiter mit einem aktivierten Konto';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514) ))';
//(!(userAccountControl=514)) Sie können Active Directory nicht nach einem aktiven Benutzer fragen, aber Sie können nach einem nicht inaktiven Benutzer fragen
$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'] = ''; // Leer lassen für automatische Token-Generierung durch phpsv
$ldap_queries[$query_id]['sprache'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//Gruppenfilterung war im Active Directory nicht möglich, Sie müssen das memberOf-Attribut eines Benutzers hinzufügen. Hier ist eine Beispielabfrage zum Abrufen aller aktiven Benutzer, die Mitglied der Gruppe „samplegroup“ im Active Directory sind:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ ldap_queries[$query_id]['name'] = 'Alle Mitglieder der Beispielgruppe';
$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'] = ''; // Leer lassen für automatische Token-Generierung durch phpsv
$ldap_queries[$query_id]['sprache'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';

Ein weiteres Beispiel für eine Benutzerabfrage:

 
$ldap_queries[$query_id]['userfilter'] = '(&(''objectCategory=Person''')(objectClass=''user''')(!('''userAccountControl=514' '')))'; // AD erkennt aktivierte Konten nicht auf normale Weise, daher prüfen wir stattdessen, ob Benutzer nicht deaktiviert sind
  • Erwägen Sie, wie in der Konfigurationsdatei vorgeschlagen, (!(email=*)) zu Ihren Benutzerfiltern hinzuzufügen, um Benutzer ohne E-Mail-Adresse zu ignorieren.

Beispiel für eine Gruppenabfrage:

$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Domain Admins))'; // AD verwendet nicht den Standardattributnamen für Gruppen, also verwenden Sie stattdessen dieses Beispiel.

Weitere Informationen zur Active Directory LDAP-Struktur finden Sie unter Active Directory Architecture und [1] (Bibliothek/cc223122.aspx Technische Spezifikation für Active Directory).