Protection d'un serveur Apache



Documents pareils
Appropriation d'un serveur Apache

2011 Hakim Benameurlaine 1

SERVEUR HTTP Administration d apache

UE5A Administration Réseaux LP SIRI

Configuration du serveur Web Apache. Master 1 STIC-Informatique 1

Le serveur Web : Apache

TP Service HTTP Serveur Apache Linux Debian

Apache 2.4 Installation et configuration

Maîtriser Apache. Benjamin Drieu. version

Module 7 : Configuration du serveur WEB Apache

CYBERGATE -TP-APACHE_2.DOC

Préparation d un serveur Apache pour Zend Framework

SERVEUR WEB LINUX LAMP. Raymond RAZAFIMAMONJY Administration LINUX / UNIX Chapitre 15

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

Installation et présentation du serveur Apache

Dans l'épisode précédent

Hébergement de site web Damien Nouvel

Table des matières Hakim Benameurlaine 1

Les serveurs WEBUne introduction

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

TP HTTP. Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A

INSTALLATION APACHE POUR WINDOWS (XP OU 2000)

Installation et configuration d Apache sous Linux RedHat 7.1. Pascal AUBRY Ambroise DIASCORN IFSIC Université de Rennes 1

Administration réseau sous Linux

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

APACHE 2.4. Installation et configuration. Nicolas MARTINEZ

Installation d OwnCloud 8.0 sous Debian Avec connexion des utilisateurs active directory et mise en place de HTTPS

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

Titre: Version: Dernière modification: Auteur: Statut: Licence:

LAMP : une nouvelle infrastructure LAMP. Une architecture modulaire. Installation

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Serveur Subversion Debian GNU/Linux

Installation d un hébergement Web à domicile

Serveur Web Apache - SSL - PHP Debian GNU/Linux

REPARTITION DE CHARGE LINUX

Tutoriel compte-rendu Mission 1

Installation Installation. Windows. Tout-en-un. Un livre de Wikilivres.

TD4 - Supervision et métrologie des réseaux. 1 Supervision des applications et services réseaux et des ressources locales

Le serveur web Apache

Serveurs et environnements de développement. Serveur Web

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

Présentation Serveur Apache et pour RePeGlio

Travaux Pratiques Introduction aux réseaux IP

Simple Database Monitoring - SDBM Guide de l'usager

Installation GLPI-OCSNG-SSL Linux Debian Sarge

FTP : File TRansfer Protocol => permets d envoyer des gros fichiers sur un serveur (ou de télécharger depuis le serveur)

ADF Reverse Proxy. Thierry DOSTES

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

table des matières Administration système

Serveurs de noms Protocoles HTTP et FTP

GUIDE D INSTALLATION DE L APPLICATION GECOL SUR

Procédure d'installation

Comment avoir le logiciel? Le serveur web APACHE peut être téléchargé gratuitement du site web de APACHE:

GUIDE D INSTALLATION. Portaneo Enterprise Portal version 4.0

Installation sur un serveur personnel

CGI et SSI. La programmation CGI. Sources. Objectifs. Qu'est ce qu'un programme CGI? CGI

CDS Invenio Installation et configuration de base

Installation et configuration de Vulture Lundi 2 février 2009

Séquence 8 - Bases des réseaux - suite Jean.Saquet@info.unicaen.fr, Gaetan.Richard@info.unicaen.fr

A. Laisser le navigateur Web choisir l'encodage approprié...35 B. Changer le jeu de caractères utilisé par défaut par le Serveur Web Apache2...

Administration Linux - Apache

TP création et publication d'un site web statique

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

ADF 2009 Sécurisation d applications PHP/MySQL

FreeNAS Shere. Par THOREZ Nicolas

Réaliser un inventaire Documentation utilisateur

Gérer ses environnements de développement avec Vagrant RMLL 2012

L3 informatique TP n o 2 : Les applications réseau

Internet. Web Sécurité Optimisation

1 / Introduction. 2 / Gestion des comptes cpanel. Guide débuter avec WHM. 2.1Créer un package. 2.2Créer un compte cpanel

SQUID P r o x y L i b r e p o u r U n i x e t L i n u x

Procédure d'installation du serveur Apache HTTPD pour Windows

(structure des entêtes)

Aubert Coralie, Ruzand Brice GTR 2002 Bonvarlet Manuel, Desroches Alexandre, Magnin Cyril DRT Notice technique 1

SUPERVISION DE RÉSEAU AVEC NAGIOS

Sauvegarder la base de données de Drupal avec le module Backup and Migrate

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

il chiffrer les flux d'authentification et les flux de données il n'y a pas de soucis d'ouverture de ports avec des modes actif/passif à gérer

Table des matières Hakim Benameurlaine 1

Différentes installations sur un serveur Windows 2000 ou 2003.

HelpAndManual_unregistered_evaluation_copy GESTIONNAIRE D'ALARMES CENTRALISE OPTIM'ALARM. Manuel d'utilisation

Serveur Mandataire SQUID

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

La double authentification dans SharePoint 2007

CAHIER DES CHARGES SITE WEB : Steve Mind Magicien Close-up & Mentaliste - 1 -

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

BTS SIO Dossier BTS. PURCHLA Romain

Petit guide pour l installation de CVW sous Linux

Installation de Zabbix

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

Request Tracker pour les Nuls. Yves Agostini - YVESAGO

Protocoles Applicatifs

Serveur d application WebDev

