Installation du serveur ssh (si ce n'est pas déjà fait)

 apt-get install ssh openssh-server

Configuration du serveur ssh

Editer le fichier /etc/ssh/sshd_config

 vim /etc/ssh/sshd_config

Vérifier que la ligne ci-dessous est bien présente :

 Subsystem sftp /usr/lib/openssh/sftp-server

Ajouter le bloc ci-dessous à la fin du fichier pour chrooter l'utilisateur john:

 Match User john
     ChrootDirectory /chroot
     AllowTCPForwarding no
     X11Forwarding no

On peut aussi chrooter un ensemble d'utilisateurs (les utilisateurs du groupe users par exemple) :

 Match Group users
     ChrootDirectory /chroot
     AllowTCPForwarding no
     X11Forwarding no

Creation du dossier chroot

 mkdir /chroot

Les librairies necessaires a bash

 ldd /bin/bash

Installation des outils necessaire pour créer l'environnement chrooter

 apt-get install sudo debianutils coreutils

Récupération du script permettant de créer l'environnement chrooter

 cd /usr/local/sbin
 wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
 chmod 700 /usr/local/sbin/make_chroot_jail.sh

Modification du script make_chroot_jail.sh

Editer le fichier /usr/local/sbin/make_chroot_jail.sh :

 vim /usr/local/sbin/make_chroot_jail.sh

Modifier la ligne APPS correspondant aux distrib. debian en fonction des commandes que vous souhaitez authoriser :

 [...]
 elif [ "$DISTRO" = DEBIAN ]; then
   APPS="/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir /bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups /usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp /sbin/unix_chkpwd /bin/cat /bin/more /usr/bin/find /bin/which /bin/grep /bin/tar /usr/bin/tail /usr/bin/head /usr/bin/clear /usr/bin/less /usr/bin/wc /usr/bin/vim"
 [...]

Création de l'environnement chrooter

 cd /chroot/
 make_chroot_jail.sh john /bin/bash /chroot

//repondre a YES au questions//

Pour mettre a jour la liste des applications auxquelles l'utilisateur à le droits d'accèder :

 cd /chroot/
 make_chroot_jail.sh update /bin/bash /chroot

Problème avec le $HOME

Lorsque vous vous connectez avec votre utlisateurs john chrooter (en ssh), celui-ci a pour home /chroot/home/john/.

Si vous utilisez des clefs SSH pour vous y connecter le serveur ssh trouvera bien les clefs dans /chroot/home/john/.ssh/, mais lorsque vous arrivez dans votre environnement chrooter, /chroot correspond à la racine / de votre environnement et n'est donc pas accessible. Les fichiers .bashrc ne sont alors pas pris en compte, le cd ~ ne fonctionnera pas, etc ....

NOTE : J'aurais penser qu'une fois arrivé dans l'environnement chrooter le systeme aurait utiliser le fichier /chroot/etc/passwd, mais non ...

Pour résoudre ce problème :

Linker le home chrooter (/chroot/home/john/) de l'utilisateur vers le home non chrooter (/home/john/)

 rm -Rf /home/john/
 ln -s /chroot/home/john/ /home/john/

Changer le home dans /etc/passwd

Le script make_chroot_jail.sh modifie egalement le fichier /etc/passwd en transformant /home/john/ en /chroot/home/john/. (Notre $HOME est /chroot/home/john/ alors qu'il devrait être /home/john/ en environnement chrooter)

Il faut donc editer le fichier /etc/passwd et changer le home de l'utilisateur john

 /chroot/home/john/

par

 /home/john/

Lier un repertoire a notre environnement chrooter

Il peut être necessaire de donner accès depuis un environnement chrooter a une arboresence n'etant pas dans l'environnement chrooter. Par exemple l'arboresence /data/, pour cela nous utiliserons mount comme suis :

 mkdir /chroot/data/
 mount --bind /data/ /chroot/data/