lunes, 6 de agosto de 2012

Crear usuarios SCP, SFTP en entornos restringidos con scponly

Introducción


Una buena alternativa y mucho mas segura que el clásico ftp , para dar acceso a usuarios en entornos restringidos (enjaulados o "chrooted") a nuestros sistemas  es instalar el paquete scponly.

Scponly es una shell restringida que permite a los usuarios acreditados ejecutar solo  comandos sftp o scp en sus directoros home (mediante Winscp por ejemplo) , de manera que tampoco puedan navegar por otros directorios fuera de su home enjaulada.

Otra ventaja es que podemos llegar a  automatizar el acceso sin password agregando nosotros como administradores, la clave pública .ssh/id_dsa.pub del equipo remoto cliente en el fichero  ~/.ssh/authorized_keys del home del usuario creado con scponly en el  servidor (el usuario solo tendrá permisos de escritura en un directorio en concreto por defecto "incoming"), del mismo modo que lo haríamos para hacer login por ssh sin contraseña

Instalación de scponly con enjaulado "chrooted"


Para instalar scponly en un equipo con linux RHEL 5 y disponer de la funcionalidad enjaulado "chrooted" (no lo he provado con otras distros), necesitamos bajarnos el paquete e instalarlo manualmente.

Mediante instalación vía repositorio con yum install scponly,  dispondríamos también de scponly  pero sin funcionalidad de enjaulado o chroot ( o al menos yo no supe  hacerlo)

Descargamos el paquete de la url https://github.com/scponly/scponly/wiki/Download en un directorio p.e '/opt' y lo guardamos con el nombre scponly.tar.gz con la opción 'wget -O'
makara@kimakara:~$ cd /opt
kimakara@kimakara:~$sudo wget -O scponly.tar.gz http://sourceforge.net/projects/scponly/files/latest/download?source=files
Descomprimimos el paquete tar.gz
kimakara@kimakara:/opt$ sudo tar xzvf scponly.tar.gz
Vamos al directorio descomprimido de scponly
kimakara@kimakara:/opt$ cd scponly-20110526
Procedemos a instalar el paquete con la opción de enjaulado
kimakara@kimakara:/opt/scponly-20110526$ sudo ./configure --enable-chrooted-binary
kimakara@kimakara:/opt/scponly-20110526$ sudo make
kimakara@kimakara:/opt/cscponly-20110526$ sudo make install
Comprobamos el exit code si es 0, para ver si se ha realizado correctamente la instalación (no es necesario este paso siempre y cuando la instalación no haya dado errores)
kimakara@kimakara:/opt/cscponly-20110526$ echo $? 
Nos aseguramos de que las shells '/usr/local/sbin/scponlyc' y '/usr/local/bin/scponly' estan en el fichero /etc/shells, sinó las añadimos manualemnte con un editor (por ejemplo con vim) dejando el contenido del fichero /etc/shells de manera similar a:
bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
/usr/local/sbin/scponlyc
/usr/local/bin/scponly

Crear un usuario enjaulado


Previo a crear el primer usuario con scponlyc hay que crear el Jail con 'make jail' en el directorio donde descomprimimos el paquete tar.gz de scponly en nuestro caso /opt/scponly-20110526
kimakara@kimakara:/opt/scponly-20110526$ sudo make jail
IMPORTANTE: Si la salida del comando anterior os da un error tipo "this script requires the program useradd or pw to add your chrooted scponly user." provad de ejecutarlo como root con "sudo su -", o revisad que vuestro $PATH incluya el path donde useradd está ubicado por ejemplo ejecutando whereis useradd y agregar y exportar la variable editando el .bash_profile  

Si todo va bien, la salida del comando anterior nos generará el siguiente menú ( ademas de mostrarnos otros datos de salida):
Username to install [scponly](aqui ponemos el nombre del nuevo user)

home directory you wish to set for this user [/home/kimakara_sftp] (definimos el path que queremos o dejamos el por defecto) 

name of the writeable subdirectory [incoming] (definimos un nombre para el subdirectorio con permisos de escritura o lo dejamos el por defecto con nombre "incoming")


 New UNIX password: (definir password para el user creado)
Retype new UNIX password: (reescribir el password anterior)
Si nuestro sistema es de 64 bits necesitoms copiar los siguientes ficheros  al home del usuario enjaulado
cp /lib64/ld-linux-x86-64.so.* /home/USUARIO/lib64/
cp /lib64/libnss_files.so.2 /home/USUARIO/lib64/
Editamos el fichero '/home/USUARIO/etc/ld.so.conf' del usuario creado y comentamos o eliminamos la primera línia "include ld.so.conf.d/*.conf" y agregamos '/lib/64' y '/usr/lib64' dejando el fichero de la siguiente manera:
##include ld.so.conf.d/*.conf
/lib64
/usr/lib64

Creamos el directorio '/dev/null' encapsulado:
mkdir /home/USUARIO/dev
mknod /home/USUARIO/dev/null c 1 3
chmod 666 /home/USUARIO/dev/null
Finalmente montamos el directorio de ficheros del sistema que deseamos el usuario tenga acceso sobre "/home/USUARIO/incoming" ejectuando un 'mount -o rw, bind ...' y probamos que las directorios estén "linkados"
mount -o rw,bind /carpeta /home/USUARIO/qq type none (rw,bind)
Para que los directorios se monten automáticamente tras el reinicio del servidor editamos el fichero /etc/fstab y añadimos la siguiente línea al final
/directorio_servidor /home/USUARIO/incoming none rw,bind 1 5
Ya podemos probar el acceso mediante un cliente sftp, es importante que el cliente tenga habilitado el retraso scp como por ejemplo Winscp en la siguiente imagen


Mas información en:


Espero que la información aportada pueda ser de utilidad, cualquier corrección, sugerencia, aportación o alternativa será siempre de gran utilidad!

Saludos!

No hay comentarios:

Publicar un comentario