Protection des protocoles

Déploiement d OCS 1.02 RC2 sous Debian Etch 64

LES SERVEURS WEB. II. Apache2 III. IIS -> Internet Information Server IV. Sharepoint

Transcription:

Protection d'un serveur Apache Jacquelin Charbonnel - CNRS LAREMA (modifié M. Libes pour la formation ADF en DR12 Fév. 2009) ADF- Aide à la Détection des Faiblesses d'un site web Journées UREC - Montpellier - Septembre 2008 version 8

Introduction un serveur Apache fraîchement installé possède un niveau de sécurité «satisfaisant» au fil du temps : le nombre de documents croît, la configuration s'étoffe et est modifiée, la sécurité de l'ensemble diminue! Rajout de Virtual Hosts, de machines Virtuelles Installation de nouveaux logiciels web Ajouts de nouveaux répertoires et fichiers de test qu'on oublie Développement de scripts Possibilité de sysadmins différents Comment sécuriser le serveur Apache au fil du temps comment avoir une vue synoptique d'un serveur Apache en activité? comment évaluer le niveau de sécurité induit par la configuration en place? Problèmes plus importants si plusieurs webmaster ADF - DR12 CNRS Fév. 2009 2

Introduction Cet exposé A pour but de donner une vision de la sécurité «l'espace Web» sous contrôle d'apache, et le contenir se focalise sur quelques aspects de la configuration de base d'apache et de son environnement système sous Unix/Linux n'est pas un panorama des possibilités de configuration d'apache impactant la sécurité (391 directives de configuration pour Apache 2.2) n'a donc pas la prétention d'être complet ou exhaustif ADF - DR12 CNRS Fév. 2009 3

Vocabulaire Espace web (URL-space) : fichiers et répertoires du filesystem accessibles par HTTP Webmaster : un compte, déclaré sur le serveur, ayant des droits d'écriture sur une partie de l'espace web (hors pages perso) Utilisateur : un compte, déclaré sur le serveur, ayant au moins la possibilité d'écrire des pages perso ADF - DR12 CNRS Fév. 2009 4

Plan Généralités sur la configuration d'apache Déterminer l'espace web sous contrôle Contenir les débordements de l'espace web par défaut Restreindre l'espace web Identifier les scripts activables Contrôler le périmètre d'action des scripts Etanchéifier les territoires des webmasters ADF - DR12 CNRS Fév. 2009 5

Fichiers de configuration Un fichier de config principal /etc/apache2/apache2.conf sous contrôle de root hors de l'espace web Des fichiers de config inclus sous contrôle de root hors de l'espace web Des fichiers.htaccess, sous contrôle des webmasters dans l'espace web ADF - DR12 CNRS Fév. 2009 6

Fichiers de configuration root peut activer/désactiver/limiter l'usage des fichiers.htaccess Une modification du fichier de config principal nécessite un redémarrage d'apache... Alors que toute modification d'un.htaccess est prise en compte instantanément par le serveur L'activation des.htaccess implique un travail supplémentaire pour Apache (scruter les répertoires) ADF - DR12 CNRS Fév. 2009 7

Syntaxe de la configuration Fichier de configuration principal le nom par défaut est défini à la compil il peut être spécifié en ligne de commande Il contient des lignes de la forme : directive arguments <section> directive arguments directive arguments </section> <section> <section> directive arguments directive arguments </section> </section> ADF - DR12 CNRS Fév. 2009 8

Configuration d'apache Le paramétrage d'apache permet de désigner Des répertoires : <Directory> Des URL : <Location> Des fichiers : <Files> Des «Hôtes virtuels» (serveurs web virtuels = meme adresse IP, mais nom différent) ADF - DR12 CNRS Fév. 2009 9

