Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
apache:securisation [2011/08/27 02:10]
Anael MOBILIA
apache:securisation [2014/05/27 03:32] (Version actuelle)
Ligne 1: Ligne 1:
-<style float-right>{{tag>XXX}}</style>+<style float-right>{{tag>apache securisation chmod chown}}</style>
  
-<style float-left>{{:icones:page_web.png?nolink&70}}</style> +<style float-left>{{:icones:kgpg.png?nolink&70}}</style> 
-====== Titre_page ======+====== Sécurisation basique d'Apache ======
  
 //[[:|Retour à la liste des tutoriels]]// //[[:|Retour à la liste des tutoriels]]//
  
-<note tip>Présentation rapide.</note>+<note tip>Ensemble de configurations faciles qui permettent d'augmenter la sécurité d'Apache.</note>
 <note>**Prérequis** <note>**Prérequis**
-  * Aucun prérequis pour ce tutoriel.+  * [[apache:installation_configuration|Avoir installé Apache.]]
 </note> </note>
 \\ \\
-===== grand1 ===== +===== Propriétaire des fichiers ===== 
-lorem ipsum +==== Création d'un utilisateur propriétaire du site ==== 
 +Nous allons créer un nouvel utilisateur système qui sera le propriétaire des fichiers du site.
 \\ \\
-===== Liens ===== +Cet utilisateur fera partie du groupe www-data //(utilisateur exécutant apache)// afin de faciliter la mise en ligne ultérieure de nouveaux fichiers. 
-  * [[.:|Retour à la liste des tutoriels XXX]] +<code bash>adduser user-web --ingroup www-data</code> 
-  * [[:|Retour à la liste des tutoriels]]+ 
 +==== Attribution des fichiers à l'utilisateur user-web ==== 
 +<code bash>chown -R user-web:www-data /var/www/</code> 
 +On définit comme propriétaire des fichiers des sites web l'utilisateur que l'on a créé précédemment. 
 + 
 +==== Droits sur le contenu du site ===== 
 +Le système de droits de linux peut s'exprimer en 3 chiffres : 
 +  * les droits du propriétaire du fichier (moi) 
 +  * les droits des membres du groupe du propriétaire du fichier (ma famille) 
 +  * et les droits des autres
  
-++__But : [Sécurisation|tag:Sécurisation] basique d'[Apache|tag:Apache].__++ 
-%%%''(mis à jour pour Ubuntu 10.04 + groupe user-web - 02/07/2010)'' 
-%%% 
-!!!! I) Propriétaire des fichiers 
-!!! 1) Création d'un utilisateur propriétaire du site  
-Nous allons ajouter un utilisateur système qui sera le propriétaire des fichiers du site. 
-%%%Maj : Nous attribuons le groupe www-data à cet utilisateur (simplifiera la mise en ligne de nouveaux fichiers) 
-///[bash] 
-adduser user-web --ingroup www-data 
-/// 
-!!! 2) Attribution des fichiers à l'utilisateur user-web 
-///[bash] 
-chown -R user-web:www-data /var/www/ 
-/// 
-!!! 3) Droits sur le contenu du site 
-En résumé, le système de droits de linux peut s'exprimer en 3 chiffres : les droits du propriétaire du fichier (moi), les droits des membres du groupe du propriétaire du fichier (ma famille), et les autres. 
-%%% 
 Chacun de ces chiffres est compris entre 0 et 7, décomposable ainsi :  Chacun de ces chiffres est compris entre 0 et 7, décomposable ainsi : 
-* Droit de lecture sur le fichier : 4 points +  * Droit de lecture sur le fichier : 4 points 
-* Droit d'écriture sur le fichier : 2 points +  * Droit d'écriture sur le fichier : 2 points 
-* Droits d'exécution du fichier : 1 point +  * Droits d'exécution du fichier : 1 point 
-* Aucun droit : 0 point+  * Aucun droit : 0 point 
 Le chiffre correspond à la somme des valeurs assignées aux droits. Le chiffre correspond à la somme des valeurs assignées aux droits.
