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 /optDescomprimimos el paquete tar.gz
kimakara@kimakara:~$sudo wget -O scponly.tar.gz http://sourceforge.net/projects/scponly/files/latest/download?source=files
kimakara@kimakara:/opt$ sudo tar xzvf scponly.tar.gzVamos 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-binaryComprobamos 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/scponly-20110526$ sudo make
kimakara@kimakara:/opt/cscponly-20110526$ sudo make install
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 jailIMPORTANTE: 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)Si nuestro sistema es de 64 bits necesitoms copiar los siguientes ficheros al home del usuario enjaulado
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)
cp /lib64/ld-linux-x86-64.so.* /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:
cp /lib64/libnss_files.so.2 /home/USUARIO/lib64/
##include ld.so.conf.d/*.conf
/lib64
/usr/lib64
Creamos el directorio '/dev/null' encapsulado:
mkdir /home/USUARIO/devFinalmente 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"
mknod /home/USUARIO/dev/null c 1 3
chmod 666 /home/USUARIO/dev/null
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 5Ya 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