Dernière mise à jour : 03/02/2005
Si vous avez un serveur que vous aimez bien, vous avez tous eu ce problème de création de compte pour lequel vous ne désirez pas donner accès au système entier. Il existe plusieurs solutions possibles et une d'entre elle consiste à donner accès à un système virtuel, un chroot (de l'Anglais CHange ROOT). De par son design, le projet OpenSSH ne permet pas de faire ceci d'emblée. La bonne nouvelle est qu'un projet existe pour vous permettre de faire cela avec vos utilisateurs. Vous pouvez donc prendre le patch (ou bien la version complète d'OpenSSH patchée) à cette adresse : http://chrootssh.sourceforge.net. Le projet est bien maintenu et propose un patch pour toutes les versions d'OpenSSH.
Je vous propose donc ici de mettre en place une prison SSH pour les utilisateurs sensibles. Gardez bien en tête qu'il est primordial que vous sécurisiez également votre prison SSH si vous installez des binaires (et il vous en faudra). J'ai installé ce système sur une Debian SID (unstable) mais il est bien sûr possible de l'installer sur n'importe quel système disposant d'openssh et des sources. Pour Debian, il vous donc d'abord installer les sources et les patcher. Pour ceci faîtes :
-
mkdir chroot-openssh && cd chroot-openssh
apt-get source openssh
wget http://chrootssh.sourceforge.net/download/osshChroot-3.8.1p1.diff
patch -p0 < osshChroot-3.8.1p1.diff
cd openssh-3.8.1p1
debian/rules binary
cd ..
dpkg -i ssh_3.8.1p1-8.sarge.4_i386.deb
Notez bien qu'au moment de rédaction de cet article, la version utilisée par SID est la 3.8.1p1, j'ai donc téléchargé le patch correspondant à cette version. On applique ensuite le patch et on compile à la méthode Debian. Il vous faudra d'ailleurs installer quelques paquets supplémentaires pour pouvoir compiler un paquet avec rules, si le système se plaind de ne pas trouver certains fichiers, utilisez le site en ligne pour rechercher un paquet : http://www.debian.org/distrib/packages. Après avoir compilé le paquet, installez-le (comme montré avec la dernière commande dpkg plus haut). Voilà , SSH est prêt à recevoir son nouvel utilisateur.
Pour poursuivre, il vous faut comprendre que chroot crée un environnement virtuel sur votre système. Nous prendrons ici l'exemple que le système virtuel se trouve dans /home/chroot. Imaginons à présent que votre utilisateur s'appelle albert. Vous allez donc créer un répertoire dans /home/chroot/home/albert en éxecutant : mkdir /home/chroot/home/albert. Pour créer l'environnement virtuel, j'ai utilisé un script dont l'original vient de ce site. J'ai eu un souci sur le script, je l'ai donc modifié pour qu'il marche correctement sous Debian, téléchargez donc create_chroot_env.txt et sauvez-le quelque part.
Modifez à présent votre /etc/passwd pour que le chemin $HOME de votre utilisateur ressemble à ceci : /home/chroot/./home/albert. En effet, pour que le patch chroot-ssh marche correctement, il est crucial d'insérer un point avant le home du chroot. Il ne reste alors qu'à créer votre chroot, utilisez le script en faisant : create_chroot_env albert il devrait alors comme un grand copier tous les fichiers nécessaires à votre chroot. Redémarrez à présent le démon SSH (sur Debian, nul besoin de le faire, le système le fait automatiquement lors de l'installation du paquet patché) et tentez de connecter votre utilisateur, vous devriez donc obtenir ceci :
-bash-3.00$ ls / bin dev etc home lib usr
Il est important de savoir comment ensuite ajouter un utilisateur à votre système de prison SSH. Vous devez créer un compte classique, mais utilisez pour ceci la commande suivante :
-
useradd -d /home/chroot/./home/$UTILISATEUR/ -s /bin/bash -m $UTILISATEUR
Il vous suffit alors de lui attribuer un mot de passe (un paquet très pratique existe sous Debian du nom de makepwd). Il faut ensuite modifier les fichiers /home/chroot/etc/{passwd,group} afin d'ajouter votre nouvel utilisateur sur le modèle du précédent (et avec le bon uid/gid).
Et voilà , c'est réussi. Votre utilisateur possède à présent un login sur votre serveur mais sans la possibilité d'exécuter des binaires sensibles ou bien de pouvoir déterminer le type de serveur. Cela est également très pratique pour pouvoir utiliser sftp (secure FTP) et bénéficier ainsi de transfert sécurisés.