-%%%[Doc. Ubuntu|http://doc.ubuntu-fr.org/droits|fr+\\ 
-%%% +[[http://doc.ubuntu-fr.org/droits|Doc. Ubuntu]
-%%% + 
-!! A) Dossiers+ 
 +=== Dossiers ===
 L'utilisateur user-web à tous les droits, et le groupe à le droit de lecture & exécution (requis pour pouvoir entrer dans le dossier) L'utilisateur user-web à tous les droits, et le groupe à le droit de lecture & exécution (requis pour pouvoir entrer dans le dossier)
-///[bash+<code bash>find /var/www/ -type d -exec chmod 750 {} \;</code> 
-find /var/www/ -type d -exec chmod 750 {} \; +//Je trouve tous les répertoires (directory) et leur applique un chmod de 750.// 
-/// + 
-Pour éditer les fichiers du site, il faudra donc se connecter avec cet utilisateur en sftp (ftp over ssh) -> sftp://dedi.anael.eu :-) +<note>Pour éditer les fichiers du site, il faudra donc se connecter avec cet utilisateur en sftp (ftp over ssh, port 22)</note> 
-!! B) Fichiers+ 
 +=== Fichiers ===
 L'utilisateur user-web peut lire & écrire les fichiers du site, le groupe à seulement un droit de lecture. L'utilisateur user-web peut lire & écrire les fichiers du site, le groupe à seulement un droit de lecture.
-///[bash+<code bash>find /var/www/ -type f -exec chmod 640 {} \;</code> 
-find /var/www/ -type f -exec chmod 640 {} \; + 
-/// +=== Ecriture par le biais d'un script du site ===
-!! C) Ecriture par le biais d'un script du site+
 Les configurations proposées ci dessus ont un avantage important : si un pirate réussi à prendre le contrôle de votre site par une quelconque faille, il sera bloqué dans ses écritures et / ou modifications de fichiers ! Les configurations proposées ci dessus ont un avantage important : si un pirate réussi à prendre le contrôle de votre site par une quelconque faille, il sera bloqué dans ses écritures et / ou modifications de fichiers !
-%%%+
 Toutefois, nous avons parfois besoin d'envoyer un fichier sur notre site par un formulaire d'upload, ou de modifier un fichier à la volée. Toutefois, nous avons parfois besoin d'envoyer un fichier sur notre site par un formulaire d'upload, ou de modifier un fichier à la volée.
-%%% + 
-Si vous devez écrire dans un dossier au travers du site, donnez un chmod 770 uniquement au __dossier__ concerné. +Si vous devez écrire dans un dossier au travers du site, donnez un chmod 770 uniquement au **dossier** concerné. 
-%%% +\\ 
-Si vous devez écrire dans un fichier au travers du site, donnez un chmod 660 uniquement au __fichier__ concerné. +Si vous devez écrire dans un fichier au travers du site, donnez un chmod 660 uniquement au **fichier** concerné. 
-%%%[Doc. chmod|http://fr.wikipedia.org/wiki/Permissions_Unix|fr+\\ 
-%%%+[[http://fr.wikipedia.org/wiki/Permissions_Unix|Doc. chmod]
  
  
-%%% +===== Configuration de la sécurité basique d'Apache =====
-!!!! IV) Configuration de la sécurité basique+
 Actuellement notre serveur Apache envoi beaucoup trop d'informations sur sa version aux clients. Actuellement notre serveur Apache envoi beaucoup trop d'informations sur sa version aux clients.
-%%%Pour résoudre cela, éditons le fichier __/etc/apache2/conf.d/security__ +\\ 
-!!! 1) Directory /+Pour résoudre cela, éditons le fichier **/etc/apache2/conf.d/security** 
 + 
 +==== Directory / ====
 L'option permet une autorisation d'accès aux dossiers du système par un principe de liste blanche uniquement : On interdit tout par défaut, sauf ce qui est autorisé. L'option permet une autorisation d'accès aux dossiers du système par un principe de liste blanche uniquement : On interdit tout par défaut, sauf ce qui est autorisé.
-%%%Cette option n'est pas encore activée par défaut, toutefois je l'active afin de me protéger au maximum contre les conséquences d'une intrusion web réussie :) +\\ 
-!!! 2) ServerTokens+Cette option n'est pas activée par défaut. Je l'active afin de me protéger au maximum contre les conséquences d'une intrusion web réussie ! 
 + 
 +==== ServerTokens ====
 Configure les informations délivrées par Apache sur sa configuration au client. Configure les informations délivrées par Apache sur sa configuration au client.
