Page suivante > Accueil > Sécurité > Chroot SSH






Mettre en place un chroot SSH


Chercher :    

Objectif

  • Disposer d'un compte utilisateur "sftp_anonymous" ayant comme répertoire home "/home/sftp_anonymous"
  • Cet utilisateur pourra se connecter via une connexion sécurisée ssh et/ou sftp mais sera "mis en cage" (on parle de "chroot") dans son propre répertoire home.
  • Il ne verra donc que l'arborescence de son propre répertoire home ainsi que ses sous-répertoires mais pas l'arborescence globale de votre machine.Ainsi par exemple un "ls /" ne lui montrera que sa propre arborescence (en fait celle de "/home/sftp_anonymous") et non pas le "/" global de votre machine.
  • De nombreuses méthodes à suivre pour "chrooter ssh" sont déjà publiées sur le Web. J'en ai consulté énormément mais aucune ne m'a parue suffisamment explicite et simple à comprendre pour arriver au résultat. Il me manquait toujours une information m'empêchant de parvenir au résultat final, cette information figurant elle-même dans une autre doc auquelle il manquait encore une autre info, etc.... Après beaucoup de tâtonnements j'ai enfin réussi à chrooter ma version de openssh : j'ai donc décider de faire ma propre documentation qui j'espère vous paraitra synthétique et simplifiée.
  • La procédure que j'ai suivi pour mettre en place ce processus de "chroot ssh" a été réalisée sur une version Linux Mandrake 9.0 mais elle devrait fonctionner sans pb sur toute autre version

Se connecter en tant que "root"

  • su

Créer le nouvel utilisateur "sftp_anonymous"

  • useradd sftp_anonymous -d /home/sftp_anonymous
  • passwd sftp_anonymous

Changer le répertoire "home" de l'utilisateur "sftp_anonymous" en lui ajoutant "/./" à la fin

  • vi /etc/passwd
  • sftp_anonymous:x:512:512::/home/sftp_anonymous/./:/bin/bash

Commencer à mettre en place l'environnement de chroot du répertoire home de "sftp_anonymous"

  • cd ~sftp_anonymous
  • mkdir -m 755 bin lib
  • mkdir -m 755 dev
  • mknod dev/null c 1 3 -m 666
  • mkdir -m 755 etc
  • grep /etc/passwd -e "^root" -e "^sftp_anonymous" > etc/passwd
  • grep /etc/group -e "^root" -e "^sftp_anonymous" > etc/group
  • chmod 444 etc/passwd etc/group
  • changer le répertoire home de "sftp_anonymous" dans le fichier etc/passwd "local"
    • vi etc/passwd sftp_anonymous:x:512:512::/:/bin/bash
  • copier chaque commande et ses éventuelles librairies dynamiques liées que vous souhaitez mettre à disposition de sftp_anonymous (ex : bash, ls, mkdir...) dans les répertoires "locaux" correspondant de sftp_anonymous
    • cp /bin/bash bin
    • ldd /bin/bash
      • libtermcap.so.2 => /lib/libtermcap.so.2 (0x40024000)
      • libdl.so.2 => /lib/libdl.so.2 (0x40028000)
      • libc.so.6 => /lib/i686/libc.so.6 (0x4002b000)
      • /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    • cp /lib/libtermcap.so.2 /lib/libdl.so.2 /lib/ld-linux.so.2 lib
    • mkdir -m 755 lib/i686
    • cp /lib/i686/libc.so.6 lib/i686
    • faire de même pour /bin/ls, /bin/mkdir, /bin/mv, /bin/pwd, /bin/rm... en vérifiant à chaque fois par ldd les dépendances éventuelles nécessaires
  • vous pouvez effectuer un test de l'environnement chrooté par "chroot /home/sftp_anonymous /bin/bash" : si cela fonctionne, c'est très bon signe, sinon re-voyez la partie précédente, vous avez peut-être oublié une dépendance de librairie

Installer une version de Openssh patchée

  • différents méthodes existent :
    • soit télécharger une version officielle de ssh sur le site www.openssh.com puis un patch "chroot" correspondant à cette version correspondante (rechercher ce patch par Google par exemple avec les mots clés chroot path "votre openssh installé"), décompresser la version et la patcher
    • soit télécharger et décompresser directement une version patchée par exemple sur chrootssh.opensourceforge.net
  • compiler la version patchée avec les options de configuration que vous souhaitez, par exemple :
    • ./configure --with-md5-passwords (option utilisée dans mon cas)
    • make
    • make install
      • le fichier binaire du serveur sshd est installé sous /usr/local/sbin
      • les fichiers binaires ssh, scp, sftp sont sous /usr/local/bin
      • le fichier de config est installé dans le sous /usr/local/etc/sshd_config
      • l'exécutable sftp-server est sous /usr/local/libexec

