gnupatagonia.com.ar

Enjaular Usuarios SFTP

¿Qué es eso?

Bueno, en principio sftp es un protocolo seguro de transferencia de archivos (funciona sobre ssh).

Nos interesa (después discutimos por qué) que los usuarios que se conecten al servidor (1) accedan a única ubicación (propia para cada usuario); (2) no tengan acceso a ninguna shell.

Es la solución que imaginé para que, nuestr@s compañer@s del colegio, puedan contar con un repositorio de materiales, no sujeto a las restricciones que impone (saludablemente) PHP.

La idea es que cuenten con un acceso directo (sftp://nombreUsuario@nombreMaquina) con el navegador de archivos para poder subir o bajar materiales escolares al servidor escolar (desde ya que repudio la pobreza de un servidor escolar corriendo sobre SAMBA).

IMPORTANTE, ANTES DE CONTINUAR: si pretendes avanzar en este tutorial te recomiento previamente dos cosas:

1) cambiar la contraseña del usuario alumno

2) cambiar la contraseña de root, que por comodidad (con todo el riesgo que supone) viene preestablecida como alumno.

¿Cómo lo hacemos?

Creamos la estructura de archivos

Primero debemos crear un grupo para los usuarios (esto al final se ha revelado innecesario), llamaremos a este grupo: usuariossftp:

sudo groupadd usuariossftp

Luego creamos una carpeta genérica desde dónde colgaran todas las ubicaciones propias de los usuarios remotos (la llamaremos sftp):

sudo mkdir /home/sftp

Desde esta ubicación, y pensando ya en el primer usuari@ (lo llamamos usuario1), creamos su carpeta personal:

sudo mkdir /home/sftp/usuario1

Todavía el usuario no existe en el sistema, lo creamos de este modo:

sudo useradd -g usuariossftp -s /bin/false -d /home/sftp/usuario1 usuario1
sudo passwd usuario

La opción -g indica el grupo al que pertenece (si se omite el ssitema crea un nuevo grupo con el nombre del nombre del usuario)

La opción -s /bin/false le niega la posibilidad de una shell de comandos (una cuestión de seguridad simplemente)

La opción -d (con la ruta) nos indica cuál es el directorio personal correspondiente a la cuenta de usuario que estamos creando

Por último en nombre del usuario.

sudo passwd usuario1 nos permite definir la contraseña para usuario1

Ahora debemos indicar permisos y propietarios (ESTO ES MUY IMPORTANTE, sshd rechazará peticiones mal enjauladas)

Las carpetas: /home/sftp; /home/sftp/usuario1 deben ser del usuario root  y del grupo root (con el procedimiento que hemos seguido, las carpetas son de root); con permisos 755

Para modificar los permisos haremos lo siguiente:

sudo chmod -R 755 /home/sftp

Esta es una regla de seguridad inherente a sshd y chroot. Pero, se imaginará el/la lector, que con estas configuraciones de permisos, propietarios y grupos, el propio desintatario de la carpeta (usuario1) no tiene permisos de escritura sobre la ubicación.

Para resolver esto creamos una nueva carpeta, dentro de /home/sftp/usuario1, que llamaremos archivos (esta ubicación será propiedad del usuario y parte de su grupo):

sudo mkdir /home/sftp/usuario1/archivos
sudo chown usuario1:usuariossftp /home/sftp/usuario1/archivos

listo! Ya tenemos nuestro sistema de archivos.

Ahora deberemos configurar el servicio sshd para que enjaule las conexiones (EXLUSIVAMENTE(ver nota al pie) del usuario usuario1 (y los siguientes que se necesite).

Configurar ssh

Si no esta instalado (es el caso en una instalación por defecto de huayra 1.1) lo instalamos:

sudo apt-get install openssh-server

Una vez instalado podemos verificar el estatus del servicio:

sudo service ssh status

Obtenemos algo así, si esta funcionando:

[ ok ] sshd is running.

A configurarlo: Debemos editar el archivo /etc/ssh/sshd_config

sudo pluma /etc/ssh/sshd_config

Debemos modificar la linea: Subsystem sftp /usr/lib/openssh/sftp-server (la comentamos poniendo un # delante de la linea) y la dejamos del siguiente modo:

#Subsystem sftp /usr/lib/openssh/sftp-server

Subsystem sftp internal-sftp

Luego, y al final del archivo agregamos lo siguiente (debe ir después de la última linea del archivo; caso contrario genera un error y no permite iniciar el servicio ssh):

Match User usuario1    
    ChrootDirectory /home/sftp/usuario1
    ForceCommand internal-sftp

dejo mi archivo de configuración como ejemplo (acá el usuario se llama simplemente usuario): sshd_config-ejemplo

reiniciamos el servicio

sudo service ssh restart

y ya debería estar funcionando (sino es así devolverá algún mensaje de error, en todos los casos en que yo lo porbé el error estaba remitido al archivo de configuración de sshd)

Por cada usuario al que deseamos crear una acceso enjaulado repetimos los pasos. Me queda investigar mapear (en la configuración del sshd) al grupo y no al usuario, pero eso es para mayor elegancia y economía de esfuerzo.

Con esto a mi me anda. Acá les dejo una captura de como accedo desde mi equipo remoto a mi carpeta en el servidor (con el navegador de archivos iniciado -caja- apretamos la combinación de teclas CTRL+L para habilitar el diálogo donde podemos escribir la cadena de conexión):

 sftpEnjaulado

 En el caso que se ilustra el usuario es rosbaco y la máquina se identifica como huara-mirror.local. Así puedo (yo soy el usuario del ejemplo) modificar la carpeta Archivos a mi antojo.

Si generamos un enlace simbólico desde /var/www hacia /home/sftp queda disponible el contenido para cualquier usuario que se conecte con un navegador web. Esto es tan simple como arrastrar y soltar (presionando ALT antes de soltar el elemento) la carpeta /home/sftp sobre /home/alumno/Compartir Web.

De este modo los recursos documentos/videos/música que cada docente sube a “su espacio personal dentro del servidor” queda disponible, ya sea para navegarlo con Crome, Firefox directamente o para ser enlazados desde la plataforma de educación que se utilice: Moodle y Chamilo.

************************************************************************

*** (nota al pie)

Lo de exclusivamente refiere a que, cualquier otra cuenta de usuario (que no definamos como enjaulado) con la que nos conectemos al servidor (vía ssh) obtendremos inicio de sesión en el bash remoto.

Yo con alumno me conecto para tareas de administración, claro: con una buena contraseña.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *