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é.
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.
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à
Cette configuration est laissée en exercice au lecteur
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/