Comment créer un utilisateur SSH jailed avec Jailkit sur Debian 9 (Stretch)

Ce document décrit comment installer et configurer Jailkit dans le serveur Debian 9 (Stretch). Jailkit est un ensemble d’utilitaires permettant de limiter les comptes utilisateurs à des fichiers spécifiques en utilisant chroot() et ou des commandes spécifiques. Configurer un shell chroot, un shell limité à une commande spécifique ou un démon à l’intérieur d’une prison chroot est beaucoup plus facile et peut être automatisé grâce à ces utilitaires.

Jailkit est connu pour être utilisé dans les appareils de sécurité réseau de plusieurs grandes entreprises de sécurité informatique, les serveurs Internet de plusieurs grandes entreprises, les serveurs Internet de fournisseurs de services Internet, ainsi que de nombreuses petites entreprises et utilisateurs privés qui ont besoin de sécuriser les processus cvs, sftp, shell ou daemon.

1 Note préliminaire

Ce tutoriel est basé sur le serveur Debian 9, tu dois donc configurer une installation de serveur Debian de base avant de poursuivre ce tutoriel. Le système doit avoir une adresse IP statique. J’utilise 192.168.0.100 comme adresse IP dans ce tutoriel et server1.example.com comme nom d’hôte.

2 Installe Jailkit

Nous allons d’abord télécharger et installer Jailkit. Au moment de la rédaction de ce guide, la dernière version disponible de Jailkit est la 2.20. Je vais la télécharger et l’installer comme suit :

cd /tmp    
wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz
tar xvfz jailkit-2.20.tar.gz
cd jailkit-2.20

Jailkit nécessite certains paquets avant son installation, nous allons les installer comme suit :

apt-get install build-essential autoconf automake1.11 libtool flex bison debhelper binutils-gold python

Maintenant que notre système est prêt à installer Jailkit, installe-le comme suit :

echo 5 > debian/compat
./debian/rules binary
cd ..
dpkg -i jailkit_2.20-1_amd64.deb

Il installera Jailkit dans le serveur Debian, nous pouvons supprimer les paquets supplémentaires de /tmp:

rm -rf /tmp/jailkit*

3 Jailkit un utilisateur

Nous allons maintenant créer un utilisateur qui sera emprisonné à l’aide de Jailkit comme :

adduser srijan
root@server1:~#adduser srijan
Ajout de l’utilisateur `srijan’ …
Ajout d’un nouveau groupe `srijan’ (1001) …
Ajout d’un nouvel utilisateur `srijan’ (1001) avec le groupe `srijan’ …
Création du répertoire personnel `/home/srijan’ …
Copie des fichiers de `/etc/skel’ …
Saisis le nouveau mot de passe UNIX : <–mot de passe
Retape le nouveau mot de passe UNIX :<–mot de passe
passwd : mot de passe mis à jour avec succès
Changer les informations de l’utilisateur pour srijan
Saisir la nouvelle valeur ou appuyer sur ENTER pour la valeur par défaut
Nom complet [] : <–ENTER
Numéro de chambre [] :<–ENTER
Téléphone professionnel [] :<–ENTER
Téléphone domicile [] :<–ENTER
Autre [] :<–ENTER
Les informations sont-elles correctes ? [Y/n] <–Y
root@server1:~#

Dans mon cas, je crée l’utilisateur srijan, tu peux utiliser n’importe quel nom.

Ensuite, nous allons vérifier les informations sur l’utilisateur srijan dans /etc/passwd comme :

egrep srijan /etc/passwd
root@server1:/tmp# egrep srijan /etc/passwd
srijan:x:1001:1001 :,,,:/home/srijan:/bin/bash
root@server1:/tmp#

Ensuite, nous allons mettre en prison l’utilisateur créé. Crée un répertoire /jail pour l’environnement Jail :

mkdir /jail

Maintenant, nous allons fournir à Jail l’environnement de certains programmes par défaut comme :

jk_init -v /jail netutils basicshell jk_lsh openvpn ssh sftp

Nous pouvons aussi donner d’autres valeurs, la liste complète de l’environnement Jail peut être consultée dans le fichier

nano /etc/jailkit/jk_init.ini

Maintenant, Jail est prêt, il suffit d’ajouter l’utilisateur dans l’environnement :

jk_jailuser -m -j /jail/ srijan

Vérifie à nouveau les valeurs dans /etc/passwd pour l’utilisateur srijan:

egrep srijan /etc/passwd
root@server1:/tmp# egrep srijan /etc/passwd
srijan:x:1001:1001 :,,,:/jail/./home/srijan:/usr/sbin/jk_chrootsh
root@server1:/tmp#

