¿Cómo puedo crear un usuario de SFTP en mi instancia de Lightsail?

Última actualización: 14/10/2021

Quiero crear un usuario de SFTP en mi instancia de Amazon Lightsail. ¿Cómo puedo hacerlo?

Resolución

Nota: Los siguientes pasos crean un usuario de SFTP que tiene acceso al entorno chroot (jaula chroot) sin acceso SSH. El usuario de SFTP no puede acceder a los directorios fuera del entorno o directorio chroot. Por lo tanto, el directorio chroot se convierte en el directorio raíz del usuario.

1.    Cree un grupo para los usuarios de SFTP. El grupo ayuda a administrar muchos usuarios de SFTP diferentes. En este ejemplo, el nombre del grupo es sftp_group. Puede cambiarlo por un nombre de grupo de su elección.

sudo groupadd sftp_group

2.    Cree un usuario en la instancia con un directorio de inicio. Este usuario solo realiza tareas SFTP y no tiene un shell de inicio de sesión SSH. En el siguiente ejemplo, sustituya sftp_user por un nombre de usuario de su elección.

sudo useradd -g sftp_group -m -d  /home/sftp_user -s /sbin/nologin sftp_user

3.    El usuario puede autenticarse de diferentes maneras cuando se conecta al servidor a través de SFTP. En el siguiente ejemplo se utiliza una contraseña y una autenticación basada en claves SSH.

Autenticación de contraseña

Para requerir la autenticación de contraseña, cree una contraseña mediante el siguiente comando:

sudo passwd sftp_user

Autenticación basada en claves SSH

Si utiliza la autenticación basada en claves SSH, debe crear los archivos SSH para el usuario y, a continuación, agregar la clave pública a los archivos. Para ello:

En el directorio principal del usuario, cree una carpeta .ssh y un archivo authorized_keys:

sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys

Agregue la clave pública SSH que quiera usar al archivo /home/sftp_user/.ssh/authorized_keys. Para obtener más información, consulte Configurar SSH para sus instancias de Lightsail basadas en Linux/UNIX.

Ejecute los siguientes comandos para cambiar la propiedad y los permisos del directorio principal del usuario:

sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -R
sudo chown root:sftp_group /home/sftp_user/
sudo chmod 755 /home/sftp_user/ 
sudo chmod 700 /home/sftp_user/.ssh/
sudo chmod 600 /home/sftp_user/.ssh/authorized_keys

En el ejemplo anterior se utiliza el permiso 755 del directorio /home/sftp_user y se cambia la propiedad al usuario raíz. Esto se debe a que el directorio se va a utilizar como directorio chroot. Tenga en cuenta que todos los componentes de la ruta deben ser directorios propiedad de la raíz en los que no pueda escribir ningún otro usuario o grupo.

4.    Edite el archivo /etc/ssh/sshd_config de la siguiente manera:

Modifique la línea Subsystem sftp comentando la línea Subsystem sftp /usr/libexec/openssh/sftp-server:

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

Sustituya la línea anterior por:

Subsystem sftp internal-sftp

Agregue directivas para limitar el acceso de los usuarios de SFTP. Estas directivas deben agregarse al final del archivo:

Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp

En el ejemplo anterior, la directiva ChrootDirectory se utilizó para especificar el directorio raíz de los usuarios de SFTP (jaula chroot). Match block para el usuario que pertenece a sftp_group utiliza la ruta /home/%u como directorio raíz. Los caracteres %u representan al usuario. Puede cambiar el directorio raíz del usuario.

La directiva ForceCommand internal-sftp fuerza el uso de un servidor SFTP en proceso.

Si utiliza la autenticación con contraseña, busque la directiva PasswordAuthentication en el archivo /etc/ssh/sshd_config y asegúrese de que esté configurada en yes (sí).

5.    Cree los directorios chroot que utilizará el usuario. Reemplace el nombre del directorio sftp_user y uploads por los nombres que prefiera.

sudo mkdir /home/sftp_user/uploads

Modifique la propiedad de los archivos:

sudo chown sftp_user:sftp_group /home/sftp_user/uploads

6.    Compruebe que los permisos de directorio son los que se muestran en el siguiente ejemplo:

ls -ld /home
drwxr-xr-x 3 root root 23 Oct  6 15:17 /home

ls -ld /home/sftp_user
drwxr-xr-x 3 root sftp_group 21 Oct  6 15:17 /home/sftp_user

ls -ld /home/sftp_user/uploads/
drwxr-xr-x 2 sftp_user sftp_group 6 Oct  6 15:17 /home/sftp_user/uploads/

7.    Reinicie el servicio sshd:

sudo systemctl restart sshd

8.    Conéctese a la instancia a través de sftp:

Autenticación de contraseña

# sftp sftp_user@example.com
sftp_user@example.com's password:

Autenticación basada en claves SSH

# sftp -i key.pem sftp_user@example.com

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?