La configuration de LemonLDAP::NG est stockée dans un backend permettant à tous les modules d'y accéder.
La configuration détaillée des backends de stockage est disponible ici.
Par défaut, la configuration est stockée dans des fichiers, donc l'accès par le réseau n'est en général pas possible. Pour contourner ce problème, utiliser SOAP pour l'accès à la configuration ou un service réseau tel une base de donnée SQL ou un annuaire LDAP.
Le backend de configuration peut être indiqué dans le fichier local de configuration, dans la section configuration
.
Par exemple, pour configurer le backend de configuration File
:
[configuration] type=File dirName = /usr/local/lemonldap-ng/data/conf
La majeure partie de la configuration peut être réalisée via le manager LemonLDAP::NG (par défaut http://manager.example.com).
Par défaut, le manager est protégé et n'autorise que l'utilisateur de démonstration “dwho”.
SI l'accès au manager est perdu, on peut le déprotéger en éditant lemonldap-ng.in
et en changeant le paramètre protection
:
[manager]
# Manager protection: by default, the manager is protected by a demo account.
# You can protect it :
# * by Apache itself,
# * by the parameter 'protection' which can take one of the following
# values :
# * authenticate : all authenticated users can access
# * manager : manager is protected like other virtual hosts: you
# have to set rules in the corresponding virtual host
# * rule: <rule> : you can set here directly the rule to apply
# * none : no protection
Le manager affiche des branches principales :
La configuration de LemonLDAP::NG est essentiellement une structure clef/valeur, ainsi le manager présente toutes les clefs en un arbre structuré. Un click sur la clef affiche la valeur associée.
Lorsque toutes les modifications sont effectuées, cliquer sur Sauver
pour enregistrer la configuration.
LemonLDAP::NG fournit un script qui permet d'éditer la configuration sans interface graphique, ce script se nomme lmConfigEditor
et se trouvedans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin :
/usr/share/lemonldap-ng/bin/lmConfigEditor
Ce script utilise la commande système editor
, qui est liée à l'éditeur favori. Pour le changer :
update-alternatives --config editor
La configuration est affichée en une grande table de hachage Perl, qu'on peut éditer :
$VAR1 = { 'ldapAuthnLevel' => '2', 'notificationWildcard' => 'allusers', 'loginHistoryEnabled' => '1', 'key' => 'q`e)kJE%<&wm>uaA', 'samlIDPSSODescriptorSingleSignOnServiceHTTPPost' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;', 'portalSkin' => 'pastel', 'failedLoginNumber' => '5', ... };
Si une modification est effectuée, la configuration est sauvée avec un nouveau numéro. Sinon, la configuration courante est gardée.
LemonLDAP::NG fournit un script qui autorise l'édition d'éléments de configuration en mode non-interactif. Ce script se nomme lemonldap-ng-cli
et se trouve dans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin:
/usr/share/lemonldap-ng/bin/lemonldap-ng-cli
Pour connaître les actions possibles, lancer :
/usr/share/lemonldap-ng/bin/lemonldap-ng-cli help
On peut forcer la mise à jour du cache de la configuration :
/usr/share/lemonldap-ng/bin/lemonldap-ng-cli update-cache
Pour obtenir quelques informations sur la configuration actuelle :
/usr/share/lemonldap-ng/bin/lemonldap-ng-cli info
Pour voir un paramètre de configuration, par exemple l'URL du portail :
/usr/share/lemonldap-ng/bin/lemonldap-ng-cli get portal
Pour définir un paramètre, par exemple le domaine :
/usr/share/lemonldap-ng/bin/lemonldap-ng-cli set domain example.org
On peut utiliser des « accessors » (options) pour modifier le comportement :
Quelques exemples:
/usr/share/lemonldap-ng/bin/lemonldap-ng-cli -cfgNum 10 get exportedHeaders/test1.example.com /usr/share/lemonldap-ng/bin/lemonldap-ng-cli -yes 1 set notification 1 /usr/share/lemonldap-ng/bin/lemonldap-ng-cli -sep ',' get macros,_whatToTrace
LemonLDAP::NG fournit 3 fichiers de configuration Apache :
Voir comment les déployer.
LoadModule
de mod_perl.
Dans l'hôte virtuel du portail se trouve plusieurs éléments de configuration :
ServerName auth.example.com # DocumentRoot DocumentRoot /usr/local/lemonldap-ng/htdocs/portal/ <Directory /usr/local/lemonldap-ng/htdocs/portal/> Order allow,deny Allow from all Options +ExecCGI </Directory> # Perl script <Files *.pl> SetHandler perl-script PerlResponseHandler ModPerl::Registry </Files> # Directory index <IfModule mod_dir.c> DirectoryIndex index.pl index.html </IfModule>
# Gestion des fonctions SOAP functions pour la gestion des sessions (désactivée par défaut) <Location /index.pl/adminSessions> Order deny,allow Deny from all </Location> # Fonctions SOAP pour l'accès aux sessions (désactivées par défaut) <Location /index.pl/sessions> Order deny,allow Deny from all </Location> # Fonctions SOAP pour accéder à la configuration (désactivées par défaut) <Location /index.pl/config> Order deny,allow Deny from all </Location> # Fonctions SOAP pour insérer des notifications (désactivées par défaut) <Location /index.pl/notification> Order deny,allow Deny from all </Location>
mod_rewrite
):# Fournisseur d'identité SAML2 <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/saml/metadata /metadata.pl RewriteRule ^/saml/.* /index.pl </IfModule> # Fournisseur d'identité CAS <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/cas/.* /index.pl </IfModule> # Fournisseur d'identité OpenID <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/openidserver/.* /index.pl </IfModule> # OpenID Connect Issuer <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/oauth2/.* /index.pl RewriteRule ^/.well-known/openid-configuration$ /openid-configuration.pl </IfModule> # Get Issuer <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/get/.* /index.pl </IfModule>
# Meilleures performances sous ModPerl::Registry # A décommenter pour augmenter les performances du portail <Perl> require Lemonldap::NG::Portal::SharedConf; Lemonldap::NG::Portal::SharedConf->compile( qw(delete header cache read_from_client cookie redirect unescapeHTML)); # Décommenter cette ligne si le menu Lemonldap::NG est utilisé require Lemonldap::NG::Portal::Menu; # Décommenter cette ligne si les fonctions SOAP du portail sont utilisées require SOAP::Lite; </Perl>
L'hôte virtuel du manager est utilisé pour servir l'interface de configuration et la documentation locale. S'il est lancé comme application FastCGI :
# CONFIGURATION FASTCGI # --------------------- # 1) Gestion de l'URI RewriteEngine on RewriteRule "^/$" "/psgi/manager-server.fcgi" [PT] # Pour de meilleures performances, on peut effacer la ligne RewriteRule après # avoir mis les fichiers html : mettre simplement le résultat HTML des différents modules # (configuration, sessions, notifications) en manager.html, sessions.html, # notifications.html, puis décommenter les 2 lignes suivantes : # DirectoryIndex manager.html # RewriteCond "%{REQUEST_FILENAME}" "!\.html$" # URLs REST RewriteCond "%{REQUEST_FILENAME}" "!^/(?:static|doc|fr-doc|lib).*" RewriteRule "^/(.+)$" "/psgi/manager-server.fcgi/$1" [PT] Alias /psgi/ /var/lib/lemonldap-ng/manager/psgi/ # 2) Moteur FastCGI # On peut utiliser n'importe quel système FastCGI. Ici un exemple utilisant mod_fcgid # configuration mod_fcgid <Directory /var/lib/lemonldap-ng/manager/psgi/> SetHandler fcgid-script Options +ExecCGI </Directory> # Pour utiliser mod_fastcgi, remplacer les lignes suivantes par : #FastCgiServer /var/lib/lemonldap-ng/manager/psgi/manager-server.fcgi # Ou pour utiliser simplement CGI, utiliser /psgi/manager-server.cgi à la place de # /psgi/manager-server.fcgi et adapter les règles de réécriture.
L'accès à l'interface de configuration n'est pas protégée par Apache mais par LemonLDAP::NG lui-même (voir lemonldap-ng.ini
) :
PerlOptions +GlobalRequest PerlModule Lemonldap::NG::Handler
ErrorDocument 403 http://auth.example.com/?lmError=403 ErrorDocument 500 http://auth.example.com/?lmError=500 ErrorDocument 503 http://auth.example.com/?lmError=503
<VirtualHost *:80> ServerName reload.example.com # Mécanisme de rechargement de la configuration (un seul par serveur physique # est nécessaire): choisir une URL pour éviter d'avoir à redémarrer Apache lorsque # la configuration change <Location /reload> Order deny,allow Deny from all Allow from 127.0.0.0/8 PerlHeaderParserHandler Lemonldap::NG::Handler->reload </Location> # Décommenter ceci pour activer le module de statut #<Location /status> # Order deny,allow # Deny from all # Allow from 127.0.0.0/8 # PerlHeaderParserHandler Lemonldap::NG::Handler->status #</Location> </VirtualHost>
Protéger ensuite un hôte virtuel standard, la seul ligne de configuration à ajouter est :
PerlHeaderParserHandler Lemonldap::NG::Handler
LemonLDAP::NG fournit 3 fichiers de configuration Nginx :
Voir comment les déployer.
Dans l'hôte virtuel du portail se trouve plusieurs éléments de configuration :
server { listen 80; server_name auth.example.com; root /var/lib/lemonldap-ng/portal/; location ~ \.pl(?:$|/) { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; fastcgi_param LLTYPE cgi; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; set $sn $request_uri; if ($sn ~ "^(.*)\?") { set $sn $1; } fastcgi_param SCRIPT_NAME $sn; fastcgi_split_path_info ^(.*\.pl)(/.+)$; } index index.pl; location / { try_files $uri $uri/ =404; } }
# Fonctions SOAP pour la gestion des sessions (désactivée par défaut) location /index/adminSessions { deny all; } # Fonctions SOAP pour l'accès aux sessions (désactivées par défaut) location /index.pl/sessions { deny all; } # Fonctions SOAP pour accéder à la configuration (désactivées par défaut) location /index.pl/config { deny all; } # Fonctions SOAP pour insérer des notifications (désactivées par défaut) location /index.pl/notification { deny all; }
# Fournisseur d'identité SAML2 rewrite ^/saml/metadata /metadata.pl last; rewrite ^/saml/.* /index.pl last; # Fournisseur d'identité CAS rewrite ^/cas/.* /index.pl; # Fournisseur d'identité OpenID rewrite ^/openidserver/.* /index.pl last; # Fournisseur d'identité OpenID-Connect rewrite ^/oauth2/.* /index.pl last; rewrite ^/.well-known/openid-configuration$ /openid-configuration.pl last; # Get Issuer rewrite ^/get/.* /index.pl;
L'hôte virtuel du manager est utilisé pour servir l'interface de configuration et la documentation locale.
server { listen 80; server_name manager.example.com; root /usr/share/lemonldap-ng/manager/; if ($uri !~ ^/(static|doc|fr-doc|lib|javascript)) { rewrite ^/(.*)$ /manager.psgi/$1 break; } location /manager.psgi { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; fastcgi_param LLTYPE manager; fastcgi_param SCRIPT_NAME /manager.psgi; } location / { index manager.psgi; try_files $uri $uri/ =404; } }
L'accès à l'interface de configuration n'est pas protégée par Nginx mais par LemonLDAP::NG lui-même (voir lemonldap-ng.ini
) :
Le handler Nginx est fourni par le serveur FastCGI LemonLDAP::NG.
error_page 403 http://auth.example.com/?lmError=403; error_page 500 http://auth.example.com/?lmError=500; error_page 503 http://auth.example.com/?lmError=503;
server { listen 80; server_name reload.example.com; root /var/www/html; location = /reload { allow 127.0.0.1; deny all; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; } # Autres requêtes location / { deny all; } # Décommenter ceci si le module de statut est activé #location = /status { # allow 127.0.0.1; # deny all; # include /etc/nginx/fastcgi_params; # fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; # fastcgi_param LLTYPE status; #} }
Pour protéger ensuite un hôte virtuel, il faut insérer ceci (ou créer un fichier à inclure) :
# Insérer $_user dans les journaux include /etc/lemonldap-ng/nginx-lmlog.conf; access_log /var/log/nginx/access.log lm_combined; # Appe interne au serveur FastCGI location = /lmauth { internal; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; fastcgi_pass_request_body off; fastcgi_param CONTENT_LENGTH ""; fastcgi_param HOST $http_host; fastcgi_param X_ORIGINAL_URI $request_uri; } # Requêtes clients location / { auth_request /lmauth; auth_request_set $lmremote_user $upstream_http_lm_remote_user; auth_request_set $lmlocation $upstream_http_location; error_page 401 $lmlocation; try_files $uri $uri/ =404; # Définir REMOTE_USER (pour les applications FastCGI seulement) #fastcgi_param REMOTE_USER $lmremote_user ###################################### # PASSER LES ENTÊTES À L'APPLICATION # ###################################### # SI LUA EST SUPPORTÉ #include /path/to/nginx-lua-headers.conf # SINON # Définir manuellement les en-têtes #auth_request_set $authuser $upstream_http_auth_user; #proxy_set_header Auth-User $authuser; # OU #fastcgi_param HTTP_AUTH_USER $authuser; # Ensuite (si LUA n'est pas supporté), changer l'en-tête Cookie pour masquer celui de LLNG #auth_request_set $lmcookie $upstream_http_cookie; #proxy_set_header Cookie: $lmcookie; # OU #fastcgi_param HTTP_COOKIE $lmcookie; # Insérer ensuite la configuration (fastcgi_* ou proxy_*)
Lorsque la configuration est sauvegardée par le manager, LemonLDAP::NG tente de recharger la configuration des agents distants en envoyant une requête HTTP aux serveurs. Les serveurs et URL peuvent être configurées dans le manager, Paramètres généraux
> URL de rechargement de la configuration
: les clefs sont les noms de serveurs ou les adresses IP à qui les requêtes seront envoyées, et les valeurs sont les URL à requêter.
Ces paramètres peuvent être surchargés dans le fichier ini de LemonLDAP::NG ini file, à la section apply
.
La cible reload
est gérée dans la configuration d'Apache, dans un hôte virtuel protégé par LemonLDAP::NG Handler (voir ci-dessous les exemple Apache→handler ou Nginx→Handler).:
La configuration LemonLDAP::NG peut être gérée par un fichier local au format INI. Le fichier est nommé lemonldap-ng.ini
et dispose des sections suivantes :
Lorsqu'un paramètre et fixé dans lemonldap-ng.ini
, il surcharge le paramètre issu de la configuration globale.
Par exemple, pour surcharger l'apparence du portail :
[portal] portalSkin = dark