Maintenant, notre utilisateur a été ajouté dans l’environnement Jailed. Je vais connecter le serveur Debian avec le terminal bash avec son IP 192.168.0.100 :

ssh [email protected]
root@server1:~$ ssh [email protected]
L’authenticité de l’hôte ‘192.168.0.100 (192.168.0.100)’ ne peut pas être établie.
L’empreinte de la clé ECDSA est 3d:ca:91:67:96:39:15:b4:0f:6e:c8:2c:92:ef:25:d7.
Es-tu sûr de vouloir continuer à te connecter (oui/non) ? oui
Mot de passe de [email protected] :
Serveur Linux1 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64

Les programmes inclus dans le système Debian GNU/Linux sont des logiciels libres ;
les conditions exactes de distribution de chaque programme sont décrites dans les fichiers individuels
dans /usr/share/doc/*/copyright.

Debian GNU/Linux est fournie avec ABSOLUMENT AUCUNE GARANTIE, dans la mesure où
est autorisé par la loi applicable.
La connexion à 192.168.0.100 est fermée.
root@server1:~$

La connexion est fermée car l’utilisateur n’a pas de shell de journalisation, ajoutons-le dans le fichier de configuration pour Jail :

nano /jail/etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
#srijan:x:1001:1001:,,,:/home/srijan:/usr/sbin/jk_lsh
srijan:x:1001:1001:,,,:/home/srijan:/bin/bash

Cela ajoutera l’invite bash pour l’utilisateur emprisonné srijan. Essaie à nouveau de te connecter à ssh avec l’utilisateur srijan et tu pourras te connecter :

ssh [email protected]

Vérifie maintenant le contenu du répertoire racine, tu remarqueras qu’il a un contenu comme celui-ci :

ls /
srijan@server1:~$ ls /
bin dev etc home lib lib64 usr
srijan@server1:~$

4 Exécution de services et de commandes dans un environnement Jail

Jail peut être utilisé pour exécuter des services dans un environnement Jailed. Si nous voulons exécuter un service dans l’environnement Jail, nous utiliserons la commande jk_chrootlaunch pour cela :

jk_chrootlaunch -j /jail -u srijan -x 'service apache2 start'

Ici, je lance le service d’Apache. De même, tu peux exécuter n’importe quel service ou démon dans un environnement Jailed.

Suppose que nous voulions exécuter une commande particulière dans l’environnement Jail, nous utiliserons alors jk_cp. Testons-la dans l’environnement Jailed lorsque nous exécutons cal, elle s’affiche comme suit :

cal
srijan@server1:~$ cal
bash : cal : commande non trouvée
srijan@server1:~$

Cela signifie que l’environnement Jail ne connaît pas la commande cal. Je vais maintenant l’ajouter dans le serveur Debian comme suit :

jk_cp  -v -j /jail/ /usr/bin/cal
root@server1:~# jk_cp -v -j /jail/ /usr/bin/cal
Créer un lien symbolique /jail/usr/bin/cal vers ncal
Copier /usr/bin/ncal vers /jail/usr/bin/ncal
Créer un lien symbolique /jail/lib/x86_64-linux-gnu/libncurses.so.5 vers libncurses.so.5.9
Copie de /lib/x86_64-linux-gnu/libncurses.so.5.9 vers /jail/lib/x86_64-linux-gnu/libncurses.so.5.9
/jail/lib/x86_64-linux-gnu/libtinfo.so.5 existe déjà, ne le touchera pas
/jail/lib/x86_64-linux-gnu/libc.so.6 existe déjà, ne le touchera pas
/jail/lib/x86_64-linux-gnu/libdl.so.2 existe déjà, ne le touchera pas
/jail/lib64/ld-linux-x86-64.so.2 existe déjà, ne le touchera pas
/jail/lib/x86_64-linux-gnu/libtinfo.so.5 existe déjà, ne le touchera pas
/jail/lib/x86_64-linux-gnu/libc.so.6 existe déjà, ne le touchera pas
/jail/lib/x86_64-linux-gnu/libdl.so.2 existe déjà, ne le touchera pas
/jail/lib64/ld-linux-x86-64.so.2 existe déjà, ne le touchera pas

Exécute à nouveau la commande cal dans l’environnement Jailed :

cal
srijan@server1 :~$ cal
Avril 2019
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

srijan@server1 :~$

Nous avons donc ajouté la commande pour l’environnement Jailed. Félicitations ! Nous avons maintenant configuré avec succès l’environnement Jail dans Debian 9 🙂

5 Liens

Vous aimerez aussi...