Chrooter un utilisateur du service SSH


Disclaimer : cet article n’est qu’une traduction française de l’article « Restrict SSH user to directory using chrooted jail » publié par Aaron Kili pour le blog tecmint.com. Tous les crédit lui reviennent de droit.


Pour commencer, qu’est ce qu’un chroot ? Généralement on utilise le mécanisme du chroot (CHange ROOT) afin d’emprisonner un utilisateur dans un nouveau répertoire racine. Le but étant de l’empêcher de remonter dans l’arborescence du serveur. Typiquement on retrouve ce genre de protections dans tous ce qui touche au service FTP. Chaque utilisateur dispose de son emplacement de stockage qu’il peut modifier à sa volonté. En revanche il ne peut pas toucher aux fichiers qui ne lui appartiennent pas (en fait il n’est pas même au courant de l’existence de ces fichiers).

La première étape d’un chrootage c’est de créer le répertoire jail de l’utilisateur. Ça peut être un répertoire quelconque où tout simplement le répertoire home de l’utilisateur. Dans mon cas je vais créer un nouvel utilisateur nommé chroote :

adduser chroote

Le répertoire à chrooter sera donc le répertoire /home/chroote. Ensuite nous allons devoir créer la hiérarchie de dossier de la racine de ce nouvel utilisateur. On commencera donc par créer un répertoire etc, bin, dev, lib et lib64 :

mkdir /home/chroote/dev
mkdir /home/chroote/etc
mkdir /home/chroote/bin
mkdir /home/chroote/lib
mkdir /home/chroote/lib64

Dans le répertoire dev nous allons créer plusieurs fichiers

mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8

Ces devices sont nécessaires au bon fonctionnement de notre jail.  Ensuite nous allons modifier l’owner du répertoire /home/chroote ainsi que les droits :

chown root:root /home/chroote
chmod 0755 /home/chroote

Puis nous allons copier le binaire bash ainsi que les librairies dont il dépend dans le jail de l’utilisateur chroote. Pour copier le binaire /bin/bash :

cp /bin/bash bin/

Pour déterminer les librairies à importer :

ldd bin/bash

Capture du 2019-10-03 20-17-39.png

Comme nous pouvons le voir ici nous avons 4 librairies à importer : 3 dans le répertoire lib/x86_64-linux-gnu et une dans le répertoire lib64. Il nous suffira donc de créer un répertoire x86_64-linux-gnu dans le répertoire lib puis copier les librairies :

mkdir lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libbdl.so.2 lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu
cp /lib64/ld-linux-x86-64.so.2 lib64/

Ensuite il faudra copier les fichiers /etc/passwd et /etc/group dans le répertoire etc:

cp /etc/passwd etc/
cp /etc/group etc/

Enfin il faudra ajouter les lignes suivantes dans le fichier de configuration du service SSH (/etc/ssh/sshd_config) :

Match User chroote
ChrootDirectory /home/chroote

Puis redémarrer le service SSH :

sudo systemctl restart ssh

Si vous essayez de vous connecter via l’utilisateur chroote vous obtiendrez ceci :

Capture du 2019-10-03 20-38-28.png

L’utilisateur est belle et bien chrooté et il n’aura d’ailleurs accès à presque aucun binaire. Pour les lui ajouter il faudra les copier dans le répertoire bin/ et copier les librairies dont dépendent ces binaires 🙂 ! Bien évidemment on ne mettra à disposition de nos utilisateurs chrootés que les binaires dont ils ont besoin 😉 !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s