5 avril 2008

OpenSSH 5.0 chrooté (façon gruik)

Tags : , ,

posté dans Configuration |

OpenSSH 5.0 vient d'être mis à disposition et intègre (mais ce n'est pas une nouveauté cette version) la directive ChrootDirectory permettant de chrooter dans un répertoire après la connexion. Cette fonctionnalité est principalement utilisée pour du SFTP mais on peu parfaitement configurer l'ensemble pour les logins SSH.

Méthode goret/vite'fait...

La version 5.0 n'existe pas dans les Debian à l'heure d'aujourd'hui. On récupère donc la version portable d'OpenSSH 5.0 :

ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-5.0p1.tar.gz

On désarchive et on récupère également les dernières sources Debian :

% cd /tmp
% mkdir SS
% cd SS
% apt-get source ssh
% cd ..
% wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-5.0p1.tar.gz
% tar xfzv openssh-5.0p1.tar.gz
£ cd openssh-5.0p1
% cp -r ../SS/openssh-4.7p1/debian .

Il ne faut pas oublier de récupérer les dépendances de compilation avec un petit apt-get build-dep ssh.

On copie ensuite le répertoire debian des sources 4.7 Debian dans les sources de la 5.0p1. Pour compiler, il faut supprimer les manpage du debian/rules. On tripote également le changelog puisque la version du paquet vient de là. On ajoute en haut du fichier :

openssh (1:5.0p1-0) unstable; urgency=low

  * Major version

 -- Denis Bodor <lefinnois@lefinnois.net>  Thu, 3 Apr 2008 21:21:05 +0200

Et puis on construit le paquet avec dpkg-buildpackage -b -rfakeroot.

Installation dans la KVM de test avec dpkg -i. Maintenant on peut s'amuser un peu. Et on commence par modifier le fichier de configuration du démon sshd (/etc/ssh/sshd_config) en ajoutant :

Match user lefinnois
        ChrootDirectory /var/JAIL_%u

Pour l'utilisateur lefinnois on chroot dans /var/JAIL_lefinnois (%u est développé en lefinnois lors de la connexion).

Il nous faut construire l'environnement chrooté. Là, je vous préviens c'est très gruika...

# la base
% cd /var
% mkdir /var/JAIL_lefinnois
% cd JAIL_lefinnois
% mkdir -p bin usr/bin usr/lib usr/bin home/lefinnois dev etc
% chown -R lefinnois.lefinnois home/lefinnois

# les dev (pour scp par exemple)
% cd dev
% MAKEDEV std
% cd ..

# les libs
% cp -rv /lib .
% cp -rv /usr/lib usr
% cp /bin/ls /bin/mkdir /bin/mv  /bin/pwd /bin/rm /bin/sh  /bin/echo  /bin/cp  \
   /bin/cat  /bin/ln  /bin/chown /bin/chmod  /bin/grep  /bin/more  /bin/tar \
   /bin/gzip  /bin/true  /bin/false /bin/ping  /bin/egrep /bin/hostname \
   bin

# plus mieux pour les ls
% cp /etc/passwd /etc/group etc

# un peu de scp
% cp /usr/bin/scp usr/bin

# et surtout un shell (static pas obligé, on a les libs)
% aptitude install bash-static
% cp /bin//bin/bash-static bin/bash

Ouais, ça fait une tonne le libs (55Mo pour lib et 139 pour usr/lib). Faut faire le tri. Mais en tout ça fait que ~200Mo pour le chroot.

Résultat, depuis la machine hôte vers la KVM :

% ssh lefinnois@192.168.0.200
lefinnois@192.168.0.200's password: XXXXXXXXXX
Linux VMdebian1 2.6.18-5-686 #1 SMP Wed Oct 3 00:12:50 UTC 2007 i686
Last login: Sat Apr  5 12:31:56 2008 from 192.168.0.1

