Actions

LDAP settings/de: Difference between revisions

From LimeSurvey Manual

(Created page with "=== Was ist mit Active Directory?===")
(Created page with "Active Directory (AD) ist eine Microsoft-Registrierung, die mithilfe des LDAP-Protokolls abgefragt werden kann.")
Line 114: Line 114:
=== Was ist mit Active Directory?===
=== Was ist mit Active Directory?===


Active Directory (AD) is a Microsoft registry that can be queried by using the LDAP protocol.
Active Directory (AD) ist eine Microsoft-Registrierung, die mithilfe des LDAP-Protokolls abgefragt werden kann.


It is then possible to use its content for LimeSurvey token queries, but this requires knowledge on how AD is organized.
It is then possible to use its content for LimeSurvey token queries, but this requires knowledge on how AD is organized.

Revision as of 16:38, 20 July 2023

  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ächsten Abschnitt
  • Oder Benutzer-DNs (z. B. groupofnames und groupofuniquenames). tun) ==> siehe unten

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

  • define $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:

  • define $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.

It is then possible to use its content for LimeSurvey token queries, but this requires knowledge on how AD is organized.

  • The LDAP root base is dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1

==> For instance, if your company owns the DNS domain 'my-company.com' and your Windows domain is 'employees', then your root base is dc=employees,dc=my-company,dc=com

  • Users and users-groups are stored below the cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (please note this is not ou=users);
  • Active Directory Groups:
    • Groups objects contain DN of members in their 'member' attribute;
    • Group memberships are also stored in the memberOf attribute of each user entry. This attribute contains DNs of groups the user belongs to;
    • some groups are in CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
      • For instance: cn=Administrator,CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;

In some cases it is not as easy to query an active directory so here is a sample configuration for getting some infomations of an active directory:

//Connection to the 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"; // Most AD LDAP servers will not have encryption set by default
$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"; this one will not work with active directory, that´s why you need to use "domain\\user"
//Here is a sample query for getting all active users of an active directory:
$query_id=0;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Staff with an enabled account';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514)))';
//(!(userAccountControl=514)) you are not able to ask active directory for an active user but you are able to ask for a non inactive user
$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'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
//Group filtering was not possible in active directory, you need to add the memberOf attribute of an user. Here is a sample query for getting all active users that are member of the group "samplegroup" in active directory:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'All members of 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'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';

Another example User query:

$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''user''')(!('''userAccountControl=514''')))'; // AD doesn't recognise enabled accounts in the normal way, so instead, we check users are not disabled
  • As suggested in the config file, consider adding (!(email=*)) to your user filters to ignore users with no email address.

Example group query:

$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Domain Admins))'; // AD doesn't use the standard attribute name for groups, so use this example instead.

Find more information about the Active Directory LDAP structure on Active Directory Architecture and Active Directory Technical Specification.