Escribo esta entrada que me surge por la necesidad de tener un usuario SFTP enjaulado en un directorio y que solo pueda acceder a los ficheros en modo lectura.
He encotrado muchos tutoriales en internet de como enjaular usuarios SFTP y como gestionar directorios en modo lectura, pero ninguno que fusioanara ambas opciones, con lo que paso a explicarlo en esta entrada.
Para realizar el tutorial es necesario tener instalado el openssh-server, que viene en casi todas las distribuciones linux, de no estar instalado se puede instalar con este comando.
yum –y install openssh-server
- Creamos el grupo SFTP que gestionara los accesos
groupadd sftp
2. Creamos el directorio SFTP y el directorio del usuario y los permisos adecuados.
##directorio sftp
mkdir /var/sftp
chgrp sftp /var/sftp
chmod 750 /var/sftp/
##directorio usuario sftp
mkdir /var/sftp/prueba
chmod 770 /var/sftp/prueba
chgrp sftp /var/sftp/prueba
3. Creamos el usuario prueba, añadiendolo al grupo sftp, sin accesos shell y con el home del directorio creado.
useradd -g sftp -s /bin/false -d /var/sftp/prueba prueba ; echo "Password" | passwd --stdin prueba
4. Editamos la configuracion del ssh ( /etc/ssh/sshd_config ), donde cambiamos el modo SFTP sftp-server por internal-sftp ( Subsystem sftp internal-sftp ), añadimos el grupo sftp ( Subsystem sftp internal-sftp ), asignamos el directorio del SFTP ( ChrootDirectory /var/sftp ) y configuramos el SFTP en modo solo lectura ( ForceCommand internal-sftp -R ).
vim /etc/ssh/sshd_config
# Comentamos original
### Subsystem sftp /usr/libexec/openssh/sftp-server
# Add sftp group. directory. only read
Subsystem sftp internal-sftp
Match group sftp
ChrootDirectory /var/sftp
ForceCommand internal-sftp -R
5. Reiniciamos el servicio ssh.
service sshd restart
6. Comprobamos a conectarnos con cualquier sofware SFTP (como winscp) y vemos como funciona correctamente.