[10:46:27] lefinnois@VMdebian1:~ % ls -la
total 16
drwxr-xr-x 2 lefinnois lefinnois 4096 2008-04-05 10:31 .
drwxr-xr-x 3 root      root      4096 2008-04-05 10:15 ..
-rw------- 1 lefinnois lefinnois  279 2008-04-05 10:32 .bash_history
-rw-r--r-- 1 lefinnois lefinnois   30 2008-04-05 10:24 .bash_profile

[10:46:29] lefinnois@VMdebian1:~ % ls -la /
total 32
drwxr-xr-x  8 root root 4096 2008-04-05 10:30 .
drwxr-xr-x  8 root root 4096 2008-04-05 10:30 ..
drwxr-xr-x  2 root root 4096 2008-04-05 10:20 bin
drwxr-xr-x  2 root root 4096 2008-04-05 10:31 dev
drwxr-xr-x  2 root root 4096 2008-04-05 10:21 etc
drwxr-xr-x  3 root root 4096 2008-04-05 10:15 home
drwxr-xr-x 12 root root 4096 2008-04-05 10:18 lib
drwxr-xr-x  4 root root 4096 2008-04-05 10:29 usr

Chrooted !!!!

Note : la construction de l'environnement chrooté est brouillon. Pour faire quelque chose de propre il faut se tourner vers des outils spécialisés ou développer son propre script Perl (dépendances des libs, etc). Pas le temps sur le coup...

Article posté on Samedi, 5 avril 2008 à 11:06 dans Configuration. Vous pouvez suivre les commentaires sur cet article via un feed RSS 2.0. Commentaires et pings fermés.

Il y a actuellement 7 réponses pour “OpenSSH 5.0 chrooté (façon gruik)”

  1. 1 Le 6 avril 2008, Poischack à écrit :

    Et pour le chroot sftp c’est encore plus beau :
    $ cat /etc/ssh/sshd_config
    [...]
    Match User sftp_ziq
    ChrootDirectory /home/sftp_ziq
    ForceCommand internal-sftp

    $ ls /home/sftp_ziq/
    $

  2. 2 Le 8 avril 2008, Lefinnois à écrit :

    Oui, mais ça c’était déjà documenté un peu partout ;)
    http://www.debian-administration.org/articles/590

  3. 3 Le 16 avril 2008, simc à écrit :

    Je prépare actuellement un paquet pour Etch de SSH 5.Op1,
    Qui doit intégrer les serveurs de communication LCS de l’académie de caen.

    Sur ce paquet je fait 2 daemons un ssh standard sur le port 22
    et un ssh chrooté sur le port 2222 pour le sftp

  4. 4 Le 30 avril 2008, Lx à écrit :

    Salut à tous!
    j’ai découvert hier le nouveau openssh qui integre cette fonction de chroot !
    voila j’ai une ou 2 petites questions pour vous ( je ne suis pas aussi expert que vous a priori) :
    Est-il possible de mettre un paramètre dans le sshd_config qui applique la prison a tout les utilisateurs qui se connectent ?
    un truc du style :
    Match user %u
    ChrootDirectory /var/JAIL_%u

    ou faut il le faire au cas par cas ?!

    je travaile sur une openbsd 4.2

    Merci pour vos réponses ! bonne journée! Lx.

  5. 5 Le 30 avril 2008, Lx à écrit :

    petit édit:
    enfait je veux chrooter tout les utilisateurs dans leur repertoire perso directement et qu’il ai juste accès au bash et a ssh .. donc voila si vous avez une idée ou si vous pouvez me filer un coup de patte ca serait buen !!!

  6. 6 Le 11 juin 2008, Pierre Mavro à écrit :

    Bonjour, il est possible d’utiliser MySecureShell sinon :-) De plus il est facile à utiliser et plus scalable (comme les fonctionnalitées FTP)

  7. 7 Le 7 janvier 2010, GanGan à écrit :

    cette option (Chrootdirectory) fait de rssh un truc obsolète ?