Section <Directory>, <DirectoryMatch> <Directory /var/www/html> directive... </Directory> <Directory /home/*/public_html> directive... </Directory> <DirectoryMatch "^/www/(.+/)?[0-9]{3}"> directive... </DirectoryMatch> Les directives s'appliquent aux répertoires s'identifiant à l'expression et à ses sous-répertoires Pas appliquées si accès via un chemin différent (symlink) S'appliquent dans l'ordre de la correspondance de la plus courte à la plus longue : /var, /var/www, /var/www/html ADF - DR12 CNRS Fév. 2009 10

Section <Files> <FilesMatch> Les directives s'appliquent aux objets ayant un «basename» s'identifiant à l'expression Les sections sont appliquées dans l'ordre d'apparition dans le fichier de conf Peut être incluse dans une section <Directory> <Files.htaccess>... </Files> <FilesMatch "\.(gif jpe?g png)$">... </FilesMatch> ADF - DR12 CNRS Fév. 2009 11

Section <Location> <Location /status> SetHandler server-status </Location> Les directives de <Location> s'appliquent à une URL Utilisée pour un contenu résidant dans l'espace Web Appliquées dans l'ordre d'apparition dans le fichier de conf Prioritaires sur <Directory> et <Files> <Location /> est un moyen commode d'appliquer une directive à tout l'espace web ADF - DR12 CNRS Fév. 2009 12

Section <Limit> <Limit POST PUT DELETE> Require valid-user </Limit> <LimitExcept GET> Require valid-user </Limit> <Limit> pour limiter l'accès à des espaces Web GET, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK Noms des méthodes sensibles à la casse Peut apparaître dans <Directory> ADF - DR12 CNRS Fév. 2009 13

Section <VirtualHost> <VirtualHost 10.1.2.3> DocumentRoot /www/docs/host.foo.com ServerName host.foo.com </VirtualHost> <VirtualHost [2001:db8::a00:20ff:fea7:ccea]>... </VirtualHost> ADF - DR12 CNRS Fév. 2009 14

Imbrication des sections <VirtualHost...> <Directory...> <Files...> <Limit...>... <Limit...> </Files> </Directory> </VirtualHost> ADF - DR12 CNRS Fév. 2009 15

.htaccess Lors du traitement d'une requête, Apache cherche la présence d'un fichier.htaccess dans tous les répertoires du chemin menant au document Exemple, avant de retourner /usr/local/web/index.html, Apache examine les fichiers : /.htaccess, /usr/.htaccess, /usr/local/.htaccess /usr/local/web/.htaccess Mieux vaut désactiver cette fonctionnalité sur / : <Directory /> AllowOverride None </Directory> ADF - DR12 CNRS Fév. 2009 16

.htaccess Les fichiers.htaccess se placent dans des répertoires Une directive dans le fichier /var/www/.htaccess directive1 diretives2 est équivalent à la même directive placée dans le fichier de configuration principal de pache, dans une section <Directory>: <directory /var/www> directive1 directive2 </directory> ADF - DR12 CNRS Fév. 2009 17

Contexte des directives Les directives apache fonctionnent dans un certain «contexte» d'utilisation (l'endroit ou peut apparaître une directive): «server config» : dans le fichier de configuration principal, hors de tout contexte «virtual host» : dans une section <VirtualHost> «directory» : dans une section <Directory>, <Location> ou <Files> «.htaccess» : dans un fichier.htaccess ADF - DR12 CNRS Fév. 2009 18

Priorité des sections A connaître, car les conséquences sont importantes 1. <Directory> et.htaccess pour un niveau donné,.htaccess prévaut sur <directory> 2. <DirectoryMatch> 3. <Files> et <FilesMatch> 4. <Location> et <LocationMatch> Sinon, chaque groupe identique est traité suivant l'ordre d'apparition ADF - DR12 CNRS Fév. 2009 19

Priorité des sections Les sections dans <VirtualHost> sont appliquées après les sections correspondantes globales Ne pas abuser des imbrications. Exemple de mauvaise idée : <VirtualHost...> <Directory...>... </Directory> </VirtualHost> Attention : <Location> a le dernier mot <Location /> order deny,allow allow from all </Location> ADF - DR12 CNRS Fév. 2009 20

La signature des serveurs ServerSignature [On Off ] Attention : «On» donne trop d' informations interessantes en cas de failles default: ServerSignature Off (apache 2.2) context: server config, virtual host, directory,.htaccess ADF - DR12 CNRS Fév. 2009 21

Signature des Serveurs ServerTokens ServerTokens Major Minor Min[imal] Prod[uctOnly] OS Full default: ServerTokens Full context: server config $ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Sat, 02 Jun 2001 13:11:40 GMT Server: Apache/1.3.14 (Unix) (Red-Hat/Linux) PHP/4.0.3pl1 mod_perl/1.24 Connection: close Content-Type: text/html Connection closed by foreign host. ServerSignature On ServerTokens Prod ADF - DR12 CNRS Fév. 2009 22

Plan Généralités sur la configuration d'apache Déterminer l'espace web sous contrôle Contenir les débordements de l'espace web par défaut Restreindre l'espace web Identifier les scripts activables Contrôler le périmètre d'action des scripts Etanchéifier les territoires des webmasters ADF - DR12 CNRS Fév. 2009 23

L'espace web (URL-space) Ensemble des répertoires/fichiers qu'apache peut servir Les répertoires/fichiers/ qui n'ont pas vocation a être servi par Apache doivent être inaccessibles par l'uid sous lequel tourne Apache : ils sont hors de l'espace web (sauf utilisation de suexec) Or, il existe des fichiers accessibles en lecture par tous (rw-r r--) qui n'ont pas vocation a être servi par Apache : /etc/*, /home/*, /proc/*... Parades : chroot / virtualisation utiliser les contrôles d'accès d'apache restreindre les droits d'accès via l'os en exécutant Apache sous un uid gid particuliers ADF - DR12 CNRS Fév. 2009 24

Directives : User & Group «user» et «group» définissent l'identité sous laquelle tourne le serveur et il répond aux requêtes http contexte : server config Le serveur httpd est lancé par root le process initial reste sous l'identité root, et les process fils prennent l'identité spécifiée par User:Group L'identité spécifiée ne doit avoir aucun privilège lui permettant d'accéder à des fichiers en dehors du Web Space (/etc...) ni d'exécuter du code sans rapport avec le traitement de requêtes HTTP. Il est déconseillé d'utiliser un compte déjà existant (nobody), qui peut servir à autre chose ADF - DR12 CNRS Fév. 2009 25

User & Group Il faut donc créer un compte et un groupe spécifiques pour Apache (www-data, apache) Si le serveur n'est pas lancé par root, il ne peut pas changer l'identité de ses fils, et par conséquent sert les documents sous l'identité qui l'a lancé. depuis Apache 2, User et Group ne peuvent plus être utilisés dans un contexte de Virtual Host ADF - DR12 CNRS Fév. 2009 26

«ServerRoot» Espace web principal Racine du serveur = répertoire à partir duquel Apache est installé et configuré "/etc/apache2" contient par défaut des répertoires conf, logs, bin, htdocs... (cela varie selon les distributions) «DocumentRoot» définit la racine de l'espace web principal (/var/www) dans le cas général (hors Alias par exemple), Apache ajoute à DocumentRoot le chemin requis dans l'url pour obtenir le chemin du document à servir ServerRoot /etc/apache2 DocumentRoot /var/www http://www.monserveur.fr/toto.html ADF - DR12 CNRS Fév. 2009 27

Espace web principal DocumentRoot peut apparaître dans un contexte VirtualHost : c'est la racine de l'hôte virtuel (vh) espace web principal = (DocumentRoot Principal, DocumentRoot des VH) ServerRoot et DocumentRoot et VirtualHost ne sont possibles que dans la config principale, donc la définition de l'espace web principal est sous contrôle du sysadmin ADF - DR12 CNRS Fév. 2009 28

Espace des pages personnelles La directive «UserDir» définit la racine des pages personnelles Par défaut : UserDir public_html Mapping de http://www.x.fr/~gaston/page.html Userdir mapping public_html ~gaston/public_html/page.html /var/pages_perso /var/pages_perso/gaston/page.html /var/*/pages_perso /var/gaston/pages_perso/page.html http://autre.fr/~*/ http://autre.fr/~gaston/page.html ADF - DR12 CNRS Fév. 2009 29

