Je viens de créer une boîte Ubuntu 11.10 puis apt-get install apache2 php5d’installer apache2 et PHP 5 sur la boîte. Maintenant, il fonctionne comme un "serveur Web" et il charge le "Ça marche!" page. Maintenant, j'essaie de renforcer la sécurité et j'ai les questions suivantes sur les serveurs Web Linux:
- Qui devrait fonctionner comme Apache?
- Dans quel groupe cet utilisateur devrait-il être?
- Quel (s) paquet (s) peut faire fonctionner PHP (et Apache?) En tant que propriétaire des fichiers? (comme sur les hôtes Web partagés) Dois-je utiliser ces packages? Sont-ils faciles / réalisables à maintenir sur un petit système?
- Quelles devraient être les autorisations par défaut pour les fichiers et les dossiers servis sur le Web avec Apache exécuté en tant que
www-data? Pour Apache / PHP fonctionnant en tant qu'utilisateur?
J'ai effectué les opérations suivantes lors de l'examen de la configuration par défaut:
Structure de fichier
Lorsque je cd /fais une ls -alliste du contenu, je vois /var:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Si cdj'entre varet que ls -alje vois:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Enfin, à l'intérieur /var/wwwje vois:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
Ce que je retiens surtout, c’est que jusqu’à présent, tous ces fichiers appartiennent à root:root, ils ont des permissions de 644 et les répertoires ont des permissions de 755.
Autorisations d'Apache
Si je crée un fichier en tant que root /var/www/test.phpavec le contenu:
<?php echo shell_exec('whoami');
et chargez ce fichier dans un navigateur www-data, me dit-il , qui est le même que dans le /etc/apache2/envvarsfichier:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Si je le fais, ps aux | grep -i apacheje vois ce qui suit:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
Alors, qui est Apache en cours d'exécution? Il semble que le premier processus soit rootpeut-être le même, peut-être tiré du /etc/init.d/apachescript lorsque le système a démarré et des autres processus www-datacréés à partir du premier. Est-ce exact?
Ensuite, si je saisis, groups www-dataje vois www-data : www-data- cela a donc l'air d'être uniquement dans le www-datagroupe. Je suppose que c'est aussi une pratique courante.
Hébergement partagé et sécurité
Donc, si je comprends bien les choses, si Apache est exécuté en tant que www-dataet que je veux qu’Apache puisse lire un répertoire, le xbit doit être défini pour le monde (autre) group ( o+x), ainsi que pour tous les parents. répertoires tout au long de la chaîne ( www, var). Et si je veux qu'apache soit capable de lire un fichier, le o+rbit doit être défini.
Malheureusement, je pense que cela introduit une faille de sécurité pour plusieurs applications et / ou plusieurs utilisateurs sur la même machine Linux: Tous les fichiers Web doivent être lisibles par tout le monde, et donc ils sont également accessibles par d'autres applications et d'autres utilisateurs du système. Si une application installée sur le système présentait une vulnérabilité de sécurité autorisant une saisie utilisateur brute et non validée, qui était ensuite exécutée par PHP, un attaquant distant pourrait alors parcourir tous les autres fichiers du système Web lisibles par tout le monde. De même, si la boîte comptait plusieurs utilisateurs et si un utilisateur connaissait le chemin d'accès aux fichiers Web d'un autre utilisateur, il pourrait alors lire le contenu du fichier (et voir des informations sensibles telles que les chaînes de connexion à la base de données, etc.).
Je l' ai entendu parler de deux paquets, suphpet phpsuexecqui traitent les dossiers permettant des utilisateurs à être servi « comme les » sur un système partagé. L’une des particularités de ce logiciel est qu’il permet aux applications Web (telles que Wordpress) de créer et de modifier des fichiers, ce qui est très utile pour l’ajout de thèmes, de plug-ins et la mise à niveau du logiciel. Bien sûr, il est probablement plus sûr de faire ces choses manuellement, mais peut-on faire un compromis avec l’un des paquets mentionnés ci-dessus? Ou en utilisant éventuellement chownpour rendre le groupe de répertoires wordpress appartenir www-dataet définir le bit collant sur le groupe ( g+s)?
Je les ai uniquement utilisées en tant qu'utilisateur final d'une société d'hébergement Web. Je ne connais donc pas les tenants et les aboutissants de ces solutions, et même s'il est raisonnable de les installer sur un petit système ou s'il existe un autre système. des mesures de sécurité que je devrais utiliser à la place, mais je pensais les mentionner ici car elles semblaient être un moyen possible de répondre à certaines de mes préoccupations.
Retour aux questions
- Qui devrait fonctionner comme Apache?
- Dans quel groupe cet utilisateur devrait-il être?
- Quel (s) paquet (s) peut faire fonctionner PHP (et Apache?) En tant que propriétaire des fichiers? (comme sur les hôtes Web partagés) Dois-je utiliser ces packages? Sont-ils faciles / réalisables à maintenir sur un petit système?
- Quelles devraient être les autorisations par défaut pour les fichiers et les dossiers servis sur le Web avec Apache exécuté en tant que
www-data? Pour Apache / PHP fonctionnant en tant qu'utilisateur?