Vue d'ensemble de la configuration

Backends

La configuration de LemonLDAP::NG est stockée dans un backend permettant à tous les modules d'y accéder.

Note that all LL::NG components must have access:

  • au système de stockage de la configuration
  • au système de stockage des sessions

Detailed configuration backends documentation is available here.

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

Manager

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”.

Cet utilisateur n'est plus disponible si on change de backend d'authentification ! Ne pas oublier de changer la règle d'accès à l'hôte virtuel du manager pour autoriser les nouveaux administrateurs.

If you can not access the Manager anymore, you can unprotect it by editing lemonldap-ng.ini and changing the protection parameter:

[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

Voir la documentation de protection du manager pour savoir comment utiliser les modules d'Apache ou LL::NG pour gérer l'accès au manager.

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 effectue ensuite quelques tests sur la configuration et affiche les éventuelles erreurs et avertissements. La configuration n'est pas sauvée en cas d'erreur.

Éditeur de configuration en mode text

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 doit être lancé par root, il utilisera ensuite le compte et le groupe d'Apache pour accéder à la configuration.

Ce script utilise la commande système editor, qui est liée à l'éditeur favori. Pour le changer :

update-alternatives --config editor

The configuration is displayed as a big Perl Hash, that you can edit:

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

Interface en ligne de commande (CLI)

This an experimental tool that may evolve in next releases.

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

Ce script doit être lancé par root, il utilisera ensuite le compte et le groupe d'Apache pour accéder à la configuration.

Pour connaître les actions possibles, lancer :

/usr/share/lemonldap-ng/bin/lemonldap-ng-cli help

You can force an update of configuration cache with:

/usr/share/lemonldap-ng/bin/lemonldap-ng-cli update-cache

To get information about current configuration:

/usr/share/lemonldap-ng/bin/lemonldap-ng-cli info

To view a configuration parameter, for example portal URL:

/usr/share/lemonldap-ng/bin/lemonldap-ng-cli get portal

To set a parameter, for example domain:

/usr/share/lemonldap-ng/bin/lemonldap-ng-cli set domain example.org

You can use accessors (options) to change the behavior:

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

Apache

LemonLDAP::NG ne gère pas la configuration d'Apache

LemonLDAP::NG fournit 3 fichiers de configuration Apache :

See how to deploy them.

Mod Perl must be loaded before LemonLDAP::NG, so include configuration after the mod_perl LoadModule directive.

Portail

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>
    # 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>
# 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>

Manager

L'hôte virtuel du manager est utilisé pour servir l'interface de configuration et la documentation locale. It is run as a FastCGI application:

    # FASTCGI CONFIGURATION
    # ---------------------
 
    # 1) URI management
    RewriteEngine on
 
    RewriteRule "^/$" "/psgi/manager-server.fcgi" [PT]
    # For performances, you can delete the previous RewriteRule line after
    # puttings html files: simply put the HTML results of differents modules
    # (configuration, sessions, notifications) as manager.html, sessions.html,
    # notifications.html and uncomment the 2 following lines:
    # DirectoryIndex manager.html
    # RewriteCond "%{REQUEST_FILENAME}" "!\.html$"
 
    # REST URLs
    RewriteCond "%{REQUEST_FILENAME}" "!^/(?:static|doc|fr-doc|lib).*"
    RewriteRule "^/(.+)$" "/psgi/manager-server.fcgi/$1" [PT]
 
    Alias /psgi/ /var/lib/lemonldap-ng/manager/psgi/
 
    # 2) FastCGI engine
 
    # You can choose any FastCGI system. Here is an example using mod_fcgid
    # mod_fcgid configuration
    <Directory /var/lib/lemonldap-ng/manager/psgi/>
        SetHandler fcgid-script
        Options +ExecCGI
    </Directory>
 
    # If you want to use mod_fastcgi, replace lines below by:
    #FastCgiServer /var/lib/lemonldap-ng/manager/psgi/manager-server.fcgi
 
    # Or if you prefer to use CGI, use /psgi/manager-server.cgi instead of
    # /psgi/manager-server.fcgi and adapt the rewrite rules.

Configuration interface access is not protected by Apache but by LemonLDAP::NG itself (see lemonldap-ng.ini).

Agent (Handler)

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
 
    # Configuration reload mechanism (only 1 per physical server is
    # needed): choose your URL to avoid restarting Apache when
    # configuration change
    <Location /reload>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/8
        PerlHeaderParserHandler Lemonldap::NG::Handler->reload
    </Location>
 
    # Uncomment this to activate status module
    #<Location /status>
    #    Order deny,allow
    #    Deny from all
    #    Allow from 127.0.0.0/8
    #    PerlHeaderParserHandler Lemonldap::NG::Handler->status
    #</Location>
 
</VirtualHost>

Then, to protect a standard virtual host, the only configuration line to add is:

PerlHeaderParserHandler Lemonldap::NG::Handler

Nginx

LemonLDAP::NG does not manage Nginx configuration

LemonLDAP::NG ships 3 Nginx configuration files:

See how to deploy them.

LL::NG FastCGI server must be loaded separately.

Portail

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;
    fastcgi_split_path_info ^(.*\.pl)(/.+)$;
  }
 
  index index.pl;
 
  location / {
    try_files $uri $uri/ =404;
  }
}
  # SOAP functions for sessions management (disabled by default)
  location /index/adminSessions {
    deny all;
  }
 
  # SOAP functions for sessions access (disabled by default)
  location /index.pl/sessions {
    deny all;
  }
 
  # SOAP functions for configuration access (disabled by default)
  location /index.pl/config {
    deny all;
  }
 
  # SOAP functions for notification insertion (disabled by default)
  location /index.pl/notification {
    deny all;
  }
    # SAML2 Issuer
    rewrite ^/saml/metadata /metadata.pl last;
    rewrite ^/saml/.* /index.pl last;
 
    # CAS Issuer
    rewrite ^/cas/.* /index.pl;
 
    # OpenID Issuer
    rewrite ^/openidserver/.* /index.pl last;
 
    # OpenID Connect Issuer
    rewrite ^/oauth2/.* /index.pl last;
    rewrite ^/.well-known/openid-configuration$ /openid-configuration.pl last;