-%%%Cette option est bien évidement à mettre sur une valeur ''Prod'', renvoyant uniquement "Apache" et aucune autre indication de version ! +<note tip>Les différentes valeurs possibles sont : 
-%%%[Doc. Apache|http://httpd.apache.org/docs/2.2/mod/core.html#servertokens|en+  * **Full** : Apache/2.2.16 (Debian) Server at anael.eu Port 80 
-!!! 3) ServerSignature +  * **OS** : Apache/2.2.16 (Debian) Server at anael.eu Port 80 
-Configure l'apparition d'une ligne d'information sur le type de serveur web (Apache) et le nom de domaine lors de l'affichage de messages générés par le serveur (page d'erreur, listing de fichiers, ...). +  * **Minimal** : Apache/2.2.16 Server at anael.eu Port 80 
-%%%Je trouve visuellement plus propre de ne pas afficher cette information, et met donc la valeur de l'option à "Off"+  * **Minor** : Apache/2.2 Server at anael.eu Port 80 
-%%%Les informations délivrées sur Apache sont contrôlées par l'option ServerTokens, pas de risque de fuite subtile par là :=) +  * **Major** : Apache/2 Server at anael.eu Port 80 
-%%% +  * **Prod** : Apache Server at anael.eu Port 80 
-%%%Ce qui donne : +</note> 
-///[apache+Je définit la valeur à **Prod** afin de retourner le moins d'informations possible sur l'OS et la version d'Apache. 
-# commentaires....+\\ 
 +Ceci permet d'éviter les attaques ciblées qui sont effectuées lorsqu'un vulnérabilité est découverte sur une version particulière d'Apache. 
 +\\ 
 +[[http://httpd.apache.org/docs/2.2/mod/core.html#servertokens|Doc. Apache]
 + 
 +==== ServerSignature ==== 
 +Affiche les informations configurée par ServerTokens lors de l'affichage de messages générés par le serveur (page d'erreur, listing de fichiers, ...). 
 +\\ 
 +<note tip>Les différentes valeurs possibles sont : 
 +  * **Email** : Apache Server at anael.eu Port 80 //avec un lien vers admin@an*el.eu si l'on clique sur "anael.eu"// 
 +  * **On** : Apache Server at anael.eu Port 80 
 +  * **Off** : //rien n'est affiché// 
 +</note> 
 +Je ne trouve pas utile d'afficher cette information, et met donc la valeur de l'option à **Off**
 + 
 + 
 +===== Fichier de configuration final ===
 +<file apache security># commentaires....
 <Directory /> <Directory />
         AllowOverride None         AllowOverride None
Ligne 95: Ligne 110:
 ServerTokens Prod ServerTokens Prod
 # commentaires.... # commentaires....
-ServerSignature Off +ServerSignature Off</file>
-/// +
-%%% +
-!!!! V) Relancer Apache +
-Voila, notre serveur web est un minima adapté à nos besoins en performance & en sécurité. +
-%%%Afin que notre nouvelle conf soit prise en considération, on relance Apache en douceur : +
-///[bash] +
-service apache2 reload +
-/// +
-Le reload permet de faire relire le fichier de configuration à Apache une fois que chaque process fils à finit son travail. +
-%%%Le restart stoppe immédiatement le process fils pour relancer le serveur (interruption du service pour le client)+
  
  
-!!!! V) Groupe par défaut de user-web 
-Un utilisateur user-web a été créé il y a quelques billets de cela pour gérer tous les sites web. 
-%%%Seulement par défaut son groupe primaire était user-web (user-web:user-web). 
-%%%Ce qui signifie que pour tout fichier qu'il crée, apache (www-data:www-data) n'a pas de droits sur le fichier ! (On utilise le groupe pour donner les droits à apache ;-)). 
-%%%J'ai donc décidé de changer le groupe par défaut de user-web vers www-data. 
-%%%Le plus simple à été de supprimer l'utilisateur / le recréer dans le bon groupe :-) (aucune perte de données) 
-///[bash] 
-deluser user-web 
-adduser user-web --ingroup www-data 
-/// 
-Et pour bien faire, on redonne le répertoire /home/user-web à notre nouvel utilisateur avec son nouveau groupe : 
-///[bash] 
-chown -R user-web:www-data /home/user-web/ 
-/// 
-[Doc.|http://www.misfu.com/gestion-utilisateurs-linux.html|fr] 
-%%% 
-%%% 
-%%%Voila quelques modifications de faites qui me faciliteront la tâche pour la suite ! 
  
 +===== Relancer Apache =====
 +La protection du serveur web a été renforcée. Afin que notre nouvelle conf soit prise en considération, on relance Apache en douceur :
 +<code bash>service apache2 reload</code>
 +L'option **reload** permet de faire relire le fichier de configuration à Apache une fois que chaque process fils à finit son travail.
 +\\
 +L'option **restart** stoppe immédiatement les process fils pour relancer le serveur (interruption du service pour le client)
 +
 +\\
 +===== Liens =====
 +  * [[.:|Retour à la liste des tutoriels Apache]]
 +  * [[:|Retour à la liste des tutoriels]]