Quiero crear un usuario de SFTP en mi instancia de Amazon Lightsail.
Solución
Nota: Los pasos siguientes crean un usuario de SFTP con acceso a un entorno chroot (cárcel de chroot) sin acceso SSH. El usuario de SFTP no puede acceder a los directorios fuera del directorio o entorno chroot. Para este usuario, el directorio chroot es el directorio raíz.
Configure su grupo y usuario de SFTP
-
Cree un grupo para los usuarios de SFTP con el siguiente comando:
sudo groupadd sftp_group
Nota: Sustituya sftp_group por el nombre de su grupo.
-
Cree un usuario en la instancia con un directorio principal sin acceso al shell de inicio de sesión de SSH. Para ello, ejecute el comando siguiente:
sudo useradd -g sftp_group -m -d /home/sftp_user -s /sbin/nologin sftp_user
Nota: Sustituya sftp_user por su nombre de usuario.
Configure la autenticación de usuario con la autenticación con contraseña o con la autenticación basada en claves SSH
Autenticación de contraseña
Use el siguiente comando para crear una contraseña:
sudo passwd sftp_user
Autenticación basada en claves SSH
-
Para requerir la autenticación basada en claves SSH, cree una carpeta .ssh en el directorio principal del usuario. A continuación, cree 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 desea usar al archivo /home/sftp_user/.ssh/authorized_keys. Para obtener más información, consulte Set up SSH keys for Lightsail.
-
Para cambiar la propiedad y los permisos del directorio principal del usuario, ejecute los siguientes comandos:
sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -Rsudo 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
Nota: El ejemplo anterior usa el permiso 755 en el directorio /home/sftp_user y, a continuación, cambia la propiedad al usuario raíz. Este directorio de usuario se usa como directorio chroot.
Edite el archivo /etc/ssh/sshd_config
-
En la línea sftp del subsistema, comente la línea sftp /usr/libexec/openssh/sftp-server del subsistema:
# Subsystem sftp /usr/libexec/openssh/sftp-server
-
Sustituya la línea anterior por el texto siguiente:
Subsystem sftp internal-sftp
-
Para limitar el acceso de los usuarios de SFTP, añada el siguiente texto al final del archivo:
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
En el ejemplo anterior, ChrootDirectory especifica el directorio raíz para los usuarios de SFTP. MatchGroup identifica a los usuarios del sftp_group que utilizan la ruta /home/%u como directorio raíz. Los caracteres %u representan al usuario. ForceCommand internal-sftp fuerza el uso de un servidor SFTP en proceso.
-
Si utiliza la autenticación con contraseña, defina PasswordAuthentication en el archivo /etc/ssh/sshd_config en yes.
Crear los directorios chroot para el usuario
- Para crear un directorio chroot, ejecute lo siguiente:
sudo mkdir /home/sftp_user/uploads
Nota: Sustituya el nombre del directorio, sftp_user, y las subidas por el nombre de su directorio.
- Modifique la propiedad de los archivos:
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
Nota: Sustituya el nombre del directorio, sftp_user, y las subidas por el nombre de su directorio.
Verifique los cambios y reinicie el servicio SSHD
-
Compruebe que los permisos del directorio son similares a los del ejemplo siguiente:
ls -ld /homedrwxr-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/
-
Reinicie el servicio SSHD:
sudo systemctl restart sshd
Conéctese a la instancia mediante SFTP
Autenticación de contraseña
Ejecute lo siguiente:
# sftp sftp_user@example.com's password:
Autenticación basada en claves SSH
Ejecute lo siguiente:
# sftp -i key.pem sftp_user@example.com