Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:reseau:apache2:tp01 [23/09/2014 10:45] Hypathie [Sécuriser son site web] |
doc:reseau:apache2:tp01 [23/09/2014 15:02] Hypathie [Créer un site web avec apache2] |
||
---|---|---|---|
Ligne 12: | Ligne 12: | ||
**Nota : Ce wiki est écrit par une débutante ** | **Nota : Ce wiki est écrit par une débutante ** | ||
- | Contributeurs, merci de compléter [[atelier:chantier:apache2#securiser-son-site-web|la partie sur la sécurité]] ! FIXME | + | Contributeurs, merci de compléter/vérifier [[atelier:chantier:apache2?&#verifier-l-appartenance-et-les-droits-des-fichiers-utilises-par-apache|la partie sur les droits posix sur les fichiers utiles à apache]] ! FIXME |
===== Introduction ===== | ===== Introduction ===== | ||
Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.\\ | Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.\\ | ||
Ligne 330: | Ligne 330: | ||
====Sécuriser Apache2 ==== | ====Sécuriser Apache2 ==== | ||
Ce n'est là qu'un minimum et non une sécurisation optimale. | Ce n'est là qu'un minimum et non une sécurisation optimale. | ||
- | FIXME | + | |
====Diffuser le minimum d'information sur apache ==== | ====Diffuser le minimum d'information sur apache ==== | ||
* Éditer le fichier /etc/apache2/conf.d/security. | * Éditer le fichier /etc/apache2/conf.d/security. | ||
Ligne 454: | Ligne 454: | ||
-> le mot de passe est chiffré. | -> le mot de passe est chiffré. | ||
- | * On peut aussi créer un groupe par exemple aussi dans le même dossier /usr/local/apache/passwd/ | + | <note tip> |
+ | **Pour supprimer un utilisateur :** | ||
+ | |||
+ | <code root>htpasswd -D /usr/local/apache/passwd/passwords utilisateur</code> | ||
+ | </note> | ||
+ | |||
+ | * Pour créer un groupe par exemple aussi dans le même dossier /usr/local/apache/passwd/ | ||
Par exemple du nom de "groups" : | Par exemple du nom de "groups" : | ||
<code root>vim groups</code> | <code root>vim groups</code> | ||
- | <code>goupe1 web toto</code> | + | <code>goupe1: web</code> |
====Modifier les fichiers des sites actifs de /etc/apache2/sites-available ==== | ====Modifier les fichiers des sites actifs de /etc/apache2/sites-available ==== | ||
Ligne 475: | Ligne 481: | ||
<Directory /> | <Directory /> | ||
Options FollowSymLinks | Options FollowSymLinks | ||
- | AllowOverride None | ||
- | Require all denied | ||
- | </Directory> | ||
- | <Directory /var/www/> | ||
- | Options Indexes FollowSymLinks MultiViews | ||
AllowOverride AuthConfig | AllowOverride AuthConfig | ||
Order deny,allow | Order deny,allow | ||
deny from all | deny from all | ||
allow from 192.168.0.0/24 | allow from 192.168.0.0/24 | ||
- | AuthType Basic | + | </Directory> |
+ | <Directory /var/www/> | ||
AuthName "Ma zone est restreinte !" | AuthName "Ma zone est restreinte !" | ||
AuthBasicProvider file | AuthBasicProvider file | ||
AuthUserFile /usr/local/apache/passwd/passwords | AuthUserFile /usr/local/apache/passwd/passwords | ||
AuthGroupFile /usr/local/apache/passwd/groups | AuthGroupFile /usr/local/apache/passwd/groups | ||
- | Require valid-user | + | Require user web |
+ | require group group1 | ||
+ | | ||
</Directory> | </Directory> | ||
+ | |||
+ | ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ | ||
+ | <Directory "/usr/lib/cgi-bin"> | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | </Directory> | ||
+ | ErrorLog ${APACHE_LOG_DIR}/error.log | ||
+ | |||
+ | # Possible values include: debug, info, notice, warn, error, crit, | ||
+ | # alert, emerg. | ||
+ | LogLevel warn | ||
+ | |||
+ | CustomLog ${APACHE_LOG_DIR}/access.log combined | ||
</code> | </code> | ||
<note> | <note> | ||
**Bien remarquer que pour pouvoir ajouter cette directive**\\ | **Bien remarquer que pour pouvoir ajouter cette directive**\\ | ||
- | -> on a mis ''AllowOverride AuthConfig'' à la place de ''AllowOverride None'' seulement dans la directive "<Directory /var/www/>".\\ Mais laisser à ''None'' dans "<Directory />"(( afin d'éviter l'utilisation des fichiers ".htaccess" qui permettent de passer outre les fonctionnalités de sécurité que vous avez configurées.))\\ Mais il faut mettre ''AuthConfig'' pour utiliser " AuthName" c'est-à-dire les mots de passe apache. | + | -> on a mis ''AllowOverride AuthConfig'' à la place de ''AllowOverride None'' non seulement dans la directive "<Directory /var/www/>".\\ mais aussi dans "<Directory />". |
**Pour autoriser l'accès à tous les utilisateurs** qui ont un mot de passe apache :\\ | **Pour autoriser l'accès à tous les utilisateurs** qui ont un mot de passe apache :\\ | ||
- | -> ''Require valid-user''\\ | ||
- | |||
- | **On aurrait pu mettre** :\\ | ||
-> ''Require user web''\\ | -> ''Require user web''\\ | ||
-> ''Require group groupe1''\\ | -> ''Require group groupe1''\\ | ||
- | **Pour sécuriser l'accès au système de fichier** :\\ | + | **On aurrait pu mettre** :\\ |
- | ''Require all denied'' : interdire aux clients de parcourir l'ensemble du système de fichiers. Ceci va interdire l'accès par défaut à tous les fichiers du système de fichiers; Ensuite on autorise section par section. Voir [[http://httpd.apache.org/docs/trunk/fr/misc/security_tips.html]] et [[http://httpd.apache.org/docs/2.2/mod/core.html#require| require directive]] | + | -> ''Require valid-user''\\ |
+ | Voir aussi la directive "Satisfy" : [[http://httpd.apache.org/docs/2.2/howto/auth.html]] | ||
+ | |||
+ | **Pour sécuriser l'accès au système de fichier** :\\ | ||
+ | ''Require all denied'' : interdire aux clients de parcourir l'ensemble du système de fichiers. Ceci va interdire l'accès par défaut à tous les fichiers du système de fichiers; Ensuite on autorise section par section. Voir [[http://httpd.apache.org/docs/trunk/fr/misc/security_tips.html]] et [[http://httpd.apache.org/docs/2.2/mod/core.html#require| require directive]]\\ | ||
+ | Pour l'utiliser avec une zone restreinte, il faut alors l'inclure dans <Directory /> et créer la zone restreinte dans une directive séparée :\\ | ||
+ | ''<Directory /var/www/restricted/> ... </Directory>'' | ||
</note> | </note> | ||
- | * Pour "/etc/apache2/sites-available/monsite.com" : Il n'y a pas à modifier quoique ce soit. | + | * Pour "/etc/apache2/sites-available/monsite.com" : |
+ | <code root>vim /etc/apache2/sites-available/monsite.com</code> | ||
+ | |||
+ | <code> | ||
+ | <VirtualHost *:80> | ||
+ | ServerAdmin webmaster@localhost | ||
+ | ServerName monsite.com | ||
+ | ServerAlias www.monsite.com | ||
+ | |||
+ | DocumentRoot /var/www/monsite.com | ||
+ | |||
+ | <Directory /> | ||
+ | Options -FollowSymLinks | ||
+ | AllowOverride AuthConfig | ||
+ | Order deny,allow | ||
+ | deny from all | ||
+ | allow from 192.168.0.0/24 | ||
+ | </Directory> | ||
+ | <Directory /var/www/monsite.com> | ||
+ | Options -Indexes | ||
+ | Options -FollowSymLinks | ||
+ | Options -Includes | ||
+ | Options -ExecCGI | ||
+ | Options MultiViews | ||
+ | AllowOverride AuthConfig | ||
+ | AuthType Basic | ||
+ | AuthName "Ma zone est restreinte !" | ||
+ | AuthBasicProvider file | ||
+ | AuthUserFile /usr/local/apache/passwd/passwords | ||
+ | AuthGroupFile /usr/local/apache/passwd/groups | ||
+ | Require user web | ||
+ | </Directory> | ||
+ | ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ | ||
+ | <Directory "/usr/lib/cgi-bin"> | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | </Directory> | ||
+ | |||
+ | ErrorLog ${APACHE_LOG_DIR}/error.log | ||
+ | |||
+ | # Possible values include: debug, info, notice, warn, error, crit, | ||
+ | # alert, emerg. | ||
+ | LogLevel warn | ||
+ | CustomLog ${APACHE_LOG_DIR}/access.log combined | ||
+ | </VirtualHost> | ||
+ | </code> | ||
===On supprime le fichier "monsite.com" de /var/www/ === | ===On supprime le fichier "monsite.com" de /var/www/ === | ||
Ligne 523: | Ligne 591: | ||
====Vérifier l'appartenance et les droits des fichiers utilisés par "apache"==== | ====Vérifier l'appartenance et les droits des fichiers utilisés par "apache"==== | ||
+ | FIXME | ||
===Modifier le groupe de /var/www === | ===Modifier le groupe de /var/www === | ||
Ligne 579: | Ligne 648: | ||
8-) **Le login du compte apache (nom de l'utilisateur du système Linux) est demandé ainsi que son mot de passe et on peut accéder à ses pages d'index !** | 8-) **Le login du compte apache (nom de l'utilisateur du système Linux) est demandé ainsi que son mot de passe et on peut accéder à ses pages d'index !** | ||
+ | ====La journalisation (Logging) ==== | ||
+ | Il en faut consulter régulièrement au moins deux : Les logs d'erreur et les logs d'accès au serveur. | ||
+ | |||
+ | ===Paramétrer la journalisation === | ||
+ | Le niveau de consignation souhaité dépend de la directive ''LogLevel'', dans le fichier de configuration par défaut ''/etc/apache2/apache2.conf'' qui est réglé par défaut sur : | ||
+ | |||
+ | LogLevel warn | ||
+ | |||
+ | **Ainsi paramétrer apache inscrit des logs d'erreur.** | ||
+ | On peut mettre l'un des neuf niveau d'alerte, pour être alerter de la moindre information jusqu'au alerte grave : | ||
+ | -''trace'' : traçage des informations de différents niveaux (produit une grande quantité d'informations);\\ | ||
+ | - ''debug'' : informations de débogage qui peut être utile pour repérer où un problème ;\\ | ||
+ | - ''info'': message d'information qui pourrait être bon à savoir;\\ | ||
+ | - ''notice'' : signal un événement normal, mais à noter;\\ | ||
+ | - ''warn'' : signal un événement anormal, mais pas très préoccupant;\\ | ||
+ | - ''error'' : signal que quelque chose a échoué;\\ | ||
+ | - ''crit'' : problèmes importants qui doivent être pris en compte;\\ | ||
+ | - ''alert'' : situation grave qui nécessite rapidement une action;\\ | ||
+ | - ''emerg'' : urgence de la situation, le système est dans un état inutilisable.\\ | ||
+ | |||
+ | -> Par défaut, on est informé à partir du niveau choisi jusqu'au niveau le plus grave.\\ | ||
+ | |||
+ | ===Où Apache conserve-t-il ses journaux? === | ||
+ | |||
+ | Dans le fichier général **/etc/apache2/apache2.conf** une ligne indique le fichier où sont consigné les logs : | ||
+ | |||
+ | ErrorLog ${APACHE_LOG_DIR}/error.log | ||
+ | |||
+ | > Cette directive nomme le fichier où Apache tiendra ses messages d'erreur. Comme vous pouvez le voir, il utilise une variable d'environnement appelée "APACHE_LOG_DIR" pour obtenir le préfixe du chemin de répertoire. | ||
+ | > Pour savoir vers quel fichier renvoie cette variable d'environnement il faut consulter le fichier **''/etc/apache2/envvars''** | ||
+ | |||
+ | export APACHE_LOG_DIR=/var/log/apache2$SUFFIX | ||
+ | |||
+ | > Cela signifie que lorsqu'il est combiné avec la directive (variable "SUFFIX") dans le fichier "apache2.conf", **Apache enregistre les logs d'erreur dans un fichier appelé ''/var/log/apache2/error.log''**. | ||
+ | |||
+ | <code root>ls /var/log/apache2</code> | ||
+ | <code>access.log error.log other_vhosts_access.log</code> | ||
+ | |||
+ | ===Les logs d'accès au serveur === | ||
+ | Très important pour la sécurisation du serveur. On peut savoir s'il y a eu des tentatives de piratage.\\ | ||
+ | |||
+ | Ces logs sont consignés par défaut dans le fichier **''/var/log/apache2/access.log''**.\\ | ||
+ | |||
+ | Le paramétrage des logs d'accès n'est pas dans le fichier de configuration générale /etc/apache2/apache2.conf, mais dans le fichier de l'hôte par défaut.\\ | ||
+ | |||
+ | La déclaration du journal d'accès se trouve donc dans : **''/etc/apache2/sites-available/default''**. | ||
+ | |||
+ | Nous pouvons y trouver trois valeurs distinctes concernant l'exploitation des logs d'accès.\\ | ||
+ | |||
+ | <code>ErrorLog ${APACHE_LOG_DIR}/error.log | ||
+ | |||
+ | LogLevel warn | ||
+ | |||
+ | CustomLog ${APACHE_LOG_DIR}/access.log combined</code> | ||
+ | |||
+ | La définition du journal des erreurs (ErrorLog et Loglevel) correspond à celle dans le fichier de configuration par général. Il n'est pas nécessaire d'avoir cette ligne dans les deux fichiers, mais ce doublon permet à modifier ici l'emplacement des logs pour celui qu'on souhaite. | ||
+ | |||
+ | ===Paramétrer la directive "CustomLog" pour améliorer la sécurité === | ||
+ | |||
+ | CustomLog ${APACHE_LOG_DIR}/access.log combined | ||
+ | |||
+ | Elle est constituée de deux partie : | ||
+ | * ${APACHE_LOG_DIR}/access.log : localisation des logs d'accès | ||
+ | * combined : le format des logs par défaut\\ il s'agit d'une étiquette qui renvoie à la directive ''LogFormat'' ( personnalisable) dans le fichier de configuration par général ''/etc/apache2/apache2.conf'' . | ||
+ | |||
+ | ===La directive "LogFormat" /etc/apache2/apache2.conf === | ||
+ | Par défaut : | ||
+ | |||
+ | LogFormat "%h %l %u %t \"%r\" %>s %O \"{Referer}i\" \"%{User-Agent}i\"" combined | ||
+ | |||
+ | Pour comprendre chacune de ces variables [[http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats|voir la documentation d'apache]]. | ||
+ | |||
+ | * Voici par exemple ma configuration : | ||
+ | |||
+ | <code>LogFormat "%h %l %u %t \"%r\" %s %b" common</code> | ||
+ | > ''%h'' : sera remplacée par le nom de l'hôte distant | ||
+ | > %l : sera remplacée par logname a distance. Il faut que [[http://httpd.apache.org/docs/2.2/en/mod/mod_ident.html|le module "mod_ident"]] soit présent et que [[http://httpd.apache.org/docs/2.2/en/mod/mod_ident.html#identitycheck|la directive "IdentityCheck"]] soit activé ("On"). | ||
+ | > u% : sera remplacée par utilisateur distant. | ||
+ | > %t : sera remplacée par moment où la demande a été reçue (format standard anglais) | ||
+ | > \"%r\" : sera remplacée par la ligne de demande. | ||
+ | > %s : sera remplacée par le statut de la demande. | ||
+ | > %b : sera remplacée par la taille de la réponse en octets, à l'exception des en-têtes HTTP. Dans le format CLF, I.S. un «-» plutôt que d'un 0 si aucune octets sont envoyés. | ||
+ | Pour aller plus loin, par exemple pour la rotation des journaux voir [[http://httpd.apache.org/docs/trunk/fr/logs.html]] |