Product SiteDocumentation Site

5.10. Paranoïa généralisée du suid et du chroot

chroot est l'une des plus puissantes possibilités pour restreindre un démon, un utilisateur ou un autre service. Imaginez simplement une prison autour de votre cible, de laquelle votre cible ne peut s'échapper (normalement, mais il y a encore beaucoup de conditions qui peuvent permettre de s'échapper d'une telle prison). Si vous ne faites pas confiance à l'utilisateur ou au service, vous pouvez créer un environnement racine modifié pour lui. Cela peut utiliser pas mal d'espace disque car vous devez copier tous les exécutables nécessaires, ainsi que des bibliothèques, dans la prison. Mais alors, même si l'utilisateur fait quelque chose de malveillant, l'étendue des dommages est limitée à la prison.
Un grand nombre de services fonctionnant en démons pourraient bénéficier de ce type d'arrangement. Les démons que vous installez dans votre distribution Debian ne seront cependant pas fournis chrootés[50] par défaut.
Exemples : serveurs de noms de domaine (comme bind), serveurs web (comme apache), serveurs de courrier (comme sendmail) et serveurs FTP (comme wu-ftpd). La complexité de BIND est probablement la raison pour laquelle il a été exposé à de nombreuses attaques ces dernières années (consultez Section 5.7, « Sécurisation de BIND »).
Cependant, Debian fournit des logiciels qui peuvent vous aider à mettre en place des environnements chroot. Consultez Section 5.10.1, « Créer des environnements chrooté automatiquement ».
De toute façon, si vous exécutez un quelconque service sur votre système, vous devriez considérer de le faire fonctionner de la façon la plus sécurisée possible. Cela comprend : révoquer les droits du superutilisateur, le faire fonctionner dans un environnement restreint (comme une prison chroot) ou le remplacer par un équivalent plus sécurisé.
Cependant, soyez prévenu qu'une prison chroot peut être cassée si l'utilisateur fonctionnant dedans est le superutilisateur. Vous devez donc faire fonctionner le service avec un utilisateur sans droits élevés. En limitant son environnement, vous limitez les fichiers lisibles et exécutables par tout le monde auxquels le service peut accéder, vous limitez donc aussi les possibilités d'une augmentation de droits en utilisant des failles de sécurité sur le système local. Même dans une situation où vous ne pouvez pas être complètement certain qu'il n'y a pas de moyen pour un attaquant intelligent de sortir de la prison d'une manière ou d'une autre. Utiliser seulement des programmes serveur ayant une réputation de sécurité est une bonne mesure de sécurité additionnelle. Même des trous minuscules comme des descripteurs de fichier peuvent être utilisés par un attaquant doué pour s'introduire dans le système. Après tout, chroot n'a pas été conçu pour être un outil de sécurité, mais un outil de test.

5.10.1. Créer des environnements chrooté automatiquement

Plusieurs programmes permettent de chrooter automatiquement des serveurs et services. Debian fournit actuellement (accepté en mai 2002) chrootuid de Wietse Venema dans le paquet chrootuid, ainsi que compartment et makejail. Ces programmes peuvent être utilisés pour mettre en place un environnement restreint pour exécuter tout programme (chrootuid vous permet même de l'exécuter avec un utilisateur restreint).
Certains de ces outils peuvent être utilisés pour mettre en place l'environnement chrooté facilement. Le programme makejail, par exemple, peut créer et mettre à jour une prison chroot avec de petits fichiers de configuration (il fournit des fichiers de configuration exemple pour bind, apache, postgresql et mysql). Il tente de deviner et d'installer dans la prison tous les fichiers nécessaires au démon en utilisant strace, stat et les dépendances du paquet Debian. De plus amples renseignements sont disponibles à http://www.floc.net/makejail/. Jailer est un outil semblable disponible à http://www.balabit.hu/downloads/jailer/ et en paquet Debian.


[50] Elle essaie de les faire fonctionner avec le minimum de droits, y compris exécuter les démons avec leur propre utilisateur au lieu de les exécuter en tant que superutilisateur.