Chroot ton shell avec Jailkit
Dernière mise à jour de l'article : 01/10/2018.
chroot est une commande de base du projet GNU permettant de changer le répertoire racine apparent d'un processus.
Il y a deux avantages à cette pratique. Tout d'abord, le processus est isolé dans son environnement et ne peut pas, a priori, porter atteinte au reste du système d'exploitation. Ensuite, il est possible de choisir les programmes présents dans l'environnement afin d'en restreindre l'usage. Cela peut être utile dans bien des cas, par exemple pour permettre un accès SSH restreint à l'espace disque d'un hébergement web mutualisé.
Jailkit est un ensemble d'outils permettant de limiter facilement le shell d'un utilisateur — ou d'un démon — dans un environnement cloisonné de type chroot. Ce tutoriel n'a pas vocation à présenter toutes les possibilités offertes par le programme mais d'en donner un aperçu par le biais d'un exemple concret. L'objectif est de créer un environnement isolé basique et d'y enfermer un nouvel utilisateur, le tout sur une distribution Debian GNU/Linux.
Informations techniques
Nom du programme : Jailkit
Version utilisée : 2.19
Licences : BSD et GNU GPL v2
Auteur : Olivier Sessink
Site web de l'auteur : http://olivier.sessink.nl
Site web du programme : http://olivier.sessink.nl/jailkit
Distribution utilisée : Debian GNU/Linux 9.5 « Stretch »
chroot (article Wikipédia) : https://fr.wikipedia.org/wiki/Chroot
Installation de Jailkit
Jailkit n'est pas présent dans les dépôts logiciels de Debian. Néanmoins, son auteur nous facilite la tâche en nous permettant de créer facilement un paquet DEB depuis les sources du programme. Il va tout d'abord falloir installer quelques outils nécessaires à sa compilation. il faut commencer par se connecter à la machine sur laquelle installer Jailkit. Les étapes suivantes sont énoncées ci-dessous.
Se connecter en tant que super-utilisateur :
su -
Installer les dépendances :
apt install build-essential debhelper
Télécharger le programme :
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.bz2
Le décompresser :
tar xjvf jailkit-2.19.tar.bz2
Compiler le programme et créer un paquet DEB :
cd jailkit-2.19 echo 5 > debian/compat ./debian/rules binary
Installer le paquet DEB :
cd .. && dpkg -i jailkit_2.19-1_*.deb
Supprimer le reste :
rm -rf jailkit*
Préparation de l'environnement isolé
Créer le répertoire racine de l'environnement :
mkdir /home/jail
L'initialiser :
jk_init -v -j /home/jail limitedshell basicshell
Là, je dois quelques explications. Par défaut, l'environnement isolé ne dispose d'aucune fonctionnalité. Il est possible d'ajouter des commandes une à une via jk_cp ou de définir des profils d'utilisation regroupant des packs de commandes. Ceux-ci se configurent dans le fichier /etc/jailkit/jk_init.ini — au format INI. Chaque section représente un jeu de fonctionnalités que l'on peut ajouter à l'environnement. Cela peut être des commandes, des fichiers ou des périphériques. Une section peut dépendre d'autres ; si bien qu'en activant l'une, les autres sont également ajoutées. Le fichier jk_init.ini dispose déjà de nombreuses sections. Il est bien évidemment possible de le compléter afin de répondre au mieux à ses besoins.
Ainsi, la section basicshell utilisée lors de la dernière étape ajoute les commandes usuelles d'un système de type Unix (ls, mv, cp, rm...).
La section uidbasics mérite une attention particulière car elle inclue des bibliothèques qui dépendent de l'architecture matérielle. Pas de problème pour un système 32 ou 64 bits standard, mais il faudra penser à la compléter pour des architectures plus « exotiques » — de type ARM, par exemple.
Il est fortement conseiller de parcourir attentivement le fichier jk_init.ini afin d'identifier précisément les pouvoirs alloués. Par exemple, la section netutils ajoute à l'environnement isolé les commandes wget et rsync — et quelques autres — ainsi que l'ensemble des sections netbasics, ssh, sftp et scp qui apportent à leur tour tout un lot de fonctionnalités et de dépendances. Pour ajouter à notre environnement la section netutils — et tout ce qui en découle — il faut exécuter la commande suivante :
jk_init -v -j /home/jail netutils
Lorsqu'on ajoute une commande à l'environnement, Jailkit copie la version correspondante depuis le système hôte. Il est donc nécessaire que la commande soit déjà installée sur le système avant d'essayer de la dupliquer. Par ailleurs, il peut arriver que le système hôte profite de mises à jour logicielles. Afin de tenir également l'environnement isolé à jour, il est nécessaire d'utiliser la commande jk_update.
Enfin, il est possible qu'un processus ou un utilisateur ait besoin d'un répertoire /tmp. Il peut s'avérer utile de le créer en lui attribuant les droits correspondants :
mkdir -m a=rwx /home/jail/tmp
Isolement d'un utilisateur
L'environnement isolé est désormais prêt à être utilisé. Nous pouvons créer un nouvel utilisateur :
adduser JAIL_USER
Puis lui imposer l'usage de l'environnement restreint grâce à la commande suivante. À noter que celle-ci se charge de déplacer le répertoire utilisateur dans l'arborescence cloisonnée :
jk_jailuser -m -j /home/jail JAIL_USER
Définir Bash comme shell de l'utilisateur dans son nouvel environnement :
sed -i "/JAIL_USER/ s/\\/usr\\/sbin\\/jk_lsh/\\/bin\\/bash/" /home/jail/etc/passwd
Il est intéressant de remarquer que plusieurs utilisateurs peuvent se partager le même environnement isolé, ainsi que plusieurs environnements différents peuvent aussi coexister. Cela peut s'avérer pratique pour faire tourner plusieurs instances d'un même service sur le même hôte, par exemple.
Se déconnecter :
exit
Il est désormais possible de se connecter avec le nouvel utilisateur, localement ou par SSH.
Voici à quoi ressemble la racine de l'environnement telle qu'est est vue par ce nouvel utilisateur :
JAIL_USER@HOSTNAME:~$ ls -l / total 28 drwxr-xr-x 2 root root 4096 Feb 3 10:54 bin drwxr-xr-x 2 root root 4096 Feb 3 10:53 dev drwxr-xr-x 3 root root 4096 Feb 3 10:54 etc drwxr-xr-x 3 root root 4096 Feb 3 10:53 home drwxr-xr-x 3 root root 4096 Feb 3 10:53 lib drwxr-xr-x 2 root root 4096 Feb 3 10:53 lib64 drwxr-xr-x 4 root root 4096 Feb 3 10:53 usr
Pour aller plus loin, il est fortement recommandé de lire le manuel et le site web de Jailkit. Les options ne sont pas nombreuses et le fonctionnement somme toute assez logique. L'outil n'est pas très difficile à prendre en main et les services qu'il peut rendre sont multiples. Attention toutefois, la sécurité du système n'est pas absolue et un environnement mal configuré peut présenter de grands risques pour le système hôte !
Article sous licence Creative Commons BY-SA 3.0 France.