Introducción
Si usted es un administrador del sistema que administra servidores Linux, es probable que deba otorgar acceso SFTP a algunos usuarios para cargar archivos en sus directorios de inicio. De forma predeterminada, los usuarios que pueden acceder al sistema a través de SSH, SFTP y SCP pueden explorar todo el sistema de archivos, incluidos los directorios de otros usuarios. Esto puede no ser un problema si estos usuarios son de confianza, pero si no desea que los usuarios registrados naveguen por el sistema, deberá restringir el acceso de los usuarios a su directorio personal. Esto agrega una capa adicional de seguridad, particularmente en sistemas con múltiples usuarios.
En este tutorial, explicaremos cómo configurar un entorno SFTP Chroot Jail que restringirá a los usuarios a sus directorios de inicio. Los usuarios solo tendrán acceso SFTP, el acceso SSH estará deshabilitado. Estas instrucciones deberían funcionar para cualquier distribución de Linux moderna, incluidos Ubuntu, CentOS, Debian y Fedora.
Si desea configurar SFTP Chroot Jail en un servidor remoto, siga leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Crear un grupo SFTP
En lugar de configurar el servidor OpenSSH para cada usuario individualmente , crearemos un nuevo grupo y agregaremos todos nuestros usuarios chroot a este grupo.
Ejecute el groupadd
comando groupadd para crear el grupo de usuarios sftponly
sudo groupadd sftponly
Puede nombrar el grupo como desee.
Agregar usuarios al grupo SFTP
El siguiente paso es agregar los usuarios que desea restringir al grupo sftponly
Si se trata de una nueva configuración y el usuario no existe, se puede crear una nueva cuenta de usuario escribiendo:
sudo useradd -g sftponly -s /bin/false -m -d /home/username username
- La
-g sftponly
agregará al usuario al grupo sftponly. - La
-s /bin/false
establece el shell de inicio de sesión del usuario. Al configurar el shell de inicio de sesión/bin/false
, el usuario no podrá iniciar sesión en el servidor a través de SSH. - Las
-m -d /home/username
indican a useradd que cree el directorio de inicio del usuario.
Establezca una contraseña segura para el usuario recién creado:
sudo passwd username
De lo contrario, si el usuario que desea restringir ya existe, agregue el usuario al sftponly
y cambie el shell del usuario:
sudo usermod -G sftponly -s /bin/false username2
El directorio de inicio del usuario debe ser propiedad de root y tener 755
permisos:
sudo chown root: /home/username
sudo chmod 755 /home/username
Dado que los directorios de inicio de usuario son propiedad del usuario raíz, estos usuarios no podrán crear archivos y directorios en sus directorios de inicio. Si no hay directorios en la página de inicio del usuario, deberá crear nuevos directorios a los que el usuario tendrá acceso completo. Por ejemplo, puede crear los siguientes directorios:
sudo mkdir /home/username/{public_html,uploads}
sudo chmod 755 /home/username/{public_html,uploads}
sudo chown username:sftponly /home/username/{public_html,uploads}
Si una aplicación web usa el public_html
como raíz del documento, estos cambios pueden causar problemas de autorización. Por ejemplo, si está ejecutando WordPress, deberá crear un grupo de PHP que se ejecutará como propietario del archivo y agregará el servidor web al grupo sftponly
Configuración SSH
SFTP es un subsistema de SSH y admite todos los mecanismos de autenticación SSH.
Abra el archivo de configuración SSH /etc/ssh/sshd_config
con su editor de texto:
sudo nano /etc/ssh/sshd_config
Busque la línea que comienza con Subsystem sftp
, generalmente al final del archivo. Si la línea comienza con un hash #
, elimine el hash #
y cámbielo para que se vea así:
Subsystem sftp internal-sftp
Al final del archivo, agregue el siguiente bloque de configuraciones:
Match Group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
La ChrootDirectory
especifica la ruta al directorio chroot. %h
indica el directorio de inicio del usuario. Este directorio debe ser propiedad del usuario root y ningún otro usuario o grupo debe poder escribirlo.
Tenga especial cuidado al editar el archivo de configuración SSH. Una configuración incorrecta podría impedir que se inicie el servicio SSH.
Una vez hecho esto, guarde el archivo y reinicie el servicio SSH para aplicar los cambios:
sudo systemctl restart ssh
En CentOS y Fedora, el servicio ssh se llama sshd
:
sudo systemctl restart sshd
Prueba de configuración
Ahora que ha configurado el chroot SFTP, puede intentar acceder a la computadora remota a través de SFTP usando las credenciales de usuario del chroot. En la mayoría de los casos, usará un cliente SFTP de escritorio como FileZilla, pero en este ejemplo usaremos el comando sftp.
Abra una conexión SFTP usando el comando sftp seguido del nombre de usuario del servidor remoto y la dirección IP del servidor o el nombre de dominio:
sftp [email protected]
Se le pedirá que ingrese la contraseña del usuario. Una vez conectado, el servidor remoto mostrará un mensaje de confirmación y el mensaje sftp>
:
[email protected]'s password:
sftp>
Ejecute el pwd
, como se muestra a continuación, y si todo funciona como se esperaba, el comando debería devolver /
.
sftp> pwd
Remote working directory: /
También puede listar archivos y directorios remotos usando el ls
y debería ver los directorios que creamos anteriormente:
sftp> ls
public_html uploads
Conclusión
En este tutorial, aprendió cómo configurar un entorno SFTP de Chroot Jail en su servidor Linux y restringir el acceso de los usuarios a su directorio de inicio.
De forma predeterminada, SSH escucha en el puerto 22. Cambiar el puerto SSH predeterminado agrega una capa adicional de seguridad al servidor al reducir el riesgo de ataques automatizados. También puede configurar la autenticación basada en claves SSH y conectarse al servidor sin ingresar una contraseña.