Como crear una cuenta con chroot que se puede usar con ssh y rsync?

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.

 

Configuración de openssh

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.

Configuración del 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

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

 

Configuración Vhost y DNS

Esta configuración es sencilla y dejada al lector Wink

Amelioraciónes posibles

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/

 

Commentaires:

Posted by Juan Carlos on
Necesito ayuda con éste tema. Podrías ponerte en contacto con migo a través de mi correo?

Gracias!!
Leave a Reply



(Your email will not be publicly displayed.)