Ceci est une ancienne révision du document !
Titre_page
grand1
lorem ipsum
Liens
++But : Mettre en place la directive [PHP|tag:PHP] open_basedir++ % !!!! I) Faille de sécurité Le serveur marche sans soucis, et j'héberge maintenant 2 sites : * http://www.anael.eu (dans /var/www/vhosts/anael.eu/httpdocs/ ) * http://88.191.122.115 (/var/www/vhosts/default/) Chacun des deux sites (même si le second n'est qu'une bête page html :-p) doit-être indépendant : comme deux chambres séparées, on ne rentre pas chez l'autre comme ça ! %Hors, par défaut, je peux accéder avec un script PHP à n'importe qu'elle page ! %Une proof of concept très simple : ///[php] <?php $f = fopen('/var/www/vhosts/default/index.html', 'r'); echo fread($f, 150); fclose($f); ?> /// Retourne : ///[html] <html><body><h1>dedi.anael.eu</h1> <p>Bienvenue sur mon serveur :-)</p> </body></html> /// C'est quand même gênant, d'autant plus si j'utilisais cette méthode pour lire un fichier de configuration contenant des logins / passwords ! !!!! II) Correctif Fort heureusement, nous pouvons réduire l'arborescence autorisée pour chacun des sites hébergé ! % Direction le fichier de config Apache de chaque site : /[bash] nano /etc/apache2/sites-available/anael.eu / On y ajoute l'arborescence minimale pour le site : /[apache] <IfModule mod_php5.c> php_admin_value open_basedir /var/www/vhosts/anael.eu/httpdocs/ </IfModule> / Recharge de la config Apache /[apache] service apache2 reload / Et le tour est joué :) %Afin de s'en assurer, on relance le script PoC : ///[apache] [Sun Jun 20 02:21:23 2010] [error] [client xx.xxx.xxx.xxx] PHP Warning: fopen() [<a href='function.fopen'>function.fopen</a>]: open_basedir restriction in effect. File(/var/www/vhosts/default/index.html) is not within the allowed path(s): (/var/www/vhosts/anael.eu/httpdocs/) in /var/www/vhosts/anael.eu/httpdocs/poc.php on line 2 /// Il faut configurer l'open_basedir pour chaque nouveau site qui sera ajouté ! %Cette manip permet de parer à un très grand nombre d'attaques, réduisant la zone de dégâts uniquement au répertoire contenant le site web fautif ! %Note : Suite à une demande sur IRC, si on souhaite préciser plusieurs dossiers, il convient de les séparer par un __:__ (deux-points). %Exemple : /[apache] <IfModule mod_php5.c> php_admin_value open_basedir /var/www/vhosts/anael.eu/httpdocs/:/tmp/:/dev/null/ </IfModule> /