Espace des pages personnelles On peut désactiver ou activer des pages personneles (recommandé pour les pages perso de root) UserDir disabled raoul gaston UserDir disabled root UserDir disabled UserDir enable user1 user2 user3 UserDir enabled UserDir disabled root nobody apache UserDir peut apparaître dans un contexte Virtual Host Espace pages perso = espace pages perso des VH UserDir interdit dans.htaccess, donc la définition des espaces pages perso est sous contrôle du webmaster ADF - DR12 CNRS Fév. 2009 30

Directive «Alias», «ScriptAlias» Rattache n'importe quelle arborescence de répertoires du filesystem à l'espace web Alias /doc /usr/linux/docs http://www.exemple.fr/doc/page.html mappé en : /usr/linux/docs/page.html ScriptAlias fait la même chose, et spécifie en plus que tous les fichiers doivent être traités comme des scripts CGI AliasMatch, ScriptAliasMatch «Alias» est interdit dans.htaccess, donc l'extension de l'espace web via des alias est sous contrôle du webmaster ADF - DR12 CNRS Fév. 2009 31

Résumé de l'url-space ADF - DR12 CNRS Fév. 2009 32

Espace web total espace web total DocumentRoot + UserDir + Alias + U VirtualHost sous contrôle du sysadmin Pour avoir une idée de l'espace Web, trouver le fichier de conf principal (httpd.conf, apache2.conf), puis grep -i '^\s*include' httpd.conf grep -i '^\s*serverroot' *.conf grep -i '^\s*documentroot' *.conf grep -i '^\s*userdir' *.conf grep -i '^\s*alias' *.conf grep -i '^\s*scriptalias' *.conf # récursivement ADF - DR12 CNRS Fév. 2009 33

Exemple de recherche de l'url space $ grep -i '^\s*include' httpd.conf Include conf.d/*.conf $ grep -i '^\s*serverroot' *.conf ServerRoot "/etc/httpd" $ grep -i '^\s*documentroot' *.conf DocumentRoot "/var/www/html" $ grep -i '^\s*userdir' *.conf UserDir disable $ grep -i '^\s*alias' *.conf Alias /icons/ "/var/www/icons/" Alias /error/ "/var/www/error/" $ grep -i '^\s*scriptalias' *.conf ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" ADF - DR12 CNRS Fév. 2009 34

Plan Généralités sur la configuration d'apache Déterminer l'espace web sous contrôle Contenir les débordements de l'espace web par défaut Restreindre l'espace web Identifier les scripts activables Contrôler le périmètre d'action des scripts Etanchéifier les territoires des webmasters ADF - DR12 CNRS Fév. 2009 35

Liens symboliques Les liens symboliques situés dans l'espace web ouvrent des brèches vers le filesystem (extérieur au Web space) ln -s /etc/passwd ~gaston/ Hors contrôle du sysadmin Comment les permettre, tout en les limitant? <Directory /var/www/html> Options FollowSymlinks </Directory> <Directory /var/www/html> Options FollowSymlinksIfOwnerMatch </Directory> ADF - DR12 CNRS Fév. 2009 36

Les options de Apache All : toute les options ci dessous sauf MultiViews (config par défaut) ExecCGI : permet l'exécution de scripts CGI (nécessité du module mod_cgi) FollowSymLinks : Le serveur peut suivre les liens symboliques dans ce répertoire SymLinksIfOwnerMatch: Le serveur peut suivre les liens symboliques uniquement si le fichier source et le fichier cible ont le même propriétaire! Includes : permission d'utiliser les «Server-side includes» commandes qu'on peut intégrer dans des pages html (nécessité du module mod_include) IncludesNOEXEC : permission d'utiliser les «Server-side includes SAUF les #exec cmd and #exec cgi Indexes : en l'absence d'un fichier «index.html, le serveur affiche la liste des fichiers présents dans un répertoire DirectoryIndex (e.g., index.html) MultiViews : permet la négociation de contenu, méthode par laquelle le serveur réalise une recherche par motifs implicites, et choisit parmi les résultats ADF - DR12 CNRS Fév. 2009 37

