 |
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"
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"
- 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.
|
 |