LimeSurvey mit LDAP

Hi Tobias,
ich fürchte, dass ich es gar nicht so genau ausprobiert habe wie du. Bei mir war in der Konfig das LDAP-Modul aktiviert. Damit konnten sich User anmelden und der Account wurde offenbar auch erzeugt. Das wurde auch auf der Anmeldeseite zu limesurvey deutlich: da kann man dann LDAP oder internal database auswählen. Diese User konnten dann auch direkt an einer Umfrage teilnehmen. Ob sie auch eine eigene Umfrage erstellen konnten, habe ich nicht ausprobiert. Ich nehme es aber an, da das sicher nur eine Einstellung der Rechte ist?

Die Einschränkung auf die LDAP-Gruppen für gewisse Um-/Abfragen habe ich dann aber tatsächlich mit den o.g. Eintragungen der Gruppenfilter in der …/application/config/ldap.php hinbekommen. Die gid habe ich pro Jahrgang dort eingetragen.

In Sachen docker bin ich übrigens lange nicht so weit wie du. Mal sehen, ob ich deinen Vorsprung noch irgendwann einholen kann…

Bis später,
Michael

Hi,

ich bin auch gerade dabei LimeSurvey einzurichten.
Um den Thread bis hierhin zusammenzufassen:

  • Anmelden an LimeSurvey und
  • Umfragenutzer zu importieren

sind zwei unterschiedliche Dinge.
Um z.B. alle Lehrer als Teilnehmer zu importieren ändert man die Datei application/config/ldap.php wie folgt ab:

<?php
/*
 * LimeSurvey
 * Copyright (C) 2007-2011 The LimeSurvey Project Team / Carsten Schmitz
 * All rights reserved.
 * License: GNU/GPL License v2 or later, see LICENSE.php
 * LimeSurvey is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 *
 */

/*********** LDAP Parameters and Functions ***********************
 *
 *  - First define your ldap servers and remember the serverId
 *  - Then define your ldap_query and 'attach' it to the serverId
 ******************************************************************/

/*********************************************/
/* LDAP servers                              */
/*********************************************/
putenv("LDAPTLS_REQCERT=never");
$serverId = 0;
// Define the server DNS name or IP Address
// If encryption is enabled, make sure the name given here
// corresponds to the certificate's identity
$ldap_server[$serverId]['server'] = "ldaps://10.16.1.1";

// Define the TCP port on which the LDAP server is listenning
// This should be 389 for standard LDAP servers
// or 636 for standard LDAPS connections
$ldap_server[$serverId]['port'] = "636";

// Define the ldap protocol to use
// 'ldapv2' and 'ldapv3' are supported
$ldap_server[$serverId]['protoversion'] = "ldapv3";

// Define the encryption method to use
// 'ldaps' is supported for 'ldapv2' servers
// 'start-tls' is supproted for 'ldapv3' servers
// 'none' is supproted for no encryption at all
// Don't forget to setup your CA's certificate in
// the openldap ldap.conf file
$ldap_server[$serverId]['encrypt'] = "none";

// Define the referral option
// 'false' is recommended for ActiveDirectory servers
$ldap_server[$serverId]['referrals'] = false;

// Define the encoding used by the Ldap directory
// You may omit this parameter (let it commented out)
// as the default value, 'utf-8', should work for most installations.
// However, Active Directory in West Europe may use 'cp850'.
// $ldap_server[$serverId]['encoding'] = 'utf-8';

// Define the authentication used to bind to the directory
// We currently support simple authentication
// If anonymous bind must be performed, comment the following two lines
// Note that Active Directory (AD) usually requires authentication before
// you are authorized to read its content. Remeber as well that user's DN
// in AD are in the form of CN=username,CN=Users,DC=WindowsDomainName,DC=mycompany,DC=org
//
#$ldap_server[$serverId]['binddn']      = "uid=mybinduser,dc=mycompany,dc=org";
#$ldap_server[$serverId]['bindpw']      = "AsecretPassword";

/********* Copy for more definitions *****
 $serverId++;
 $ldap_server[$serverId]['server'] = "ldap.mycompany.org";
 $ldap_server[$serverId]['port'] = "389";
 $ldap_server[$serverId]['protoversion'] = "ldapv3";
 $ldap_server[$serverId]['encrypt'] = "start-tls";
 $ldap_server[$serverId]['referrals'] = false;
 $ldap_server[$serverId]['binddn']      =       "uid=mybinduser,dc=mycompany,dc=org";
 $ldap_server[$serverId]['bindpw']      =       "AsecretPassword";
 *****************************************/