Héritage des options inter répertoires <Directory dir> Options [+ -]option [[+ -]option]... </Directory> Sans + ni -, Options écrase les options héritées <Directory /var/www> Options MultiViews </Directory> # les liens ne seront pas suivis Avec + ou -, Options rajoute ou enleve les options héritées <Directory /var/www/labo> Options -Indexes +MultiViews </Directory> ADF - DR12 CNRS Fév. 2009 38

Héritage des options <Directory /var/www/ > Options -FollowSymlinks </Directory> Les symlinks sont-ils pour autant désactivés? pas forcément, s'il existe un fichier.htaccess contenant : (rappel les fichiers.htacces sont évalués en dernier) Options FollowSymlinks => Comment contrôler la présence des.htaccess dans les répertoires des utilisateurs? ADF - DR12 CNRS Fév. 2009 39

Maîtriser les.htaccess Le nom des fichiers de «surcharge» est-il bien.htaccess? vérifier : AccessFileName.htaccess le vérifier pour tous les virtual host Même si tout semble «normal», le vérifier quand même : AccessFileName.htaccess readme Activer/désactiver les.htaccess : AllowOverride <Directory /> AllowOverride None </Directory> <Directory /var/www/html/permissif> AllowOverride All </Directory> ADF - DR12 CNRS Fév. 2009 40

AllowOverride : que peut-on surcharger? AuthConfig permet utilisation des fichiers d'authentification (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, etc.). FileInfo permet utilisation de directives controlant les types de fichiers (DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter..) Indexes permet utilisation de directives controlant l'indexation des répertoires (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, etc.). Limit permet utilisation de directives controlant l'acces des clients (Allow, Deny and Order). Options permet utilisation de la directive «option» All none : toutes ou aucune des options ci dessus ADF - DR12 CNRS Fév. 2009 41

Config par défaut (tarball & Fedora) <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory "/usr/local/apache/htdocs"> Options Indexes FollowSymLinks AllowOverride None </Directory> <Directory "/usr/local/apache/cgi-bin"> AllowOverride None Options None </Directory> Pourquoi ce laxisme? Explication personnelle : ne pas suivre les symlinks (ou les suivre si propriétaires identiques) est coûteux : 1 appel de lstat pour chaque répertoire du chemin et pour le fichier final ADF - DR12 CNRS Fév. 2009 42

Plan Généralités sur la configuration d'apache Déterminer l'espace web sous contrôle Contenir les débordements de l'espace web par défaut Restreindre l'espace web Identifier les scripts activables Contrôler le périmètre d'action des scripts Etanchéifier les territoires des webmasters ADF - DR12 CNRS Fév. 2009 43

Protection de l'espace Web Plusieurs types de protection de l'espace web sont permises par Apache : Par filtrage des adresses IP sources Par authentification: Par login/passwd Par certificat x509 ADF - DR12 CNRS Fév. 2009 44

filtrage sur l'adresse IP source Allow, deny : pour permettre ou interdire des adresses Allow from apache.org Allow from.net Allow from 10.1.2.3 Allow from 10.1 Allow from 10.1.0.0/255.255.0.0 Allow from 10.1.0.0/16 Allow from 2001:db8::a00:20ff:fea7:ccea/10 SetEnvIf User-Agent ^Firefox/2\.0 il_passe <Directory /docroot> Allow from env=il_passe </Directory> Allow et deny n'ont de sens que si l'on connait la valeur de «order» ADF - DR12 CNRS Fév. 2009 45

filtrage sur la source Order deny,allow tout est autorisé par défaut, sauf ce qui est interdit, à moins que ce soit autorisé Order Deny,Allow Deny from ennemi.com Allow from agent-double.ennemi.com Order allow,deny tout est interdit par défaut, sauf ce qui est autorisé, à moins que ce soit interdit Order Allow,Deny Allow from partenaire.fr Deny from agent-double.partenaire.fr Autoriser le positionnement de order, allow et deny dans un.htaccess : AllowOverride Limit ADF - DR12 CNRS Fév. 2009 46

filtrage par authentification Pour protéger un répertoire «prive» Nécessité d'un fichier de login+mot de passe spécifique <Location /prove> AuthType basic AuthName "private area" AuthBasicProvider dbm AuthDBMType AuthDBMUserFile Require </Location> SDBM /www/etc/dbmpasswd valid-user Le serveur va demander «require» un utilisateur valide existant dans le fichier dbmpasswd ADF - DR12 CNRS Fév. 2009 47

Directive «Satisfy» La directive «satisfy» permet de combiner les 2 types de protection (par adresse et/ou authentification) Valeurs : All ou Any satisfy all : require ET allow/deny satisfy any : require OU allow/deny $ cat /htdocs/.../x/.htaccess Order Allow,Deny Allow from all Satisfy Any <Directory /htdocs/.../x/.../y> Require valid-user </Directory> dans cet exemple l'authentification n'a pas lieu (allow from all et Any) Pour autoriser Satisfy dans.htaccess : AllowOverride AuthConfig ADF - DR12 CNRS Fév. 2009 48

Option Indexes Lorsque Apache accède à un répertoire du web space si ce répertoire contient un index.html (nom de fichier défini par la directive «DirectoryIndex»), c'est ce fichier qui est renvoyé sinon si l'option Indexes est positionnée, la liste des fichiers et répertoires de ce répertoire est affichée sinon, une erreur est retournée ADF - DR12 CNRS Fév. 2009 49

