Pour des raisons de sécurité vous souhaitez que les utilisateurs qui se connectent sur votre serveur (via un simple Shell ou par SSH par exemple) n’aient pas une vision complête de l’arborescence de vos répertoires, mais qu’ils soient en quelque-sorte « enfermés » dans une sous-arborescence totalement isolée, de telle sorte qu’ils ne puissent pas s’en échapper ? La mise en place d’un « chroot/jail » pour ces utilisateurs est faite pour vous.

Afin de mettre en place cela, je vous propose de suivre les étapes suivantes, construites à partir d’une compilation d’articles diffusés sur les sites web ci-dessous dont je remercie les auteurs :

http://linoxide.com/security/create-jailed-ssh-user-jailkit-debian/
http://www.marthijnvandenheuvel.com/2010/03/10/how-to-create-a-chroot-ssh-user-in-ubuntu/
http://ubuntuforums.org/showthread.php?t=248724
http://olivier.sessink.nl/jailkit/howtos_ssh_only.html
http://olivier.sessink.nl/jailkit/howtos_chroot_shell.html
http://ubuntuforums.org/showthread.php?t=1503138
https://lists.gnu.org/archive/html/jailkit-users/2012-06/msg00002.html

Un des outils magiques pour réaliser cela est « JailKit » (cf. http://olivier.sessink.nl/jailkit), qui livre plusieurs scripts automatisants la construction de cette prison (« jail ») et la mise dans cette prison d’un utilisateur donné.

Pré-Requis / Hypothèses de travail

  • la plateforme d’expérimentation est une Ubuntu en version 14.04
  • le répertoire qui accueille la prison est « /opt/jail »
  • l’utilisateur qui sera « enfermé » dans cette prison se nomme « john »

Etapes

  • installer « JailKit ».
cd /tmp
tar zxvf jailkit-2.17.tar.gz
cd jailkit-2.17

puis, pour une distrib Debian / Ubuntu,

./debian/rules binary
cd ..
dpkg -i jailkit_2.17-1_i386.deb

ou, pour une autre distrib

./configure;make;make install
  • Créer le répertoire qui accueillera le « jail ».
mkdir /opt/jail
chown root:root /opt/jail
  • Initialiser les répertoires fonctionnels (pour info cf. le fichier /etc/jailkit/jk_init.ini)
jk_init -f -v /opt/jail basicshell
jk_init -f -v /opt/jail editors
jk_init -f -v /opt/jail extendedshell
jk_init -f -v /opt/jail jk_lsh
jk_init -f -v /opt/jail logbasics
jk_init -f -v /opt/jail netbasics
jk_init -f -v /opt/jail netutils
jk_init -f -v /opt/jail scp
jk_init -f -v /opt/jail ssh
jk_init -f -v /opt/jail sftp
jk_init -f -v /opt/jail ssh-keygen
jk_init -f -v /opt/jail uidbasics
  •  Copier les binaires désirés (optionnel)
jk_cp -v -f /opt/jail /bin/bash
jk_cp -v -f /opt/jail /bin/ls
jk_cp -v -f /opt/jail /bin/ps
jk_cp -v -f /opt/jail /bin/su
jk_cp -v -f /opt/jail /etc/bash.bashrc
jk_cp -v -f /opt/jail /usr/bin/cc
jk_cp -v -f /opt/jail /etc/environment
jk_cp -v -f /opt/jail /etc/profile
jk_cp -v -f /opt/jail /etc/sudoers
jk_cp -v -f /opt/jail /lib/x86_64-linux-gnu/libnss_compat.so.2
jk_cp -v -f /opt/jail /usr/bin/dircolors
jk_cp -v -f /opt/jail /usr/bin/g++
jk_cp -v -f /opt/jail /usr/bin/gcc
jk_cp -v -f /opt/jail /usr/bin/groups
jk_cp -v -f /opt/jail /usr/bin/id
jk_cp -v -f /opt/jail /usr/bin/irssi
jk_cp -v -f /opt/jail /usr/bin/passwd
jk_cp -v -f /opt/jail /usr/bin/perl
jk_cp -v -f /opt/jail /usr/bin/pork
jk_cp -v -f /opt/jail /usr/bin/python
jk_cp -v -f /opt/jail /usr/bin/screen
jk_cp -v -f /opt/jail /usr/bin/ssh
jk_cp -v -f /opt/jail /usr/bin/ssh-keygen
jk_cp -v -f /opt/jail /usr/bin/sudo
jk_cp -v -f /opt/jail /usr/sbin/usermod
jk_cp -v -f /opt/jail /usr/share/perl/5.10.0/strict.pm
jk_cp -v -f /opt/jail /var/lib/pam/account
jk_cp -v -f /opt/jail /var/lib/pam/auth
jk_cp -v -f /opt/jail /var/lib/pam/password
jk_cp -v -f /opt/jail /var/lib/pam/seen
jk_cp -v -f /opt/jail /var/lib/pam/session
  •  Créer et enfermer l’utilisateur
adduser john
jk_jailuser -m -j /opt/jail john
  •  Editer le fichier « passwd » du jail pour y mettre « bash » comme shell
vi /opt/jail/etc/passwd
john:x:1006:1006::/home/john:/bin/bash
  •  Vérifier que le fichier « group » du jail est ok
vi /opt/jail/etc/group
john:x:1006:
  • Copier les fichiers « shadow » dans le jail (semble être optionnel)
jk_cp -v -f /opt/jail /etc/shadow
jk_cp -v -f /opt/jail /etc/shadow-
  • Créer le répertoire « /proc » dans le jail pour que la commande « ps » fonctionne
cd /opt/jail/
mkdir proc
mount -t proc none /opt/jail/proc
  •  Mettre les permissions nécessaires  dans le jail pour que la commande « sudo » fonctionne
chown root:root /opt/jail/usr/bin/sudo
chmod 4755 /opt/jail/usr/bin/sudo
chmod u+s /opt/jail/usr/bin/passwd
vi /opt/jail/etc/jailkit/jk_lsh.ini

#[test]
#paths= /usr/lib/
#executables= /usr/lib/sftp-server
#allow_word_expansion = 0
#umask = 002
#
##example for a group, there should be only 1 space inbetween the words!
#[group users]
#paths = /usr/bin
#executables = /usr/bin/cvs
#allow_word_expansion = 0
#environment= HELIX_PATH=/opt/RealPlayer/, TMP=/tmp/
[john]
paths= /usr/bin
executables= /usr/bin/ssh
vi /etc/jailkit/jk_chrootsh.ini

## example for a user
#[john]
#env= DISPLAY, XAUTHORITY
#
##example for a group, there should be only 1 space inbetween the words!
#[group users]
#env = DISPLAY, XAUTHORITY, TERM
[DEFAULT]
env = TERM
  •  Redémarrer le démon de la socket « JailKit » (seulement si des fichiers de configuration de JailKit ont été modifiés)
killall jk_socketd ; jk_socketd
  • ‘That’s all folks! » 🙂 vous pouvez désormais tester la connexion « chrootée » pour l’utilisateur « john »

On peut tester une connexion Shell

su john

Cela fonctionne également pour une connexion SSH (si on dispose d’un serveur SSH)

ssh john@votre_serveur

 Dans les 2 cas, en se déplacant dans l’arborescence des répertoires, on constate que l’utilisateur « john » est emprisonné dans une arboresecence « virtuelle » à laquelle il ne peut pas échapper.

Remarque : pour mettre à jour de temps en temps les version de binaires de votre distribution Linux dans le jail, utiliser la commande suivante

jk_update -j /opt/jail

Attention : effectuer une sauvegarde au cas où avant d’effectuer cette modification

 

Print Friendly, PDF & Email