Configuration de base d'Apache
Fichiers de configuration
La configuration du service Apache se fait par l’édition de fichiers au format texte chargés par le programme httpd, dont le principal porte le nom de httpd.conf ou apache.conf en fonction du type d’installation (compilation ou package de distribution).
Selon la méthode d’installation, sa localisation diffère en fonction des choix lors de la compilation :
-
Pour une installation à partir des packages de la distribution Debian/Linux, le fichier principal apache2.conf se trouve dans le répertoire /etc/apache2.
-
Pour une installation à partir des sources, le fichier httpd.conf se situe dans le répertoire défini par la variable sysconfdir lors de la génération de la configuration de compilation avec la commande configure.
Exemples :
-
/opt/prod/apache2.4/conf/httpd.conf avec un sysconfdir et un prefix définis à /opt/prod/apache2.4.
-
/etc/apache2.4 avec un sysconfdir modifié dans un "layout".
D’autres fichiers de configuration peuvent être inclus via la directive Include, et seront chargés au démarrage (ou redémarrage) du service.
Des fichiers .htaccess peuvent se trouver dans les répertoires des sites web, permettant également de spécifier une configuration qui leur est propre, applicable uniquement sur ces derniers.
1. Syntaxe des fichiers de configuration
Les fichiers de configuration sont constitués de directives données ligne par ligne, les arguments des directives étant séparés par des espaces.
Toute ligne précédée...
Première configuration
Pour débuter dans la configuration du service, les actions menées ci-après seront basées sur l’installation d’Apache à partir des sources (cf. chapitre Installation d’Apache sous Linux - Compilation depuis les sources).
Un fichier de configuration généré lors de l’installation est disponible dans le répertoire défini par le sysconfdir, soit dans le cas présent, dans le répertoire /etc/apache2.4.
Dans un premier temps, observer les processus httpd afin de savoir sous quel compte Unix le service est exécuté.
marty@vm-compilation-eni:~$ sudo ps fu -C httpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME
COMMAND
root 2902 0.0 0.1 74580 2120 ? Ss 06:31 0:00
/opt/prod/apache2.4/bin/httpd -k start
daemon 2903 0.0 0.1 298276 2104 ? Sl 06:31 0:00
\_ /opt/prod/apache2.4/bin/httpd -k start
daemon 2904 0.0 0.1 298276 2544 ? Sl 06:31 0:00
\_ /opt/prod/apache2.4/bin/httpd -k start
daemon 2905 0.0 0.1 298276 2108 ? Sl 06:31 0:00
\_ /opt/prod/apache2.4/bin/httpd -k start
Comme vous pouvez le constater, le service est lancé par l’utilisateur root, puis d’autres processus sont lancés sous l’utilisateur daemon.
La première chose à faire consiste donc à créer un nouvel utilisateur et son groupe pour le service Apache.
1. Création du compte utilisateur d’Apache
Il s’agit de créer un groupe et un compte Unix sur le serveur :
marty@vm-compilation-eni:~$ sudo addgroup --gid 10000 httpd24
Ajout du groupe « httpd24 » (GID 10000)...
Fait.
marty@vm-compilation-eni:~$ sudo adduser --uid 10000 --gid 10000
--home /opt/prod/apache2.4/ --no-create-home --disabled-password
--disabled-login --shell /bin/false httpd24
Ajout de l'utilisateur « httpd24 » ...
Ajout du nouvel utilisateur « httpd24 » (10000) avec...
Directives Core
1. Directives globales
a. ServerRoot
Directive permettant de définir la racine du répertoire d’installation du serveur.
Syntaxe : ServerRoot chemin de répertoire
Défaut : ServerRoot /usr/local/apache
Contexte : configuration du serveur.
ServerRoot /opt/prod/apache2.4
b. ServerName
Directive permettant de définir le nom d’hôte et le port de requête auquel le serveur doit être en mesure de répondre.
Syntaxe : ServerName [protocole://]nom de domaine entièrement qualifié[:port]
Contexte : configuration du serveur, serveur virtuel.
ServerName eni.labs
Cette directive peut également être indiquée dans une directive VirtualHost, dans le cadre d’une utilisation de serveurs virtuels basés sur le nom.
c. ServerAlias
Description : autres noms d’un serveur utilisables pour atteindre des serveurs virtuels à base de nom.
Syntaxe : ServerAlias nom serveur [nom serveur] ...
Contexte : serveur virtuel.
ServerAlias *.eni.labs
d. ServerAdmin
Directive permettant de définir l’adresse e-mail de contact de l’administrateur, que le serveur affichera (sur la page web) en cas d’erreur lors de la requête.
Syntaxe : ServerAdmin On|Off|EMail
Défaut : ServerAdmin Off
Contexte : configuration du serveur, serveur virtuel, répertoire, .htaccess.
ServerAdmin sysadmin@eni.labs
e. ServerSignature
Directive permettant de définir un pied de page lors de l’affichage d’une page d’erreur.
Syntaxe : ServerSignature On|Off|EMail
Défaut : ServerSignature Off
Contexte : configuration du serveur, serveur virtuel, répertoire, .htaccess.
ServerSignature On
f. ServerTokens
Directive permettant de définir la valeur de l’en-tête Server de la réponse du serveur.
Syntaxe : ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
Défaut : ServerTokens Full
Contexte : configuration du serveur.
ServerTokens Full (défaut) :
Server: Apache/2.4.12 (Unix) PHP/5.4.4
ServerTokens Prod[uctOnly] :
Server: Apache
ServerTokens Major :
Server: Apache/2
ServerTokens Minor :
Server: Apache/2.4
ServerTokens Min :
Server: Apache/2.4.12
ServerTokens OS :
Server: Apache/2.4.12 (Unix)
g. LoadModule
Directive faisant partie du module mod_so (module static), elle permet le chargement dynamique de modules supplémentaires.
Syntaxe : LoadModule module nom-fichier...
Modules
L’une des forces d’Apache est sa modularité. En effet, il existe de nombreux modules permettant d’effectuer divers traitements en fonction des besoins.
Lors de la création du premier fichier de configuration, nous avons vu qu’il était nécessaire d’activer certains modules pour le bon fonctionnement du service httpd.
La liste des modules disponibles étant importante, voici ci-après une liste des principaux modules utilisés dans des projets web. Pour avoir la liste complète de ces derniers, rendez-vous sur la page officielle dédiée à cet effet : http://httpd.apache.org/docs/current/mod/
Il s’agit des modules officiels du projet Apache. Il existe néanmoins des modules « tiers » maintenus par d’autres sociétés ou communautés.
1. mod_unixd (unixd_module)
LoadModule unixd_module modules/mod_unixd.so
Ce module permet de gérer les aspects de sécurité de base d’Apache.
a. User
Directive permettant de préciser l’utilisateur sous lequel le serveur va traiter les requêtes.
Syntaxe : User utilisateur unix
Défaut : User #-1
Contexte : configuration du serveur.
User httpd24
Il est conseillé de créer un compte utilisateur dédié à l’exécution du service Apache ne devant avoir accès qu’aux ressources qu’il doit pouvoir servir.
En aucun cas il ne doit pouvoir accéder à d’autres fichiers, tels que les fichiers système ou ceux de comptes utilisateurs n’ayant rien à voir avec un projet web.
b. Group
Directive permettant de préciser le groupe sous lequel le serveur va traiter les requêtes.
Syntaxe : Group groupe unix
Défaut : Group #-1
Contexte : configuration du serveur.
Group httpd24
c. ChrootDir
Directive permettant de préciser le répertoire dans lequel Apache doit se positionner au démarrage après avoir effectué un chroot (change root).
Syntaxe : ChrootDir chemin-répertoire
Défaut : Non défini
Contexte : configuration du serveur.
Le chroot permet l’isolation de l’exécution d’Apache, et ainsi, d’éviter la compromission complète du système en cas d’intrusion.
ChrootDir /opt/chroot
d. Suexec
Directive permettant...
Cas concret : création de l’environnement applicatif d’un site web
Pour illustrer l’utilisation des modules et directives de configuration vus précédemment, l’environnement applicatif ci-dessous va être mis en place :
-
Site 1 nommé « app1 », situé dans le répertoire /opt/app1.
La configuration d’Apache :
-
Fichier principal de configuration : etc/apache2.4/httpd.conf.
-
Fichiers de configuration des modules : /etc/apache2.4/conf/modules.conf.
-
Fichiers de configuration des directives globales : /etc/apache2.4/conf/server.conf.
-
Fichiers de configuration du MPM Event (par défaut) : /etc/apache2.4/conf/mpm-event.conf.
-
Localisation des fichiers journaux (logs) : /var/log/apache2.4/.
-
Localisation des fichiers de configuration pour les applications : /etc/apache2.4/vhosts/.
-
Un premier fichier Virtualhost app1 : app1_vhost.conf.
Les répertoires conf et vhosts étant spécifiques à notre environnement (pour illustrer cet exemple), il est donc nécessaire de les créer.
marty@vm-compilation-eni:~$ sudo mkdir /etc/apache2.4/
{conf,vhosts}
L’arborescence est à présent la suivante :
marty@vm-compilation-eni:~$ sudo tree -d /etc/apache2.4/
/etc/apache2.4/
├── conf
├── extra
├── original
│ └── extra
└── vhosts
5 directories
1. Fichier de configuration principal d’Apache httpd.conf
Ci-dessous, la base de notre fichier de configuration httpd.conf :
ServerRoot /opt/prod/apache2.4
ServerName vm-compilation-eni
ServerAdmin sysadmin@eni.labs
ServerSignature On
ServerTokens Minor
# Liste des modules activés
Include /etc/apache2.4/conf/modules.conf
# Directives globales
Include /etc/apache2.4/conf/server.conf
# Directives du MPM par défaut (Event)
Include /etc/apache2.4/conf/mpm-event.conf
# DocumentRoot par defaut du serveur Apache
DocumentRoot /opt/prod/apache2.4/htdocs/
# Accès à la racine interdit par defaut
<Directory />
Options None ...