Pour autoriser Options Indexes dans.htaccess : AllowOverride Options AllowOverride Options=Indexes Autoriser DirectoryIndex dans.htaccess : AllowOverride Indexes ADF - DR12 CNRS Fév. 2009 50

Interdire l'accès à des répertoires ou fichiers <Directory /> <FilesMatch "^\."> order deny,allow deny from all </FilesMatch> </Directory> <LocationMatch "/\.\./"> order deny,allow deny from all </LocationMatch> RewriteEngine On RewriteLog logs/rewrite.log RewriteLogLevel 9 RewriteRule /\./ / [F] RewriteRule /\.\./ / [F] RewriteRule etc/passwd / [F] RewriteRule etc/shadow / [F] ## [F] = Forbidden ADF - DR12 CNRS Fév. 2009 51

Configuration initiale <Directory /> Order deny,allow Deny from all </Directory> <Directory "/usr/local/apache/htdocs"> Order allow,deny Allow from all </Directory> ## ne pas interdire QUE les fichiers.ht* mais aussi toutes les autres fichiers qu'on laisse par erreur <Files ~ "^\.ht ~$ ^\.bash README \.bak \.ini [\.\-]old [\.\-]sav \.inc \.sh"> Order allow,deny Deny from all </Files> <Directory "/usr/local/apache/cgi-bin"> Order allow,deny ADF - DR12 CNRS Fév. 2009 52

Plan Généralités sur la configuration d'apache Déterminer l'espace web sous contrôle Contenir les débordements de l'espace web par défaut Restreindre l'espace web Identifier les scripts activables Contrôler le périmètre d'action des scripts Etanchéifier les territoires des webmasters ADF - DR12 CNRS Fév. 2009 53

Action Une action exécutable de Apache peut être : liée statiquement au serveur, ajoutée comme un module chargé par le serveur mod_action, mod_status, mod_server ajoutée avec la directive «Action» pour traiter des fichiers d'un type particulier Action image/gif /cgi-bin/images.cgi Pris en charge par des filtres SetInputFilter SetOutputFilter ADF - DR12 CNRS Fév. 2009 54

Actions prédéfinies default-handler : envoie le contenu statique du fichier send-as-is : envoie un fichier contenant ses propres en-têtes HTTP cgi-script : traite le fichier comme un CGI imap-file : traite le fichier comme une image map server-info : renvoie des infos sur la config server-status : renvoie des infos sur l'état du serveur ADF - DR12 CNRS Fév. 2009 55

Directive «Action» Permet de définir une action et l'associer à un type MIME Action image/gif /cgi-bin/images.cgi Définir et nommer une action (sans association) Action add-footer /cgi-bin/footer.pl ADF - DR12 CNRS Fév. 2009 56

Handler Handler = définition et déclenchement d'une certaine action en fonction : d'un type de contenu d'une extension de fichier d'un emplacement de fichier ADF - DR12 CNRS Fév. 2009 57

Directive AddHandler Établit une relation entre une extension de fichier et un script qui va les traiter : Contexte : server config, virtual host, directory,.htaccess Exemples : pour que les fichiers.html soient traités par le script «footer.pl» Les fichiers.xyz seront traités par les scripts program.cgi AddHandler add-footer.html Action add-footer /cgi-bin/footer.pl # Files of a particular file extension AddHandler my-file-type.xyz Action my-file-type /cgi-bin/program.cgi ADF - DR12 CNRS Fév. 2009 58

Directive SetHandler Créer un handler pour tous les fichiers (inconditionnel) situés dans un emplacement Contexte : server config, virtual host, directory,.htaccess Exemple : toute les images de ce répertoire «images» seront pris en charge par images.cgi Action gif-handler /cgi-bin/images.cgi <Directory /htdocs/images> SetHandler gif-handler </Directory> <Location /server-status> SetHandler server-status Order allow,deny Allow from com.univ-mrs.fr </Location> Pour Interdire AddHandler et SetHandler dans.htaccess ne pas spécifier : AllowOverride FileInfo ADF - DR12 CNRS Fév. 2009 59

Filtres Permet de spécifier des traitements à exécuter avant ou après l'action SetInputFilter : défini le filtre qui va prendre en charge la requête du client avant qu'elle soit envoyée au serveur AddInputFilter SetOutputFilter : défini le filtre qui va prendre en charge la réponse du serveur avant qu'elle ne soit envoyée au client AddOutputFilter AddOutputFilterByType ADF - DR12 CNRS Fév. 2009 60

Plan Généralités sur la configuration d'apache Déterminer l'espace web sous contrôle Contenir les débordements de l'espace web par défaut Restreindre l'espace web Identifier les scripts activables Contrôler le périmètre d'action des scripts Etanchéifier les territoires des webmasters ADF - DR12 CNRS Fév. 2009 61

Où sont les scripts? Que font les scripts? Que consomment les scripts? ADF - DR12 CNRS Fév. 2009 62

Conf par défaut config initiale (tarball) : $ grep -Ei "handler action filter" httpd.conf #AddHandler cgi-script.cgi #AddHandler type-map var #AddOutputFilter INCLUDES.shtml config initiale (Fedora) : $ grep -Ei "handler action filter" httpd.conf #AddHandler cgi-script.cgi AddHandler type-map var AddOutputFilter INCLUDES.shtml ADF - DR12 CNRS Fév. 2009 63

