Chrooter une session SSH utilisateur
Par Yoann le jeudi, 4 mars 2010, 09:30 - L1nuX and c0 - Lien permanent
Vous souhaitez donner un accès SSH à vos utilisateurs, mais dans un environnement que vous maitrisez, dont vous pouvez limiter les commandes accessibles, mais aussi et surtout les mettres dans une "cage" (C'est dire qu'ils ne verront pas l'integralité du système de fichier, mais uniquement l'endroit où ils sont chrooter).
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/