La solución más práctica es SFTP, un protocolo interno de SSH, mediante el cual la información viaja encriptada de extremo a extremo. Sin embargo, crear el usuario y asignarle una contraseña no es suficiente si se quiere mantener un estandar de seguridad. Así mismo, mejorar la seguridad a veces causa que el servicio esté inaccesible por problemas de permisos.
Veremos como configurar el servidor para dar los permisos precisos sobre carpetas puntuales a multiples usuarios.
Como bonus, vamos a generar un conjunto de claves rsa publico-privada para acceder sin necesidad de contraseña.
En primer lugar, crearemos un grupo con el cual administraremos a todos los usuarios a nivel SSH
#groupadd usuarios-sftp
#mkdir /carpetas-sftp
seguidamente editaremos el archivo sshd_config para asociar los recursos creados.
#nano /etc/ssh/sshd_config
Comentamos el comando Subsystem y añadimos las lineas siguientes
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group usuarios-sftp
ChrootDirectory /carpetas-sftp/%u
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Reiniciamos ssh
systemctl restart sshd
Creamos nuestros usuarios
useradd usuario1 -g usuarios-sftp
Desde aquí tenemos 2 opciones. Manejar contraseñas o archivos de llave (.key, .ppk).
Opción 1: Contraseña.
passwd usuario1
Opción 2: Generar archivo de llave
su usuario1
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys
Colocar una llave pública previamente creada con openssh o puttygen (tutorial próximamente) y guardar el archivo.
exit
Finalmente impedir que el usuario pueda acceder mediante ssh
usermod -s /usr/sbin/nologin usuario1
Creamos la carpeta destino y asignamos permisos.
mkdir /carpetas-sftp/usuario1
mkdir /carpetas-sftp/usuario1/data
chown root.root /carpetas-sftp/usuario1
chmod -R 0755 /carpetas-sftp/usuario1/
chown usuario1:usuarios-sftp /carpetas-sftp/usuario1/data
chmod -R 0755 /carpetas-sftp/usuario1/data/