Server Side Include : SSI Permet d'insérer du code dans les pages HTML Exemple : $ cat ls.html <html> <body> <!-- #exec cmd="ls ~`echo $QUERY_STRING sed 's/^.*=//'`" --> </body> </html> permet d'obtenir la liste des fichiers d'un utilisateur par : http:// servername/ls.html?user=tartempion Autorisé par : Options Includes ADF - DR12 CNRS Fév. 2009 64

Plus anodin : Server Side Include : SSI <!-- #printenv --> DOCUMENT_ROOT=/usr/local/etc/httpd/htdocs PATH=/bin:/sbin:/usr/bin:/usr/sbin SCRIPT_FILENAME=/usr/local/httpd/htdocs/support/printenv.html SERVER_SOFTWARE=Apache/1.3.37 (Unix) USER_NAME=root SERVER_SIGNATURE= Autorisé par : Options Includes Options IncludesNoExec Possible à spécifier dans.htaccess si : AllowOverride Options AllowOverride Options=Includes AllowOverride Options=IncludesNoExec Même avec Options IncludesNoExec, toujours possible de lancer un script avec <!--#include virtual="/cgi-bin/xx.pl" --> ADF - DR12 CNRS Fév. 2009 65

Où sont les CGI? Répérer dans la config : les définitions de handlers : SetHandler cgi-script AddHandler cgi-script.cgi les options d'exécution : ScriptAlias /cgi-bin/ /web/cgi-bin/ équivalent à : Alias /cgi-bin/ /web/cgi-bin/ <Location /cgi-bin > SetHandler cgi-script Options +ExecCGI </Location> Mettre les scripts CGI hors de l'espace web principal (pas sous DocumentRoot) pour éviter que le code source soit accidentellement exposé xx.cgi.~ xx.cgi.bak ADF - DR12 CNRS Fév. 2009 66

Où sont les autres scripts? Pour PHP LoadModule php5_module modules/libphp5.so AddHandler php5-script.php AddType text/html.php pas de localisation particulière pas d'options nécessaires pour les répertoires ADF - DR12 CNRS Fév. 2009 67

Attention : extensions multiples Les fichiers peuvent avoir plusieurs extensions L'ordre des extensions n'est pas significatif. si le fichier exemple.html.fr est associé au contenttype: text/html et au content-language fr, alors le fichier exemple.fr.html sera considéré de façon identique si.html est associé au type MIME text/html et.cgi associé au handler cgi-script, alors x.cgi.html sera traité comme un CGI (de même que x.html.cgi) ADF - DR12 CNRS Fév. 2009 68

Attention : extensions multiples Pour éviter ce comportement, ne pas utiliser Add* directives : AddHandler cgi-script.cgi Par exemple, pour que x.html.cgi doit considéré comme un CGI, mais pas x.cgi.html : <FilesMatch \.cgi$> SetHandler cgi-script </FilesMatch> ADF - DR12 CNRS Fév. 2009 69

Identité des processus Tous les scripts (SSI, CGI) tournent sous une même identité (celle du serveur Apache) => un script défaillant peut impacter les données utilisées par les scripts des autres webmasters Précaution (nécessaire mais insuffisante) le compte Apache doit être : désactivé sans shell ADF - DR12 CNRS Fév. 2009 70

suexec suexec exécute les CGI sous l'identité du propriétaire du fichier et non pas sous l'identité du serveur web Utilisé proprement, suexec réduit considérablement les risques induits par le développement de CGI par les webmasters. Mal utilisé, il peut par contre ouvrir de nouveaux trous de sécurité. SuExec est un wrapper entre Apache et le CGI Apache appelle le wrapper avec le nom du script a exécuter, l'uid et le GID sous lequel il doit s'exécuter ADF - DR12 CNRS Fév. 2009 71

SuExec : mise en oeuvre Nécessite un binaire suexec Installé avec apache sur Fedora, CentOs Tarball : $ ls -l /usr/sbin/suexec -r-s--x--- 1 root apache /usr/sbin/suexec./configure --enable-suexec Au lancement de httpd : [notice] suexec mechanism enabled (wrapper: /path/to/suexec) 2 utilisations : par virtual hosts par userdir ADF - DR12 CNRS Fév. 2009 72

SuExec par Virtual Host <VirtualHost...> SuexecUserGroup usera groupb </VirtualHost> suexec vérifie : que le path du CGI ne commence par / et ne contient pas.. que ni le user, ni le groupe ne sont root que l'uid (resp GID) est > au minimum UID (resp GID) que seul l'utilisateur a un droit d'écriture dans le répertoire que seul l'utilisateur a un droit d'écriture sur le script que l'utilisateur/groupe de SuExecUserGroup correspond au propriétaire/groupe du script Si OK, suexec prend l'identité et le groupe mentionné ADF - DR12 CNRS Fév. 2009 73

SuExec par UserDir Suexec exécute le CGI sous l'identité du propriétaire du userdir suexec vérifie : que l'uid (resp GID) est > au minimum UID (resp GID) que seul l'utilisateur a un droit d'écriture dans le répertoire que seul l'utilisateur a un droit d'écriture sur le script que l'utilisateur/groupe propriétaire du userdir correspond au propriétaire/groupe du script Si OK, suexec prend l'identité et le groupe du UserDir => à utiliser sans modération ADF - DR12 CNRS Fév. 2009 74