Manager

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;
  }
}

By default, configuration interface access is not protected by Nginx but by LemonLDAP::NG itself (see lemonldap-ng.ini).

Agent (Handler)

Nginx handler is provided by the LemonLDAP::NG FastCGI server.

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;
  } 
 
  # Other requests                                                    
  location / {                                                         
    deny all;
  } 
 
  # Uncomment this if status is enabled                                
  #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;
  #}
}

Then, to protect a standard virtual host, you must insert this (or create an included file):

  # Insert $_user in logs
  include /etc/lemonldap-ng/nginx-lmlog.conf;
  access_log /var/log/nginx/access.log lm_combined;
 
  # Internal call to FastCGI server
  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;
  }
 
  # Client requests
  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;
 
    # Set REMOTE_USER (for FastCGI apps only)
    #fastcgi_param REMOTE_USER $lmremote_user
 
    ##################################
    # PASSING HEADERS TO APPLICATION #
    ##################################
 
    # IF LUA IS SUPPORTED
    #include /path/to/nginx-lua-headers.conf
 
    # ELSE
    # Set manually your headers
    #auth_request_set $authuser $upstream_http_auth_user;
    #proxy_set_header Auth-User $authuser;
    # OR
    #fastcgi_param HTTP_AUTH_USER $authuser;
 
    # Then (if LUA not supported), change cookie header to hide LLNG cookie
    #auth_request_set $lmcookie $upstream_http_cookie;
    #proxy_set_header Cookie: $lmcookie;
    # OR
    #fastcgi_param HTTP_COOKIE $lmcookie;
 
    # Insert then your configuration (fastcgi_* or proxy_*)

Rechargement de la configuration

Comme les agents gardent leur configuration en cache, lorsque la configuration est changée elle doit être mise à jour dans les agents. An Apache restart will work, but LemonLDAP::NG offers the mean to reload them through an HTTP request. Le rechargement de la configuration sera effectif en moins de 10 minutes.

After configuration is saved by Manager, LemonLDAP::NG will try to reload configuration on distant Handlers by sending an HTTP request to the servers. The servers and URLs can be configured in Manager, General Parameters > reload configuration URLs: keys are server names or IP the requests will be sent to, and values are the requested URLs.

Ces paramètres peuvent être surchargés dans le fichier ini de LemonLDAP::NG ini file, à la section apply.

Une URL par serveur physique est nécessaire, car les agents partagent le même cache de configuration pour chaque serveur physique.

The reload target is managed in Apache or Nginx configuration, inside a virtual host protected by LemonLDAP::NG Handler (see bellow examples in Apache→handler or Nginx→Handler).

You must allow access to declared URLs to your Manager IP.

Fichier local

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

Il est nécessaire de connaître le nom technique du paramètre de configuration pour le faire. Se référer à la liste des paramètres pour le trouver.