Je viens de créer une boîte Ubuntu 11.10 puis apt-get install apache2 php5
d’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 -al
liste du contenu, je vois /var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Si cd
j'entre var
et que ls -al
je vois:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Enfin, à l'intérieur /var/www
je 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.php
avec 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/envvars
fichier:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Si je le fais, ps aux | grep -i apache
je 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 root
peut-être le même, peut-être tiré du /etc/init.d/apache
script lorsque le système a démarré et des autres processus www-data
créés à partir du premier. Est-ce exact?
Ensuite, si je saisis, groups www-data
je vois www-data : www-data
- cela a donc l'air d'être uniquement dans le www-data
groupe. 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-data
et que je veux qu’Apache puisse lire un répertoire, le x
bit 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+r
bit 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, suphp
et phpsuexec
qui 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 chown
pour rendre le groupe de répertoires wordpress appartenir www-data
et 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?