Comment créer un compte chrooté pour ssh avec rsync

Des fois la censure oblige à répliquer un site sur plusieurs machines. Par exemple wikileaks. Chez wikileaks ils ont fait une procédure de mirroring par rsync+ssh. Ayant l'occasion de faire un bras d'honneur aux censeurs j'ai voulu apporter ma contribution. D'un naturel suspicieux je ne souhaite pas filer un compte complet sur ma machine aux gens de wikileaks (après tout je ne les connais pas)

Openssh dans ses version récentes propose de se chrooté dans un répertoire, c'est à dire de ne pas donner accès à une autre partie de l'arborescence. J'ai trouvé de la doc ici mais ça n'a pas marché donc j'ai adapté.

Configuration de openssh

Dans le fichier sshd_config, dans /etc/ssh/sshd_config chez moi j'ai rajouté ce bloc

Match User wikileaks
ChrootDirectory /home/wikileaks
X11Forwarding no
AllowTcpForwarding no

 

Ça veut dire que pour l'utilisateur wikileaks, on se cantonne au répertoire /home/wikileaks

 

Par contre il faut peupler ce répertoire avec les fichiers nécessaires.

Configuration du chroot

cd /home/
mkdir wikileaks
cd wikileaks/
mkdir {bin,dev,lib,lib64}
mknod dev/null c 1 3
mknod dev/zero c 1 5
chmod 0666 dev/{null,zero}
mkdir html

On crée quelques répertoire et device utiles.

Il nous reste à copier bash et rsync et leurs librairies associées.

cp /bin/bash bin/
cp /usr/bin/rsync bin/
ldd /bin/bash
linux-vdso.so.1 => (0x00007fff61d91000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f3f764b9000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f3f762b5000)
libc.so.6 => /lib/libc.so.6 (0x00007f3f75f31000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3f76707000)
ldd /usr/bin/rsync
linux-vdso.so.1 => (0x00007fff6e5ff000)
libacl.so.1 => /lib/libacl.so.1 (0x00007fc6aa31e000)
libpopt.so.0 => /lib/libpopt.so.0 (0x00007fc6aa113000)
libc.so.6 => /lib/libc.so.6 (0x00007fc6a9d8f000)
libattr.so.1 => /lib/libattr.so.1 (0x00007fc6a9b8a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc6aa531000)
cp -p /lib/libncurses.so.5 lib/
...
cp /bin/bash bin/
cp /usr/bin/rsync bin/
ldd /bin/bash
linux-vdso.so.1 => (0x00007fff61d91000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f3f764b9000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f3f762b5000)
libc.so.6 => /lib/libc.so.6 (0x00007f3f75f31000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3f76707000)
ldd /usr/bin/rsync
linux-vdso.so.1 => (0x00007fff6e5ff000)
libacl.so.1 => /lib/libacl.so.1 (0x00007fc6aa31e000)
libpopt.so.0 => /lib/libpopt.so.0 (0x00007fc6aa113000)
libc.so.6 => /lib/libc.so.6 (0x00007fc6a9d8f000)
libattr.so.1 => /lib/libattr.so.1 (0x00007fc6a9b8a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc6aa531000)
cp -p /lib/libncurses.so.5 lib/
...

 

Il faut evidemment répeter les cp -p pour toutes les librairies liées.

Il ne nous reste plus qu'à créer l'utilisateur wikileaks et à mettre les bons droits sur le dossier html pour qu'ils puisse être accédé par l'utilisateur wikileaks

 

adduser wikileaks
chown wikileaks:wikileaks html
mkdir .ssh
vim .ssh/authorized_keys #rentrer la clé de wikileaks à ce moment là

 

Configuration Vhost et DNS

Cette configuration est laissée en exercice au lecteur Wink

 

Amélioration possible

Utilisation du paramètre de configuration ForceCommand de openssh pour vérifier que l'on ne fait qu'un rsync. Un tuto a été écrit ici: http://geekfault.org/2010/12/05/devenez-miroir-de-wikileaks-sans-risque/

Commentaires:

Posted by Olivier B. on
Hello,

merci pour ce tuto !
Et quid de l'utilisation de "rssh" pour ce genre de choses ?
Posted by admin on
@Olivier, je préfère utiliser que du openssh de base et pas rajouter une couche logicielle avec potentiellement des failles, même si ça doit très bien marcher
Posted by Tim4242 on
Et quid du module sftp de proftpd ? :-)
Posted by admin on
@Tim4242 rsync != sftp, de plus pour du sftp il y a tout ce qui faut en interne chez openssh
Posted by Tim4242 on
Je voulais dire scp mais effectivement c'est != de rsync :-)
Leave a Reply



(Your email will not be publicly displayed.)