Finaliser l'environnement de sftp_anonymous

  • revenir dans le répertoire home de "sftp_anonymous"
    • cd /home/sftp_anonymous
  • copier ssh, scp, sftp si vous souhaitez qu'il soient disponible à l'utilisateur sftp_anonymous lorsqu'il se sera connecté en "chrooté" selon le même principe que vu précemment pour cd, ls, mkdir ...
    • mkdir -p -m 755 usr/local/bin
    • mkdir -p -m 755 usr/local/libexec
    • mkdir -p -m 755 usr/lib
    • cp /usr/local/bin/ssh /usr/local/bin/sftp /usr/local/bin/scp usr/local/bin
    • ldd /usr/local/bin/ssh (pour voir les dépendances de ssh)
      • libutil.so.1 => /lib/libutil.so.1 (0x40024000)
      • libz.so.1 => /lib/libz.so.1 (0x40027000)
      • libnsl.so.1 => /lib/libnsl.so.1 (0x40036000)
      • libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0x4004a000)
      • libcrypt.so.1 => /lib/libcrypt.so.1 (0x40114000)
      • libc.so.6 => /lib/i686/libc.so.6 (0x40141000)
      • libdl.so.2 => /lib/libdl.so.2 (0x40261000)
      • /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    • cp /lib/libutil.so.1 /lib/libz.so.1 /lib/libnsl.so.1 /lib/libcrypt.so.1 /lib/libdl.so.2 lib
    • cp /usr/lib/libcrypto.so.0 usr/lib
    • cp /lib/i686/libc.so.6 lib/i686
  • copier sftp-server (cette fois-ci c'est obligatoire) selon le même principe que vu précemment pour cd, ls, mkdir ...
    • cp /usr/local/libexec/sftp-server usr/local/libexec
    • ldd /usr/local/libexec/sftp-server
      • libutil.so.1 => /lib/libutil.so.1 (0x40024000)
      • libz.so.1 => /lib/libz.so.1 (0x40027000)
      • libnsl.so.1 => /lib/libnsl.so.1 (0x40036000)
      • libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0x4004a000)
      • libcrypt.so.1 => /lib/libcrypt.so.1 (0x40114000)
      • libc.so.6 => /lib/i686/libc.so.6 (0x40141000)
      • libdl.so.2 => /lib/libdl.so.2 (0x40261000)
      • /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    • copier encore une fois localement les librairies qui pourraient éventuellement manquer

Cela devrait suffire, néanmoins vous pourrez à loisir rajouter de nouvelles commandes à sftp_anonymous selon le même principe que vu précédemment.

Tester la nouvelle version du serveur

  • s'assurer au préalable bien entendu que votre ancienne version de ssh ne tourne plus :)
  • configure selon vos souhaits le fichier /usr/local/etc/sshd_config
  • lancer le serveur ssh par /usr/local/sbin/sshd -f /usr/local/etc/sshd_config
  • commencer par tester une connexion "cliente" ssh dans un autre terminal :
    • ssh sftp_anonymous@localhost
      • -bash-2.05b$ ls -l
        • total 24 drwxr-xr-x 2 0 0 4096 Apr 8 17:39
        • bin drwxr-xr-x 2 0 0 4096 Apr 8 17:25
        • dev drwxr-xr-x 2 0 0 4096 Apr 8 17:56
        • etc drwxr-xr-x 3 0 0 4096 Apr 8 17:46
        • lib drwx------ 2 512 512 4096 Apr 8 16:33
        • tmp drwxr-xr-x 4 0 0 4096 Apr 8 17:47 usr
      • => vous êtes donc bien "chrooté" dans le répertoire de "sftp_anonymous"
  • si la connexion ssh s'est bien déroulée sortir puis tester cette fois-ci une connexion "cliente" sftp :
    • sftp sftp_anonymous@localhost
      • Connecting to localhost...
      • sftp_anonymous@localhost's password:
      • sftp> ls -l
      • drwx--x--x 0 512 512 4096 Apr 8 19:41 .
        • drwx--x--x 0 512 512 4096 Apr 8 19:41 ..
        • -rw------- 0 512 512 57 Apr 8 20:04 .bash_history
        • -rw-r--r-- 0 512 512 24 Apr 8 18:33 .bash_logout
        • -rw-r--r-- 0 512 512 191 Apr 8 18:33 .bash_profile
        • -rw-r--r-- 0 512 512 124 Apr 8 18:33 .bashrc
        • -rw-r--r-- 0 512 512 141 Apr 8 18:33 .mailcap
        • -rw-r--r-- 0 512 512 3622 Apr 8 18:33 .screenrc
        • drwxr-xr-x 0 0 0 4096 Apr 8 19:39 bin
        • drwxr-xr-x 0 0 0 4096 Apr 8 19:25 dev
        • drwxr-xr-x 0 0 0 4096 Apr 8 19:56 etc
        • drwxr-xr-x 0 0 0 4096 Apr 8 19:46 lib
        • drwx------ 0 512 512 4096 Apr 8 18:33 tmp
        • drwxr-xr-x 0 0 0 4096 Apr 8 19:47 usr
      • sftp>
      • => idem, vous êtes bien "chrooté" dans le répertoire de "sftp_anonymous"

Conclusion

  • Si vous suivez pas à pas toute la procédure présentée ci-dessus vous devriez arriver également sans problême à chrooter votre ssh. Néanmoins en cas de difficultés n'hésitez pas à nous contacter.

(Double-cliquer pour revenir en haut de la page)

Copyright 2012 © Envoyer un mail à Pariscyber