Contrôler les consommations Ajuster le nombre de process/threads StartServers, MinSpareServers, MaxSpareServers, StartThreads, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxThreads, ThreadLimit, ServerLimit, MaxRequestsPerChild, Ajuster les timeout TimeOut, KeepAliveTimeout Ajuster la taille et le nb max des requêtes MaxClients, LimitRequestBody, LimitXMLRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine Adapter le fonctionnement du serveur LimitInternalRecursion, RLimitCPU, RLimitMEM, RLimitNPROC => à ne pas modifier à la légère ADF - DR12 CNRS Fév. 2009 75

Contrôler les consommations HostnameLookups : resolution DNS des clients off par défaut logresolve pour traiter les logs attention : sur les anciennes versions off => jamais vérifié deny from nom.domain context: server config, virtual host, directory HostnameLookups off <Files ~ "\.(html cgi)$"> HostnameLookups on </Files> ADF - DR12 CNRS Fév. 2009 76

Contrôler les consommations /robots.txt User-agent: * Disallow: /cgi-bin/ Disallow: /tmp/ Disallow: /~joe/ User-agent: Google Disallow: User-agent: * Disallow: / ADF - DR12 CNRS Fév. 2009 77

Plan Généralités sur la configuration d'apache Déterminer l'espace web sous contrôle Contenir les débordements de l'espace web par défaut Restreindre l'espace web Identifier les scripts activables Contrôler le périmètre d'action des scripts Etanchéifier les territoires des webmasters ADF - DR12 CNRS Fév. 2009 78

Objectif : limiter le rayon d'action des webmasters Le minimum : apache doit pouvoir lire tous les espaces web de tous les vh les webmasters d'un site doivent pouvoir écrire dans leur espace avoir le minimum de droit sur les espaces des autres sites ADF - DR12 CNRS Fév. 2009 79

Solution 1 Créer un groupe wmsite par site y mettre tous les webmasters du site propriétaire des fichiers : créateur:wmsite droits : rwxrwxr-x => tout le monde a accès en lecture accès aux.htaccess,.htpasswd, source des scripts ADF - DR12 CNRS Fév. 2009 80

Solution 2 Créer un groupe wmsite par site y mettre tous les webmasters du site + apache propriétaire des fichiers : créateur:wmsite droits : rwxrwx--- => apache à accès en écriture à tous les fichiers ADF - DR12 CNRS Fév. 2009 81

file:///program%20files/openoffice.org%202.4/share/gallery/clipart018/computer/ic ons/etiquette-theme/stock/generic/stock_dialog-info.png Les ACL Possibilités : Ici : donner des droits pour divers utilisateurs donner des droits pour divers groupes définir un groupe de webmasters wmsite par site pour le DocumentRoot d'un site : propriétaire : root:wmsite droits : propriétaire : rwx wmsite : rwx user ou groupe apache : r-x autre : --- ADF - DR12 CNRS Fév. 2009 82

ACL : mode d'emploi Activer $ grep les htdocs ACL /etc/fstab sur la partition : LABEL=htdocs /htdocs ext3 defaults,acl 1 2 mount -o remount,acl -L htdocs Activation initiale (sans démontage) setfacl -m u::rw -m g:apache:r -m g:wmsite:rw -m o:: page.html Positionner les ACL sur un fichier : setfacl -R \ Positionner -m u::rwx -m les g:apache:r-x ACL sur -m une g:wmsite:rwx arborescence -m o:: \ de répertoires /htdocs/site : -m d:u::rwx -m d:g:apache:r-x -m d:g:wmsite:rwx -m d:o:: \ ADF - DR12 CNRS Fév. 2009 83

Consultation des ACL $ getfacl /htdocs/site user::rwx group::rwx group:apache:r-x group:wmsite:rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:apache:r-x default:group:wmsite:rwx default:mask::rwx default:other::--- $ getfacl /htdocs/site/index.html user::rwgroup::rwgroup:apache:r-- group:wmsite:rwmask::rwx other::--- ADF - DR12 CNRS Fév. 2009 84

A propos de permission... ne pas faire chmod 777 comme indiqué dans les docs d'installation des CMS et wikis chown apache fichier_ou_rep chgrp apache fichier_ou_rep chmod g+rw fichier chmod g+rwx rep setacl -m u:apache:rwx d:u:apache:rwx rep setacl -m g:apache:rwx d:g:apache:rwx rep ADF - DR12 CNRS Fév. 2009 85

Conclusion ADF - DR12 CNRS Fév. 2009 86

Sources d'inspiration Expérience issue de la réorganisation du web au LAL IN2P3 (2003-2004) au départ : un cluster central disposant d'un SAN pour tout le stockage du labo : homedir, web, données d'expérience, etc. de tous les utilisateurs du labo (plusieurs centaines de comptes) d'un site web monolithique après réorganisation : éclatement de l'espace web en 120 vh (120 DocumentRoot étanches) Expérience issue de la mise en place de la plate-forme d'hébergement de sites web de Mathrice (2007) ADF - DR12 CNRS Fév. 2009 87

Références http://httpd.apache.org/docs/2.2/misc/security_tips.html http://httpd.apache.org/docs/2.2/misc/perf-tuning.html http://www.hsc.fr/ressources/ http://www.w3.org/security/ Apache Security - Ivan Ristic - O'Reilly La dernière version de ce document se trouve sur http://larema.math.cnrs.fr/~charbonnel ADF - DR12 CNRS Fév. 2009 88