GNU/Linux >> Tutoriels Linux >  >> Debian

Chrooter Apache 2.4 avec mod_unixd sur Debian 8 (Jessie)

Ce guide explique comment configurer mod_unixd avec Apache 2.4 sur un système Debian Jessie. Avec mod_unixd, vous pouvez exécuter Apache dans un environnement chroot sécurisé et rendre votre serveur moins vulnérable aux tentatives d'effraction qui tentent d'exploiter les vulnérabilités d'Apache ou de vos applications Web installées. Le module mod_unixd remplace le module mod_chroot, qui était utilisé dans l'ancien apache 2.2.

1 Remarque préliminaire

Je suppose que vous avez un système Debian 8 en cours d'exécution avec un Apache fonctionnel, par exemple. comme indiqué dans ce tutoriel :Tutoriel du serveur Debian 8 Jessie LAMP avec Apache 2, PHP 5 et MariaDB. En plus de cela, je suppose que vous avez un ou plusieurs sites Web configurés dans le répertoire /var/www (par exemple, si vous utilisez ISPConfig).

Le serveur que j'utilise ici a l'adresse IP 192.168.1.100 et le nom d'hôte server1.example.com . Veuillez remplacer ces valeurs par l'adresse IP et le nom d'hôte de votre serveur partout où ils apparaissent dans le didacticiel.

2 Configurer Apache

Le module apache mod_unixd qui offre la fonction Chroot dans Apache 2.4 fait partie des modules de base d'Apache et est compilé statiquement dans le binaire Apache sur Debian 8, nous n'avons donc pas besoin d'installer de logiciel supplémentaire pour l'utiliser.

Je souhaite utiliser le répertoire /var/www comme répertoire contenant la prison chroot. Apache de Debian utilise le fichier PID /var/run/apache2.pid; quand Apache est chrooté sur /var/www, /var/run/apache2.pid se traduit par /var/www/var/run/apache2.pid. Par conséquent, nous créons ce répertoire maintenant :

mkdir -p /var/www/var/run
chown -R root:root /var/www/var/run

Maintenant, nous devons dire à Apache que nous voulons utiliser /var/www comme répertoire chroot. Nous ouvrons /etc/apache2/apache2.conf, et juste en dessous de la ligne PidFile, nous ajoutons une ligne ChrootDir :

nano /etc/apache2/apache2.conf
[...]
#
# PidFile: The file in which the server should record its process
# identification number when it starts.
# This needs to be set in /etc/apache2/envvars
#
PidFile ${APACHE_PID_FILE}
ChrootDir /var/www
[...]

Ensuite, nous devons dire à nos vhosts que la racine du document a changé (par exemple, un DocumentRoot /var/www se traduit maintenant en DocumentRoot /). Nous pouvons le faire soit en changeant la directive DocumentRoot de chaque vhost, soit plus facilement, en créant un lien symbolique dans le système de fichiers.

2.1 Première méthode :modification de DocumentRoot

Supposons que nous ayons un vhost avec DocumentRoot /var/www. Nous devons maintenant ouvrir la configuration vhost de ce vhost et changer DocumentRoot /var/www en DocumentRoot /. En conséquence, DocumentRoot /var/www/web1/web serait désormais traduit en DocumentRoot /web1/web, et ainsi de suite. Si vous souhaitez utiliser cette méthode, vous devez modifier le DocumentRoot pour chaque vhost.

Cette méthode est plus simple, car vous n'avez à le faire qu'une seule fois et vous n'avez pas à modifier la configuration de vhost. Nous créons un lien symbolique pointant de /var/www/var/www vers /var/www :

mkdir -p /var/www/var
cd /var/www/var
ln -s ../../ www

Enfin, nous devons arrêter Apache, créer un lien symbolique de /var/run/apache2.pid vers /var/www/var/run/apache2.pid, et le redémarrer :

service apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
service apache2 start

C'est ça. Vous pouvez maintenant appeler vos pages Web comme avant, et elles devraient être servies sans problème, tant qu'il s'agit de fichiers HTML statiques ou en utilisant mod_php.

Je vais tester cela maintenant avec une page phpinfo(). Ouvrez un nouveau fichier info.php avec nano à la racine du document du site Web par défaut :

nano /var/www/html/info.php

et ajoutez le contenu suivant :

<php
phpinfo();

Enregistrez le fichier et ouvrez le nom d'hôte de votre serveur ou adresse IP dans le navigateur, suivi de /info.php. Exemple :

http://192.168.1.100/info.php

La page suivante devrait maintenant s'afficher lorsque PHP fonctionne correctement :

Jusqu'ici tout va bien, mais comment savoir si Apache est vraiment chrooté ? Essayons d'accéder à un fichier qui est en dehors du chroot, j'utiliserai ici /etc/hosts par exemple.

nano /var/www/html/testchroot.php

avec ce contenu :

<?php
$var = file_get_contents('/etc/hosts');
echo 'The content of /etc/hosts is: <br />' . $var;

et ouvrez l'URL du fichier de test dans un navigateur. Le résultat est :

Comme vous pouvez le voir, le contenu du fichier /etc/hosts n'est plus accessible depuis ce script PHP.

Supprimez les fichiers de test si vous n'en avez plus besoin :

rm /var/www/html/testchroot.php
rm /var/www/html/info.php

Si vous utilisez CGI, par ex. Perl, Ruby, etc., vous devez alors copier l'interpréteur (par exemple /usr/bin/perl, etc.) dans la prison chroot avec toutes les bibliothèques nécessaires à l'interpréteur. Vous pouvez en savoir plus sur les bibliothèques requises avec la commande ldd, par exemple

ldd /usr/bin/perl
[email protected]:/var/www/html# ldd /usr/bin/perl
linux-vdso.so.1 (0x00007ffe951f4000)
libperl.so.5.20 => /usr/lib/x86_64-linux-gnu/libperl.so.5.20 (0x00007f1dafe54000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1dafc50000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1daf94f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1daf732000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1daf387000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f1daf150000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1db0214000)
[email protected]:/var/www/html#

ou utilisez les outils de jailkit pour créer l'environnement de la prison. Si vous avez copié tous les fichiers requis, mais que la page ne fonctionne toujours pas, vous devriez consulter le journal des erreurs Apache /var/log/apache2/error.log . Habituellement, il vous indique où se situe le problème.

  • mod_unixd :https://httpd.apache.org/docs/2.4/mod/mod_unixd.html
  • Apache :http://httpd.apache.org/
  • Debian :http://www.debian.org/

Debian
  1. Accélérez Apache avec mod_pagespeed et Memcached sur Debian 8

  2. Configuration de la réplication maître-maître avec MySQL sur Debian 8 (Jessie)

  3. Comment installer WebDAV avec Lighttpd sur Debian 8 (Jessie)

  4. Installer phpMyAdmin avec Apache sur Debian 9 - Processus étape par étape ?

  5. Installer phpMyAdmin sur Debian 11 avec Apache

Comment installer phpMyAdmin avec Apache sur Debian 11 / Debian 10

Installer phpMyAdmin avec Apache (LAMP) sur Debian 10 Buster

Comment installer LAMP (Apache, MySQL, PHP) sur Debian 8 Jessie

Comment installer Apache avec PHP-FPM sur Debian 10

Installer Zabbix sur Debian 11 Bullseye avec MySQL/MariaDB &Apache

Comment installer Apache avec Python Mod_wsgi sur Debian 10