PhpLDAPAdmin sous Apache
PhpLDAPAdmin a été installé initialement à l'aide de la commande apt-get
, cf Installation PhpLDAPAdmin, sur une machine Ubuntu. L'avantage a été d'installer les différentes dépendances, mais également de mettre en place une logique d'installation ainsi que la configuration de Apache.
L'objectif de cet article est de détailler la configuration du serveur Apache pour servir cette application.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Déploiement site sécurisé
La procédure décrite ci dessous permet de mettre à disposition l'application avec un accès sécurisé HTTPS
avec utilisation d'un certificat fourni par Let's Encrypt et un tutoriel très bien réalisé.
L'application sera rendue disponible depuis un sous domaine du domaine principal en mode HTTP
et HTTPS
.
Pour rappel, l'application est déployée dans le répertoire /var/opt/phpldapadmin
.
Préparation environnement
Certbot sera utilisé pour demander et renouveler le certificat du site. Dans son fonctionnement, le process essaye d'accéder à un .well-known
à la racine du site. De plus, une bonne pratique consiste à fournir un répertoire racine pour les sites déployés sous Apache
. Le répertoire /var/www/ldapadmin
est alors créé, ainsi que le sous répertoire .well-known
.
#sudo mkdir -p /var/www/ldapadmin/.well-known
Pour cette application, il n'est pas nécessaire de placer un fichier index.html
, avec un contenu vide, dans le répertoire racine, soit /var/www/selfpwd
, car la racine sera sur l'instance qui possède déjà un fichier index.php
.
Un fichier robots.txt
y est placé avec les directives indiquant aux moteurs de recherche de ne rien indexer.
User-agent: *
Disallow: /
Les permissions mises en place donnent un accès uniquement aux compte du serveur, soit www-data
.
#sudo find /var/www/ldapadmin -type f -exec chmod 0600 {} \; #sudo find /var/www/ldapadmin -type d -exec chmod 0700 {} \; #sudo chown -R www-data:www-data /var/www/ldapadmin
Configuration HTTP
Dans un premier temps, une configuration temporaire est mise en place pour accéder de façon non sécurisé.
Un fichier ldapadmin
est créé dans le répertoire /etc/apache2/sites-available
avec le contenu suivant.
<VirtualHost *:80>
ServerAdmin contact-email@dummy.net
ServerName www.ldapadmin.dummy.net
DocumentRoot /var/opt/phpldapadmin/htdocs
DirectoryIndex index.php
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/ldapadmin_error.log
CustomLog ${APACHE_LOG_DIR}/ldapadmin_access.log combined
Alias /.well-known "/var/www/ldapadmin/.well-known"
<Directory "/var/opt/ldapadmin/.well-known">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Alias /robots.txt "/var/www/common/robots.txt"
Include /etc/apache2/conf-available/phpldapadmin_root.conf
</VirtualHost>
Les directives sur l'accès à /.well-known
et robots.txt
permettent de servir les éléments depuis la racine /var/www/ldapadmin
.
Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled
.
#sudo ln -s /etc/apache2/sites-available/ldapadmin /etc/apache2/sites-enabled/008-ldapadmin.conf
Le nom du lien, à savoir 008-ldapadmin.conf
, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache
.
Il suffit de relancer la configuration d'Apache
pour qu'elle soit prise en compte.
#sudo apache2ctl graceful
Certificat
L'application est à présent disponible avec l'URL http://www.ldapadmin.dummy.net. Un certificat va être demandé à l'aide de Certbot.
#sudo certbot certonly --webroot -w /var/www/ldapadmin -d www.ldapadmin.dummy.net --email contact-email@dummy.net Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator webroot, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for www.ldapadmin.dummy.net Using the webroot path /var/www/ldapadmin for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/www.ldapadmin.dummy.net/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/www.ldapadmin.dummy.net/privkey.pem Your cert will expire on 2018-05-16. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Le certificat est stocké dans le répertoire /etc/letsencrypt/live/www.ldapadmin.dummy.net/
.
Configuration HTTPS
Le certificat étant disponible, la configuration HTTPS
peut être mise en place.
Un fichier ldapadmin-dummy-ssl
est créé dans le répertoire /etc/apache2/sites-available
avec le contenu suivant.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin contact-email@dummy.net
ServerName www.ldapadmin.dummy.net
DocumentRoot /var/opt/phpldapadmin/htdocs
DirectoryIndex index.php
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/ldapadmin_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/ldapadmin_ssl_access.log combined
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.ldapadmin.dummy.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.ldapadmin.dummy.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.ldapadmin.dummy.net/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Alias /.well-known "/var/www/ldapadmin/.well-known"
<Directory "/var/opt/ldapadmin/.well-known">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Alias /robots.txt "/var/www/common/robots.txt"
Include /etc/apache2/conf-available/phpldapadmin_root.conf
</VirtualHost>
</IfModule>
Les configurations mises en place dans le précédent paragraphe sont reprises et complétées avec la déclaration du certificat et l'alias. De plus, une directive sur le Header
est mise en place afin de forcer l'accès au maximum l'accès sur le site sécurisé.
Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled
.
#sudo ln -s /etc/apache2/sites-available/ldapadmin-dummy-ssl /etc/apache2/sites-enabled/009-ldapadmin-ssl.conf
Le nom du lien, à savoir 009-ldapadmin-ssl.conf
, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache
.
Enfin la configuration HTTP
, sur le port 80
, est modifiée pour forcer la redirection sur l'accès en HTTPS
. Le précédent fichier ldapadmin
est modifié avec lu contenu suivant.
<VirtualHost *:80>
ServerAdmin contact-email@dummy.net
ServerName www.ldapadmin.dummy.net
DocumentRoot /var/opt/phpldapadmin/htdocs
DirectoryIndex index.php
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/ldapadmin_error.log
CustomLog ${APACHE_LOG_DIR}/ldapadmin_access.log combined
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
Il suffit de relancer la configuration d'Apache
pour que les modifications soient prises en compte.
#sudo apache2ctl graceful
Configuration simple
Apache 2.2.X
Celle-ci est réalisée à travers le lien phpldapadmin
, dans le répertoire /etc/apache2/conf.d
, pointant sur le fichier /etc/phpldapadmin/apache.conf
dont le contenu est:
# Define /phpldapadmin alias, this is the default
<IfModule mod_alias.c>
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
</IfModule>
# You can also use phpLDAPadmin as a VirtualHost
# <VirtualHost *:*>
# ServerName ldap.example.com
# ServerAdmin root@example.com
# DocumentRoot /usr/share/phpldapadmin
# ErrorLog logs/ldap.example.com-error.log
# CustomLog logs/ldap.example.com-access.log common
# </VirtualHost>
<Directory /usr/share/phpldapadmin/htdocs/>
DirectoryIndex index.php
Options +FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<IfModule mod_mime.c>
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
php_flag magic_quotes_gpc Off
php_flag track_vars On
php_flag register_globals Off
php_value include_path .
php_value memory_limit 32M
</IfModule>
<IfModule !mod_php5.c>
<IfModule mod_actions.c>
<IfModule mod_cgi.c>
AddType application/x-httpd-php .php
Action application/x-httpd-php /cgi-bin/php5
</IfModule>
<IfModule mod_cgid.c>
AddType application/x-httpd-php .php
Action application/x-httpd-php /cgi-bin/php5
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</Directory>
Apache 2.4.6
Lors d'une mise à jour du serveur Ubuntu, Apache a été mis à jour en version 2.4.6. Cependant, l'impact est assez conséquent, car il y a eu une refonte de la gestion des droits d'accès.
La première modification concerne l'emplacement de la déclaration de PhpLDAPAdmin. Le lien phpldapadmin
ne devait plus être déposé dans conf.d
mais dans conf-enabled
, sous /etc/apache2
, suite à la version 2.4.6. De plus, le nom du lien doit se terminer par .conf
pour être pris en compte au démarrage de Apache. Les commandes suivantes ont été exécutées:
#sudo ln -s /etc/phpldapadmin/apache.conf /etc/apache2/conf-enabled/phpldapadmin.conf #sudo rm /etc/apache2/conf.d/phpldapadmin
Cependant, cela ne suffit pas, la configuration des droits d'accès ayant été modifiée, les messages d'erreurs étant constatés dans les logs de Apache:
[Thu Dec 26 10:47:38.374771 2013] [authz_core:error] [pid 2528] [client 82.230.154.123:58319] AH01630: client denied by server configuration: /var/opt/phpldapadmin-1.2.2/htdocs/
La configuration a donc été modifiée afin d'être de nouveau opérationnelle:
# Define /phpldapadmin alias, this is the default
<IfModule mod_alias.c>
Alias /phpldapadmin /var/opt/phpldapadmin/htdocs
</IfModule>
# You can also use phpLDAPadmin as a VirtualHost
# <VirtualHost *:*>
# ServerName ldap.example.com
# ServerAdmin root@example.com
# DocumentRoot /usr/share/phpldapadmin
# ErrorLog logs/ldap.example.com-error.log
# CustomLog logs/ldap.example.com-access.log common
# </VirtualHost>
<Directory /var/opt/phpldapadmin/htdocs/>
DirectoryIndex index.php
Options +FollowSymLinks
AllowOverride None
# Old configuration for APACHE 2.2
# Order allow,deny
# Allow from all
Require all granted
<IfModule mod_mime.c>
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
php_flag magic_quotes_gpc Off
php_flag track_vars On
php_flag register_globals Off
php_value include_path .
php_value memory_limit 32M
</IfModule>
<IfModule !mod_php5.c>
<IfModule mod_actions.c>
<IfModule mod_cgi.c>
AddType application/x-httpd-php .php
Action application/x-httpd-php /cgi-bin/php5
</IfModule>
<IfModule mod_cgid.c>
AddType application/x-httpd-php .php
Action application/x-httpd-php /cgi-bin/php5
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</Directory>
Configuration pour un domaine spécifique
Au fil du temps, le serveur Apache a été enrichi sur la machine, afin de servir différents domaine. La première configuration mise en place rendait l'application disponible sur l'ensemble des domaines, chose qui n'était pas souhaitée. Le lien mis en place sous /etc/apache2/conf-enabled
a été "déplacé" sous /etc/apache2/conf-available
, afin d'être dans la philosophie du paquet Ubuntu. Le contenu du ce répertoire est le suivant.
#sudo rm /etc/apache2/conf-enabled/phpldapadmin.conf #sudo ln -s /etc/phpldapadmin/apache.conf /etc/apache2/conf-available/phpldapadmin.conf #sudo ls -l /etc/apache2/conf-available -rw-r--r-- 1 root root 315 juil. 20 2013 charset.conf -rw-r--r-- 1 root root 465 août 15 23:34 httpd.conf -rw-r--r-- 1 root root 3224 juil. 20 2013 localized-error-pages.conf -rw-r--r-- 1 root root 189 juil. 20 2013 other-vhosts-access-log.conf lrwxrwxrwx 1 root root 29 août 16 17:01 phpldapadmin.conf -> /etc/phpldapadmin/apache.conf -rw-r--r-- 1 root root 2190 juil. 20 2013 security.conf -rw-r--r-- 1 root root 455 janv. 7 2014 serve-cgi-bin.conf
A présent, la configuration Apache pour PhpLDAPAdmin est mise à disposition et il reste à la référencer à l'aide de l'instruction Include
dans le fichier de configuration du domaine souhaité, à savoir /etc/apache2/sites-enabled/003-dev-dummy-ssl.conf
, pour le domaine en https www.dev.dummy.net
.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin contact-email@dummy.net
ServerName www.dev.dummy.net
DocumentRoot /var/www/dev
DirectoryIndex index.php
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/dev_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/dev_ssl_access.log combined
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
# Old configuration for APACHE 2.2
# Order allow,deny
# Allow from all
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/dev.dummy.pem
SSLCertificateKeyFile /etc/ssl/private/dummy.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
<Directory /var/www/dev>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
# Old configuration for APACHE 2.2
# Order allow,deny
# Allow from all
Require all granted
</Directory>
Include /etc/apache2/conf-available/phpldapadmin.conf
</VirtualHost>
</IfModule>