Directives apache

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Référence de configuration
Fichiers httpd.conf, conf.d/*.conf
Contexte SELinux httpd_sys_content_t et apparentés
Voir aussi Apache · Commandes apache · SELinux

Référence des principales directives de configuration d'Apache HTTP Server, regroupées par thème, suivie des éléments de contexte SELinux spécifiques à Apache (labels de fichiers et booléens). Toutes ces directives se placent dans httpd.conf ou dans un fichier inclus sous conf.d/ ; certaines peuvent aussi être utilisées dans un .htaccess si AllowOverride l'autorise (voir Htaccess).

Identité et arborescence du serveur

  • ServerRoot — répertoire racine du serveur ; les autres chemins relatifs en dépendent.
  • ServerTokens — niveau de détail de la version affichée sur les pages d'erreur
 (OS, Prod, Major, Minor, Min,
 Full). Mettre Prod en production pour limiter la fuite d'information.
  • ServerSignature — ajoute (ou non) un pied de page avec la version du serveur et
 l'adresse de ServerAdmin sur les pages d'erreur et listings de répertoire
 (On, Off, EMail).
  • ServerAdmin — adresse e-mail de contact affichée sur les pages d'erreur.
  • ServerName / UseCanonicalName — nom canonique du (virtual) host, utilisé pour
 générer les URL absolues.
  • DocumentRoot — racine des fichiers servis pour le site.
  • PidFile — fichier contenant le PID du processus maître (sert aussi de verrou).

Processus, connexions et threads

  • Listen — port (et éventuellement adresse IP, en environnement multi-hébergé) sur
 lequel écouter.
  • Timeout — délai maximal d'attente pour l'envoi/la réception d'une requête.
  • KeepAlive — active les connexions persistantes (une connexion TCP sert plusieurs
 requêtes).
  • KeepAliveTimeout — délai avant fermeture d'une connexion persistante inactive.
  • MaxKeepAliveRequests — nombre maximal de requêtes servies sur une connexion
 persistante (0 = illimité).
  • StartServers — nombre de processus enfants créés au démarrage.
  • MinSpareServers / MaxSpareServers — bornes basse/haute du nombre de processus
 enfants inactifs maintenus en réserve.
  • ServerLimit — plafond dur du nombre de processus enfants configurables.
  • MaxClients (renommé MaxRequestWorkers depuis Apache 2.4) — nombre maximal de
 requêtes traitées simultanément ; au-delà, les requêtes suivantes attendent en file.
  • MaxRequestsPerChild (MaxConnectionsPerChild depuis 2.4) — nombre de
 requêtes traitées par un processus enfant avant son recyclage (limite les fuites mémoire).
  • MinSpareThreads / MaxSpareThreads / ThreadsPerChild — réglages fins des
 threads par processus enfant, pertinents avec le MPM worker ou event.
  • User / Group — utilisateur/groupe système sous lequel tournent les processus
 enfants (jamais root).
  • LoadModule — charge un module (authentification, réécriture, exécution de scripts…).
  • Include — inclut le contenu d'un autre fichier de configuration.

Répertoires, accès et contenu

  • Options — fonctionnalités activées pour un répertoire (ExecCGI,
 FollowSymLinks, Includes, Indexes,
 MultiViews, SymLinksIfOwnerMatch…).
  • AllowOverride — autorise (ou non) les fichiers .htaccess à surcharger
 certaines directives (voir Htaccess).
  • Order / Allow / Deny — contrôle d'accès historique (module
 mod_access_compat) ; sous Apache 2.4, remplacé par Require
 (à privilégier — Order/Allow/Deny sont dépréciées).
  • UserDir — active/désactive les répertoires personnels (~user/).
  • DirectoryIndex — fichier(s) servi(s) par défaut pour un répertoire
 (index.html par défaut).
  • AccessFileName — nom du fichier de configuration par répertoire, .htaccess
 par défaut.
  • Satisfy — combine restrictions d'authentification et de contrôle d'accès hôte
 (Any ou All).
  • Alias — fait correspondre une URL à un répertoire hors de DocumentRoot.
  • ScriptAlias — équivalent d'Alias pour les scripts exécutables (CGI).
  • IndexOptions, AddIcon, AddIconByType, AddIconByEncoding,
 DefaultIcon — apparence des listings de répertoire générés automatiquement.
  • ReadmeName / HeaderName — fichiers affichés en pied/haut de listing.
  • IndexIgnore — motifs de fichiers exclus d'un listing.
  • DAVLockDB — fichier de verrous pour le module WebDAV.

MIME, encodage et langues

  • TypesConfig — chemin du fichier mime.types.
  • DefaultType — type MIME par défaut si aucune correspondance n'est trouvée.
  • MIMEMagicFile — fichier de signatures utilisé pour deviner un type MIME par contenu.
  • AddType — associe une extension à un type MIME.
  • AddHandler — associe une extension à un gestionnaire (scripts, langages multiples…).
  • AddOutputFilter — associe une extension à un filtre de sortie.
  • AddLanguage / LanguagePriority / ForceLanguagePriority — négociation de
 contenu multilingue.
  • AddDefaultCharset — jeu de caractères par défaut des réponses.

Journalisation

  • HostNameLookups — résolution DNS inverse des IP clientes avant journalisation
 (coûteux en performance, généralement désactivé — Off).
  • ErrorLog — chemin du fichier de log d'erreurs.
  • LogLevel — verbosité des messages de log.
  • LogFormat — format personnalisé des entrées de log.
  • CustomLog — fichier de log personnalisé, avec son propre format et emplacement.

Directives spécifiques aux virtual hosts

  • NameVirtualHost (obsolète depuis Apache 2.4 — l'hébergement par nom se configure
 directement via Listen + <VirtualHost>) — adresse IP et port
 partagés par plusieurs virtual hosts.
  • ServerAdmin, DocumentRoot, ServerName, ErrorLog, CustomLog
 déclinaisons par virtual host des directives globales décrites plus haut.

Contextes SELinux Apache

Sous une distribution avec SELinux en mode enforcing (voir SELinux), Apache ne peut lire/écrire que les chemins portant les labels attendus :

/etc/httpd, /etc/httpd/conf, /etc/httpd/conf.d, /var/run/httpd   httpd_config_t
/usr/lib64/httpd/modules                                        httpd_modules_t
/var/log/httpd                                                  httpd_log_t
/var/www, /var/www/html, /var/www/cgi-bin (contenu statique)     httpd_sys_content_t
/var/www/cgi-bin (exécution des scripts)                         httpd_sys_script_exec_t

Pour appliquer un label à une arborescence hors des chemins standards (par exemple un DocumentRoot personnalisé) :

chcon -R -u system_u /chemin/vers/le/site/
chcon -R -t httpd_sys_content_t /chemin/vers/le/site/
semanage fcontext -a -s system_u -t httpd_sys_content_t "/chemin/vers/le/site(/.*)?"
restorecon -Rv /chemin/vers/le/site/

Pour un répertoire de scripts CGI exécutables :

semanage fcontext -a -s system_u -t httpd_sys_script_exec_t "/chemin/vers/le/site/cgi-bin(/.*)?"

Booléens SELinux utiles à Apache

Quelques booléens fréquemment ajustés (lister l'état courant avec getsebool -a | grep httpd, modifier avec setsebool -P nom_booleen on) :

  • httpd_can_network_connect — autorise Apache à ouvrir des connexions sortantes
 (nécessaire par exemple pour un proxy applicatif ou un appel API depuis un script).
  • httpd_can_network_connect_db — autorise la connexion à une base de données distante.
  • httpd_can_network_relay — autorise l'usage d'Apache comme proxy.
  • httpd_can_sendmail — autorise l'envoi de mail depuis les scripts servis par Apache.
  • httpd_enable_cgi — autorise l'exécution de scripts CGI.
  • httpd_enable_homedirs — autorise l'accès aux répertoires personnels via
 UserDir.
  • httpd_unified — assouplit l'ensemble des accès lecture/écriture/exécution pour les
 fichiers déjà labellisés httpd_t (pratique en dépannage, à éviter en usage
 permanent : trop permissif).
  • httpd_use_nfs / httpd_use_cifs — autorise Apache à servir du contenu depuis un
 partage réseau NFS/Samba (voir NFS, Samba).
  • httpd_execmem — autorise l'exécution de code nécessitant des pages mémoire à la fois
 inscriptibles et exécutables (normalement désactivé, réduit le risque d'exploitation de
 débordement de tampon).
  • httpd_tmp_exec — autorise l'exécution de scripts depuis /tmp.
  • allow_httpd_anon_write / allow_httpd_sys_script_anon_write — autorise
 l'écriture dans les chemins labellisés public_content_rw_t.

Avant de désactiver SELinux par frustration, audit2allow (à partir des messages de /var/log/audit/audit.log) permet généralement d'identifier précisément quel label ou quel booléen manque.

Voir aussi