Table of Contents

Drupal

Présentation

Drupal est un CMS écrit en PHP. Il peut utiliser des modules externes pour étendre ses fonctionnalités. L'un de ses modules peut être utilisé pour déléger l'authentification serveur au serveur web : Webserver Auth.

Installation

Télécharger et installer le module Webserver Auth, en le décompressant dans le répertoire modules/.

Configuration

Activation du module Drupal

Aller dans l'interface administration et activer le module Webserver Auth.

Hôte virtuel Drupal

Configurer l'hôte virtuel Drupal comme n'importe quel autre hôte virtuel protégé.

Si Drupal est protégé par un reverse-proxy LL::NG, convertir l'en-tête en variable d'environnement REMOTE_USER.
<VirtualHost *:80>
       ServerName drupal.example.com
 
       PerlHeaderParserHandler Lemonldap::NG::Handler
 
       ...
 
</VirtualHost>
server {
  listen 80;
  server_name drupal.example.com;
  root /path/to/application;
  # Requête interne d'authentification
  location = /lmauth {
    internal;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock;
    # Ignorer les données postées
    fastcgi_pass_request_body  off;
    fastcgi_param CONTENT_LENGTH "";
    # Conserver le nom d'hôte original
    fastcgi_param HOST $http_host;
    # Conserver la requête originale (le serveur LLNG va recevoir /llauth)
    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;
 
    ...
 
    include /etc/lemonldap-ng/nginx-lua-headers.conf;
  }
  location / {
    try_files $uri $uri/ =404;
  }
}

Hôte virtuel Drupal dans le manager

Aller dans le manager et créer un nouvel hôte virtuel pour Drupal.

Configurer simplement la règle d'accès.

Si LL::NG est utilisé par reverse-proxy, configurer l'en-tête Auth-User, aucun autre en-tête n'est utile.

Protéger seulement la page d'administration

Avec la solution ci-dessus, tout le site Drupal sera protégé, ainsi aucun accès anonyme ne sera autorisé.

Vous ne pouvez pas utiliser la règle unprotect car la navigation Drupal est basée sur des requêtes basées sur des attributs (?q=admin, ?q=user, etc.), et la règle unprotect ne fonctionne que sur des correspondances d'URL.

Vous pouvez créer un hôte virtuel particulier et utiliser le module rewrite d'Apache pour choisir entre le site ouvert et le protégé :

<VirtualHost *:80>
    ServerName drupal.example.com
 
    # DocumentRoot
    DocumentRoot /var/www/html/drupal/
    DirectoryIndex index.php
 
    # Redirect admin pages
    RewriteEngine On
    RewriteCond  %{QUERY_STRING} q=(admin|user)
    RewriteRule ^/(.*)$ http://admindrupal.example.com/$1 [R]
 
    LogLevel warn
    ErrorLog /var/log/httpd/drupal-error.log
    CustomLog /var/log/httpd/drupal-access.log combined
</VirtualHost>
<VirtualHost *:80>
    ServerName admindrupal.example.com
 
    # Protection SSO
    PerlHeaderParserHandler Lemonldap::NG::Handler
 
    # DocumentRoot
    DocumentRoot /var/www/html/drupal/
    DirectoryIndex index.php
 
    LogLevel warn
    ErrorLog /var/log/httpd/admindrupal-error.log
    CustomLog /var/log/httpd/admindrupal-access.log combined
</VirtualHost>