SFTP-SCP Enjaulado

El objetivo es permitir la transferencia de ficheros, mediante protocolo SFTP ó SCP, a nuestro servidor, lo mas seguro posible.
Damos por hecho que el acceso vía SSH está habilitado en el servidor, y que la versión soporta chroot., si no habría que parchearlo (hablo de openssh).
Para ello debemos seguir los siguientes pasos:
  1. Creamos el directorio donde vamos a hacer la jaula (chroot).
Por ejemplo:
# mkdir /sftp_data/jaula
Este sería el directorio raíz para el chroot.
  1. Copiamos todos los ficheros necesarios a la jaula. En nuestro caso solo los indispensables para usar sftp y scp. Es decir tenemos que copiar tanto los binarios como las librerías necesarias. Para hacer esto lo mas cómodo es instalar el jailkit (http://olivier.sessink.nl/jailkit/howtos_sftp_scp_only.html), y usar los comandos jk_cp. Viene explicado en la web. De otra forma tenemos que crear la estructura a pelo, verificar las liberías necesarias con ldd.
Por ejemplo:
# ldd /usr/bin/scp (vemos las librerías necesarias para scp)
De esta forma la estructura de directorio -con los ficheros a copiar- en nuestra jaula quedará como sigue: (dependiendo de la distribución Linux puede variar)
jaula/:
bin
dev
etc
home
lib
usr

jaula/bin:
bash

jaula/dev:
log

jaula/dev/log:

jaula/etc:
group
jailkit
passwd

jaula/etc/jailkit:
jk_check.ini
jk_chrootsh.ini
jk_init.ini
jk_lsh.ini
jk_socketd.ini

jaula/home:
dap
faga

jaula/home/usuario1:


jaula/lib:
ld-2.3.4.so
ld-linux.so.2
libcom_err.so.2
libcom_err.so.2.1
libcrypt-2.3.4.so
libcrypto.so.0.9.7a
libcrypto.so.4
libcrypt.so.1
libdl-2.3.4.so
libdl.so.2
libnsl-2.3.4.so
libnsl.so.1
libresolv-2.3.4.so
libresolv.so.2
libselinux.so.1
libtermcap.so.2
libtermcap.so.2.0.8
libutil-2.3.4.so
libutil.so.1
tls

jaula/lib/tls:
libc-2.3.4.so
libc.so.6

jaula/usr:
bin
lib
libexec
sbin

jaula/usr/bin:
scp
sftp

jaula/usr/lib:
libgssapi_krb5.so.2
libgssapi_krb5.so.2.2
libk5crypto.so.3
libk5crypto.so.3.0
libkrb5.so.3
libkrb5.so.3.2
libz.so.1
libz.so.1.2.1.2

jaula/usr/libexec:
openssh

jaula/usr/libexec/openssh:
sftp-server

jaula/usr/sbin:
jk_lsh

  1. Creamos los usuarios que se usarán para la transferencia de ficheros, y cambiamos el shell del usuario y el home en el directorio /etc/passwd
Por ejempolo: creamos el usuario uno y dos y en /etc/passwd lo dejamos como sigue:
uno:x:10639:10639::/sftp_data/jaula/./home/uno:/usr/sbin/jk_chrootsh
dos:x:10640:10640::/sftp_data/jaula/./home/dos:/usr/sbin/jk_chrootsh
El shell que usamos es el que viene con jailkit. Si no queremos usar este nos lo podemos hacer también a pelo, por ejemplo creando un shell en el que se haga lo siguiente: chroot /sftp_data/jaula/ /bin/bash, y poniendo el en /etc/passwd como shell el que nosotros hemos creado. Para crear el shell, hacer un script y ponerlo en /bin y luego modificar /etc/shell.
El fichero /sftp_data/jaula/etc/passwd quedaría así:
uno:x:10639:100::/home/uno:/bin/bash
dos:x:10640:100::/home/dos:/bin/bash
  1. Probamos. Al conectar por sftp ó scp con el usuario uno o dos, nos conecta a su home chrooteado, y no puede pasar a la estructura de directorios del servidor.
  2. Podemos también seguir los pasos del enlace del punto 2, para los logs.
OJO!!: cuidado con los permisos que se dan a los directorios de la jaula.
Los rpms del jailkit los podeis conseguir aquí: http://dag.wieers.com/rpm/packages/jailkit/
Espero que quede claro, disculpas si no es así y por los posibles erratas.

Comentarios