A veces en el Internet hay que reaccionar a la censura creando "espejos" de sitios privados de acceso. Un buen ejemplo de eso fue Wikileaks unos meses atrás. Ellos crearon una manera simple de hacer una replica de su sitio usando cuenta sobre un servidor con rsync sobre ssh. Como la ocasión de hacer un corte de mangas a los censores es suficiente rara para ser usada con placer quise apoyar con un tutorial par crear el tipo de cuenta necesaria. Como soy naturalmente sospechoso no quería dar una cuenta con acceso complete a la gente de Wikileaks.
Openssh en sus ultimas versiones permite restringir el acceso a una sola carpeta (chroot). Encontré documentación alla pero no me resulto.
En el archivo de configuración sshd_config, ubicado en /etc/ssh/ agregué las lineas siguiente:
Match User wikileaks
ChrootDirectory /home/wikileaks
X11Forwarding no
AllowTcpForwarding no
Esas lineas significan que para el usuario wikileaks se bloquea el acceso la carpeta /home/wikileaks solamente.
Par poder usar rsync sobre ssh hay que agregar unos archivos a esta carpeta.
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
Hay que crear algunos carpetas y device útiles.
Falta que copiar bash y rsync y las bibliotecas dinámicas en relación.
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/
...
Es obvio que hay que hacer los cp -p para cada una de las bibliotecas ligadas.
Nos falta que crear el usuario wikileaks y poner los buenos derechos en la carpeta html para que el usuario pueda poner sus archivos adentro.
adduser wikileaks
chown wikileaks:wikileaks html
mkdir .ssh
vim .ssh/authorized_keys #poner la llave publica de wikileaks
Esta configuración es sencilla y dejada al lector
Se puede usar el parámetro ForceCommand de openssh para averiguar que se hace solamente un rsync. Un articulo en francés lo describe bien allá: http://geekfault.org/2010/12/05/devenez-miroir-de-wikileaks-sans-risque/