Chroot ton shell avec Jailkit

Logo de 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.

Logo de Jailkit
Logo de Jailkit

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.

Vus : 1311
Publié par Cyprien Pouzenc : 27