[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]
L'utilitaire chroot
est souvent utilisé pour emprisonner un
démon dans une arborescence restreint. Vous pouvez l'utiliser pour isoler des
services d'autres services, pour que les problèmes de sécurité d'un paquet
logiciel ne mettent pas en péril le serveur tout entier. Quand vous utiliser
le script makejail
, mettre en place et mettre à jour
l'arborescence chrooté est beaucoup plus facile.
FIXME : Apache peut aussi être chrooté en utilisant http://www.modsecurity.org
qui est
disponible dans libapache-mod-security
(pour Apache 1.x) et
libapache2-mod-security
(pour Apache 2.x).
Ce document est copyright 2002 Alexandre Ratti. Il est publié sous une double
licence, la GPL version 2 (GNU General Public License) et la
GNU-FDL 1.2 (GNU Free Documentation Licence) et est inclus dans ce manuel
avec sa permission explicite (depuis le document
d'origine
).
Cette procédure a été testée sur Debian GNU/Linux 3.0 (Woody) avec
makejail
0.0.4-1 (de Debian/testing).
Connectez-vous en tant que root
et créez le nouveau répertoire
prison :
$ mkdir -p /var/chroot/apache
Créez un nouvel utilisateur et un nouveau groupe. Le serveur Apache chrooté
fonctionnera sous cet utilisateur et groupe, qui n'est utilisé pour rien
d'autre sur le système. Dans cet exemple, l'utilisateur et le groupe sont
appelés chrapach
.
$ adduser --home /var/chroot/apache --shell /bin/false \ --no-create-home --system --group chrapach
FIXME : Est-ce qu'un nouvel utilisateur est nécessaire ? (Apache fonctionne déjà sous l'utilisateur apache)
Installez Apache comme d'habitude sous Debian : apt-get install apache
Configurez Apache (par exemple définissez les sous-domaines, etc.). Dans
le fichier de configuration /etc/apache/httpd.conf
, positionnez
les options Group et User à chrapach.
Redémarrez Apache et assurez-vous que le serveur fonctionne correctement.
Maintenant, stoppez le démon Apache.
Installez makejail
(disponible dans Debian/testing actuellement).
Vous devriez également installer wget
et lynx
car
ils sont utilisés par makejail
pour tester le serveur
chrooté : apt-get install makejail wget lynx
Copiez le fichier de configuration exemple pour Apache dans le répertoire
/etc/makejail
:
# cp /usr/share/doc/makejail/examples/apache.py /etc/makejail/
Éditez /etc/makejail/apache.py
. Vous devez changer les options
chroot, users et groups. Pour exécuter cette
version de makejail
, vous pouvez également ajouter une option
packages
. Consultez la documentation
makejail
. Un exemple est fourni ici :
chroot="/var/chroot/apache" testCommandsInsideJail=["/usr/sbin/apachectl start"] processNames=["apache"] testCommandsOutsideJail=["wget -r --spider http://localhost/", "lynx --source https://localhost/"] preserve=["/var/www", "/var/log/apache", "/dev/log"] users=["chrapach"] groups=["chrapach"] packages=["apache", "apache-common"] userFiles=["/etc/password", "/etc/shadow"] groupFiles=["/etc/group", "/etc/gshadow"] forceCopy=["/etc/hosts", "/etc/mime.types"]
FIXME : Certaines options semblent ne pas fonctionner
correctement. Par exemple, /etc/shadow
et
/etc/gshadow
ne sont pas copiés, alors que
/etc/password
et /etc/group
sont intégralement
copiés au lieu d'être filtrés.
Créez l'arborescence de chroot : makejail /etc/makejail/apache.py
Si les fichiers /etc/password
et /etc/group
ont été
intégralement copiés, entrez :
$ grep chrapach /etc/passwd > /var/chroot/apache/etc/passwd $ grep chrapach /etc/group > /var/chroot/apache/etc/group
pour les remplacer avec des copies filtrées.
Copiez les pages du site web et les journaux dans la prison. Ces fichiers ne
sont pas copiés automatiquement (consultez l'option preserve du
fichier de configuration de makejail
).
# cp -Rp /var/www /var/chroot/apache/var # cp -Rp /var/log/apache/*.log /var/chroot/apache/var/log/apache
Éditez le script de démarrage pour le démon de journaux système pour qu'il
écoute également sur la socket /var/chroot/apache/dev/log
. Dans
/etc/default/syslogd
, remplacez :
SYSLOGD="" par SYSLOGD=" -a
/var/chroot/apache/dev/log" et redémarrez le démon
(/etc/init.d/sysklogd restart).
Éditez le script de démarrage d'Apache (/etc/init.d/apache
).
Vous pouvez avoir besoin d'effectuer certaines changements au script de
démarrage par défaut pour qu'il fonctionne correctement dans une arborescence
chrooté. Comme :
configurer une nouvelle variable CHRDIR au début du fichier ;
éditer les sections start, stop, reload, etc. ;
ajouter une ligne pour monter et démonter le système de fichiers
/proc
dans la prison.
#! /bin/bash # # apache Start the apache HTTP server. # CHRDIR=/var/chroot/apache NAME=apache PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/apache SUEXEC=/usr/lib/apache/suexec PIDFILE=/var/run/$NAME.pid CONF=/etc/apache/httpd.conf APACHECTL=/usr/sbin/apachectl trap "" 1 export LANG=C export PATH test -f $DAEMON || exit 0 test -f $APACHECTL || exit 0 # ensure we don't leak environment vars into apachectl APACHECTL="env -i LANG=${LANG} PATH=${PATH} chroot $CHRDIR $APACHECTL" if egrep -q -i "^[[:space:]]*ServerType[[:space:]]+inet" $CONF then exit 0 fi case "$1" in start) echo -n "Starting web server: $NAME" mount -t proc proc /var/chroot/apache/proc start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON \ --chroot $CHRDIR ;; stop) echo -n "Stopping web server: $NAME" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo umount /var/chroot/apache/proc ;; reload) echo -n "Reloading $NAME configuration" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" \ --signal USR1 --startas $DAEMON --chroot $CHRDIR ;; reload-modules) echo -n "Reloading $NAME modules" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo \ --retry 30 start-stop-daemon --start --pidfile $PIDFILE \ --exec $DAEMON --chroot $CHRDIR ;; restart) $0 reload-modules exit $? ;; force-reload) $0 reload-modules exit $? ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}" exit 1 ;; esac if [ $? == 0 ]; then echo . exit 0 else echo failed exit 1 fi
FIXME : Est-ce que le premier processus Apache devrait être lancé avec un autre utilisateur que root (c'est-à-dire ajouter --chuid chrapach:chrapach) ? Désavantage : chrapach devra avoir un accès en écriture aux journaux, ce qui est étrange.
Remplacez dans /etc/logrotate.d/apache
/var/log/apache/*.log par
/var/chroot/apache/var/log/apache/*.log
Démarrez Apache (/etc/init.d/apache start
) et vérifiez ce qui
est indiqué dans les journaux de la prison
(/var/chroot/apache/var/log/apache/error.log
). Si votre
configuration est plus complexe (e.g. si vous utilisez également PHP et
MySQL), des fichiers seront probablement manquants. Si certains fichiers ne
sont pas copiés automatiquement par makejail
, vous pouvez les
indiquer dans les options forceCopy (pour copier les fichiers
directement) ou packages (pour copier les paquets en entier et leurs
dépendances) du fichier de configuration /etc/makejail/apache.py
.
Entrez ps aux | grep apache pour vous assurer qu'Apache fonctionne. Vous devriez voir quelque chose comme :
root 180 0.0 1.1 2936 1436 ? S 04:03 0:00 /usr/sbin/apache chrapach 189 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 190 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 191 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 192 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 193 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache
Assurez-vous que les processus Apache fonctionnent bien dans le chroot en
observant le système de fichiers /proc
: ls -la
/proc/numero_processus/root/. où numero_processus
est l'un des numéros de PID de la liste ci-dessus (2e colonne ; 189 par
exemple). La liste des entrées pour une arborescence restreinte devraient
être ainsi :
drwxr-sr-x 10 root staff 240 Dec 2 16:06 . drwxrwsr-x 4 root staff 72 Dec 2 08:07 .. drwxr-xr-x 2 root root 144 Dec 2 16:05 bin drwxr-xr-x 2 root root 120 Dec 3 04:03 dev drwxr-xr-x 5 root root 408 Dec 3 04:03 etc drwxr-xr-x 2 root root 800 Dec 2 16:06 lib dr-xr-xr-x 43 root root 0 Dec 3 05:03 proc drwxr-xr-x 2 root root 48 Dec 2 16:06 sbin drwxr-xr-x 6 root root 144 Dec 2 16:04 usr drwxr-xr-x 7 root root 168 Dec 2 16:06 var
Pour automatiser ce test, vous pouvez entrer :ls -la /proc/`cat /var/chroot/apache/var/run/apache.pid`/root/.
FIXME : Ajouter d'autres tests qui peuvent être exécuter pour s'assurer que la prison est fermées ?
La raison pour laquelle j'aime cela est que la mise en place d'une prison n'est pas très difficile et que le serveur peut être mis à jour avec seulement deux lignes :
apt-get update && apt-get install apache makejail /etc/makejail/apache.py
Si vous recherchez plus d'informations, vous pouvez envisager ces sources d'informations sur lesquelles les informations présentées sont basées :
page d'accueil de
makejail
, ce programme a été écrit par Alain Tesio
[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]
Securing Debian Manual
Version: 3.13, Sun, 08 Apr 2012 02:48:09 +0000jfs@debian.org