Hoy toca ver cómo configurar openSSH (como siempre, en entornos Red Hat) para aceptar únicamente peticiones SFTP enjaulando a los usuarios sftp en sus homes. Para añadirle contenido, además, configuraremos este servicio en un segundo proceso que correrá en la máquina de forma independiente al proceso openssh habitual, para evitar tener problemas con nuestras conexiones SSH, y por tanto, se configurará un puerto de escucha diferente al habitual, en el ejemplo, el 12022.
Fichero de configuración
En primer lugar copiaremos el fichero de configuración de openssh para adaptar la copia a nuestras necesidades:
1 |
[root@myserver]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config_12022 |
1 2 3 4 5 6 7 8 9 10 11 12 |
# Cambiamos el puerto Port 12022 # Modificamos el Subsystem original #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp # Añadimos el enjaulado Match Group sftp12022 ChrootDirectory /sftp/%u ForceCommand internal-sftp AllowTcpForwarding no |
Cambios en el sistema
1 |
[root@myserver]# groupadd sftp12022 |
1 |
[root@myserver]# mkdir /sftp |
1 |
[root@myserver]# /usr/sbin/sshd -f /etc/ssh/sshd_config_12022 |
1 2 3 |
[root@myserver]# netstat -natp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2228/sshd tcp 0 0 0.0.0.0:12022 0.0.0.0:* LISTEN 13007/sshd |
Usuarios SFTP
1 |
[root@myserver]# mkdir /sftp/joe |
1 2 |
[root@myserver]# useradd -g sftp12022 -d /joe -s /sbin/nologin joe [root@myserver]# passwd joe |
1 2 |
[root@myserver]# mkdir /sftp/joe/joe [root@myserver]# chown joe:sftp12022 /sftp/joe/joe |
Lo malo de hacerlo así, es que efectivamente, a pesar de que el usuario no tendrá home de conexión SSH, porqué no conectará por SSH, su home se habrá creado en la raíz ( /joe ). Bajo mi punto de vista es un poco engorro tener las homes de los usuarios SFTP en la raíz, pero no he encontrado una solución a este problema. Si no vas a usar la autentificación de usuarios mediante clave pública, quizá sea una buena idea eliminar las homes de la raíz, puesto que no deberías necesitarlas. Update: Para ello, símplemente puedes crear el usuario con la opción «-M», lo cual no creará la home del usuario durante su alta:
1 |
[root@myserver]# useradd -g sftp12022 -M -d /joe -s /sbin/nologin joe |
Conexión desde cliente
1 |
[joe@myworkstation]$ sftp -P 12022 joe@80.80.80.81 |
La conexión le ubicará dentro de /sftp/joe/joe, con lo que tendrá permisos de escritura, y además quedará enjaulado en /sftp/joe. Es decir, el usuario podrá hacer un único «cd..» hasta ubicarse en /sftp/joe, pero no podrá salir de ahí. Como por defecto el usuario se conecta a /sftp/joe/joe, tendrá todos los permisos y habrá quedado enjaulado y controlado.
De nuevo recalcar que el usuario tampoco podrá conectar por SSH al no tener una shell válida.
Ejecución al inicio
A falta de configurar el correspondiente script de inicio, podremos meter en el rc.local la instrucción para lanzar el nuevo sshd. Para ello, símplemente añadiremos la siguiente línea al final del fichero /etc/rc.local:
1 |
/usr/sbin/sshd -f /etc/ssh/sshd_config_12022 |
FUENTES:
http://www.thegeekstuff.com/
Foto por bulldog1
Gracias Adrian! Un buen manual para habilitar SFTP!
Si quisiera crear una carpeta compartida para todos los usuarios del grupo y que todos puedieran compartir informacion dentro de esta como podria configurarlo ?