/**********************************************************************/
/* Predefined Queries for Token Imports                               */
/*                                                                    */
/* This sample query definition is just an fake theme: do not      */
/* expect it to do something intelligent on your directory            */
/* Instead have a look at the online documentation:                   */
/* - Section Installation, paragraph LDAP_Settings                     */
/* And for Active Directory tips:                                     */
/* - Section Installation FAQ, paragraph                               */
/*   How_do_I_configure_LDAP_settings_to_work_with_Active_Directory_  */
/**********************************************************************/

$query_id = 0;

// First define the serverId on which you want to run the query
$ldap_queries[$query_id]['ldapServerId'] = 0;

// Give a name that will appear on the user interface
$ldap_queries[$query_id]['name'] = 'Alle Lehrer';

// Define the ldap base used for user searches
$ldap_queries[$query_id]['userbase'] = 'ou=accounts,dc=gymneureut,dc=local';

// Define the user filter to apply
// Must begin with '(' and end with ')'
// Note that for AD, checking the 'active' status of a user is done with the following filter:
// "(&(objectCategory=Person)(objectClass=user)(!(userAccountControl=514)))"
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=*)(gidnumber=10000))';

// Define how deep under the userbase you want to search
// 'sub' means: search on the entire subtree
// 'one' means: only search 1 level under the userbase
// 'base' means: only search the userbase DN entry
$ldap_queries[$query_id]['userscope'] = 'sub';

// Define the user's attribute that provides the firstname
// do not use capital letters in the attribute name
// for instance use 'givenname' and not 'givenName'
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';

// Give the user's attribute that provides the lastname
// do not use capital letters in the attribute name
$ldap_queries[$query_id]['lastname_attr'] = 'sn';

// Give the user's attribute that provides the email address
// do not use capital letters in the attribute name
// If multivalued, only the first entry is read
$ldap_queries[$query_id]['email_attr'] = 'mail';


// Optionnally give the user's attributes that provides the
// token, language, attr1 and attr2 piece of information
// do not use capital letters in the attribute name
// if unused, leave empty or comment the lines
$ldap_queries[$query_id]['token_attr'] = ''; // Leave empty for Auto Token generation bu phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';


/********
 $query_id++;
 //Copy previous definition lines
 ********/


//DO NOT CHANGE BELOW HERE --------------------

return array('ldap_server' => $ldap_server, 'ldap_queries' => $ldap_queries);
~                                                                                         

Hi Sven,

vollkommen richtig. Hab das im IRC von limesurvey auch schon bemängelt, dass manche Stunden brauchen, um das herauszufinden.

Mein Stand der Dinge ist:

  • Anmelden an LimeSurvey: Das kann man natürlich auf „Lehrer“ beschränken oder jeder LDAP-user kann sich anmelden. (* siehe unten)

    Das verstehe ich z.B. nicht. Wie Sven richtig sagte, bisher geht es um Benutzer im LimeSurvey-System. „Diese User konnten … an einer Umfrage teilnehmen“ involviert den zweiten Schritt: survey participants in einer Umfrage anlegen. Ich kann mir nur vorstellen, dass du per config/ldap.php wie sven und du bereits zeigten die LDAP-Auswahl auf Schüler einschränken konntest und dann im Webfrontend als Teilnehmer anlegen konntest - nachdem du das gemacht hast, konnten die vielleicht teilnehmen, das könnte sein (ohne Zugangsschlüssel vermutlich).

  • Umfragenutzer importieren: das steuert man über config/ldap.php und ich gebe recht, dass es ganz nützlich wäre, klassenweise Schüler hinzuzufügen. Wenn Michael recht hat, dann braucht man als Schüler keine zusätzlichen Zugangsschlüssel und kann bei der Umfrage teilnehmen, wenn man wie in Punkt 1 genannt sich auch als User am System angemelden kann. Ansonsten geht auch sehr gut: Teilnehmer per CSV oder LDAP-Abfrage hinzufügen und dann Token/Zugangsschlüssel generieren.

So das war jetzt auch noch nix neues, aber zwei Hinweise habe ich noch:

  • Will man Lehrern das Recht an einer Umfrage vergeben, müssen die vorher im Limesurvey-System sein. D.h. sie müssen sich einmal bei limesurvey angemeldet haben ODER ich kann sie (painfully) von Hand ins System aufnehmen. Ich habe keine Möglichkeit gefunden (weder remote-API, noch direkt in die Datenbank schreiben) diese LDAP-Lehrer als Benutzer des Systems vorher anzulegen. Das einzige was wohl funktioniert, ist das Lehrer nach dem ersten Mal anmelden gleich Umfragen erstellen können, wenn Grant survey creation permission to automatically created users angetickt ist (in der DB heißt das automaticsurveycreation=1. Fazitär: In moodle (so höre ich) sind die Rollenzuweisungen und Rechtevergaben viel? feiner möglich. Wer also dort Umfrage flexibel machen kann, könnte auch dort sich umschauen.
  • Will man den Lehrern noch etwas helfen, dann kann man sich eines Tricks bedienen, um Klassen zu filtern: man nimmt das Feld „email“, z.b. so:


Dann kann man nach Klasse sortieren, in dem man in dem Filter-Feld z.B. k2 schreibt, dann sieht man nur noch alle Schüler der k2 und ob sie die Umfrage gemacht haben oder nicht.
Natürlich habe ich vorher beim Import ins Feld „email“ die jeweilige Klasse eingetragen… Langversion für so ein Vorhaben muss ich noch dokumentieren, weil das schon ein größerer Sch… ist.
Der Filter funktioniert bei mir nicht in älteren Versionen von limesurvey.

VG, tobias

Hallo Michael,

ich verstehe das wirklich nicht und kann es nicht nachstellen.
Bei Teilnehmereinstellung einer beliebigen Umfrage, kann ich entweder „Öffentliche Registrierung“ einschalten, dann kommt immer die Maske, sich mit Namen und Email anzumelden oder ich lasse das sein, dann kommt "Um an dieser Umfrage teilzunehmen, benötigst Du einen gültigen Zugangsschlüssel. " Ich verstehe nicht, wie du es hinbekommen hast, dass ein Schüler sich „anmeldet“ und dann auch direkt an einer Umfrage teilnehmen kann. Wie kriegst du das hin?
Das „anmelden“ kenne ich nur über den link: http://domäne/limesurvey/admin während bei der Übersichtsseite http://domäne/limesurvey es keine Möglichkeit zur Anmeldung gibt.

Viele Grüße, Tobias

Hi Tobias.
Also ich sehe die Sache so:
Man muss den Link zu limesurvey/admin gar nicht kennen. Eigenlich hat man es mit (anonymen) Umfragen zu tun. Den eingeschränkten Zugriff kann man entweder erreichen, indem man Zugangsschlüssel erzeugt (mit Zufallspasswort) – oder aber man lässt eine LDAP-Gruppe an der Umfrage teilnehmen. Dann wiederum kann man einstellen, ob man vollständig anonyme Ergebnisse haben will oder nicht. Den Backend-Login benötigt eigentlich kein Teilnehmer – es sei denn, dass er selbst Umfragen erstellen will. Daher ist auf der Frontend-Seite auch gar kein “Anmelden”-Button zu finden!

Ich habe eine Test-Umfrage erstellt – wenn ich Zugangsschlüssel erzeuge (entweder völlig zufällig oder aber für eine LDAP-Gruppe) wird das vorher abgefragt; ansonsten kann jeder teilnehmen (was aber auch noch nicht völlige Anonymität garantiert – kann man aber in den Umfrage-Einstellungen anklicken)

Was dich (glaube ich?) bei der ganzen Sache verwirrt: Jemand, der sich im Backend anmeldet, muss nicht automatisch auch in der Lage sein, Umfragen ausfüllen zu dürfen!
Das sind zwei Paar Schuhe. Umgekehrt kann jemand, der an einer Umfrage teilnehmen darf (weil er einen Zugangsschlüssel erhalten hat) noch lange keine eigene Umfrage erstellen, weil er sich nicht im Backend anmelden kann.
Jetzt klarer?
Michael

Hi Michael,

danke, klarer.
Aber:

Wie machst du das, eine LDAP-Gruppe an der Umfrage teilnehmen zu lassen: Ich kenne nur, Zugangsschlüssel für sie zu erzeugen, wie du es im Absatz darunter auch schreibst. Gibt es noch einen anderen Weg?
VG, Tobias

Warum benötigst du noch einen anderen Weg??

Hi,

nein, brauche ich nicht, nur deine Aussage oben:

hat suggeriert, dass die User sich mit ihrem Passwort an limesurvey anmelden und dann direkt an einer für die User erstellten Umfrage teilnehmen können.

Ich hatte gehofft, dass du also eine Möglichkeit hast, dass sich die Schüler mit ihrem Schulkonto anmelden und dann gleich die Umfrage ausfüllen können. Dass das Anmelden und Ausfüllen zwei verschiedene Paar Schuhe sind, ist mir jetzt ja klar.
Wenn das so gewesen wäre, dann wären Zugangsschlüssel für eine (sowieso) nicht anonyme Umfrage wie meine Projekttage nicht nötig. Zudem wären die SuS gezwungen ihr Schulpasswort zu kennen.

Vg, Tobias

Über ldapv3 sind wir uns einig.
Allerdings passt dein „ldaps://…“ und das „636“ nicht zusammen mit dem encrypt: none.

Funktioniert das so bei dir?
VG, Tobias

ich revidiere: Bei mir funktioniert das auch so mit „encrypt: none“. Das macht keinen Sinn, aber egal.

Ich stelle noch fest:
„ldaps://server.domain.de“ funktioniert, aber „server.domain.de“ funktioniert nicht mit 636 und start-tls.
Dagegen funktioniert „server.domain.de“ mit 389 und egal ob start-tls oder none in der encrypt-variable steht.

ich gehe also davon aus, dass
„ldaps://server.domain.de“ und Port 636 die bevorzugte funktionierende Variante ist,
„ldap://server.domain.de“ und Port 389 auch eine funktionierende Variante ist
und dass die Variable „encrypt“ zur Zeit keine Rolle spielt.

VG, Tobias

super valuable. Best man!

Ja, hast Recht, das war irreführend bzw muss ich das dann nochmal prüfen…

Hi zusammen,

wenn ich das jetzt für LMN mache, dann kann ich ein kleines Detail patchen:

  • Das Flag „Grant survey creation permission to automatically created users“ macht Sinn für alle Benutzer, denke ich.
  • Ich würde gerne ein Flag integrieren, dass die sich neu anmeldenen User gleich noch mehr können, z.B. andere Umfragen sehen (ich stelle mir z.B. vor, dass nur Lehrer die Benutzer sind und daher gleich die Umfragen und Umfrageergebnisse von anderen sehen wollen)
  • oder dass die User die Umfragen von anderen lesen, bearbeiten, löschen, exportieren können,
  • oder dass die User gleich superadmins sind.

in der ini-Datei würde stehen:
should_users_read_other_surveys=1
should_users_manage_other_surveys=1
should_users_be_superadmins=1

Wenn Schüler auch die User sind, dann machen die beiden letzten Flags vermutlich keinen Sinn.

Für Lehrer könnte eine der Einstellungen Sinn machen.

Alle diese Einstellungen kann man im Nachhinein noch manuell ändern, aber mir geht es darum, was automatisch beim ersten einloggen festgelegt wird.

Wenn jemand eine sinnvollere Kombination von flags finden will, hier ist die Liste der Flags, die man vergeben kann,

mein Vorschläge wären:

  • ein kreuz bei „umfragen – anlegen“
  • alle kreuze bei „umfragen“
  • alle kreuze nahezu überall

Hi Tobias.
Ok, dann hast du die entscheidende Stelle also gefunden! Super!
Die Idee ist gut – kann ein Lehrer dennoch weiterhin auch Umfragen erstellen, die nur er selbst einsehen kann? Oder anders gefragt: ist diese Einstellung global für alle oder später auch noch individuell pro Umfrage änderbar?

Bis später,
Michael

Hi Michael,
worum es mir jetzt geht, ist was man global einstellen sollte, so dass es für die 0815-Schule passt – und weil ich kein Bock habe noch mal 80 Kollegen von Hand die Rechte zu meiner Umfrage zu geben.
Also ist die Antwort: Die Kollegen/User hätten später auch dieselben globalen Rechte, nicht nur für eine Umfrage.
Natürlich kann man zuerst allen Kollegen/Usern globale Rechte geben und später von Hand alle globalen Rechte wieder zurücknehmen.

Andersherum: Du kannst es auch lassen wie es jetzt ist: ein User kann selbst Umfragen erstellen, die nur er (und der superadmin) sehen kann. Für diese und andere Umfragen kann jeder Umfragenersteller von Hand Rechte an andere vergeben.
Ich bin eher dafür, dass jeder Lehrer/User zumindest die “einsehen” Rechte für alle Umfragen standardmäßig bekommt. Entspricht mehr der sharing-Mentalität mit weniger Rücksicht auf die Privatsphäre bzw. Urheberrecht.

(es gibt tatsächlich Lehrer die ein Urheberrecht für ihr Tafelbild in Anspruch nehmen würden…)

Ok, finde ich nachvollziehbar und sinnvoll … --> make it so :slight_smile:

grrr… scheiss… limesurvey legt manche tabellen in der DB erst an, wenn sich der admin angemeldet hat und die webseite ansurft. wie unprofessionell… was weiß ich…