Si desea configurar una cuenta en su sistema que se usará solo para transferir archivos (y no para ssh al sistema), debe configurar SFTP Chroot Jail como se explica en este artículo.
En un escenario típico de sftp (cuando chroot sftp no está configurado), si usa sftp, puede ver el archivo de raíz como se muestra a continuación.
Si desea otorgar acceso sftp en su sistema a proveedores externos para transferir archivos, no debe usar sftp estándar. En su lugar, debe configurar Chroot SFTP Jail como se explica a continuación.
Entorno SFTP sin Chroot
En el siguiente ejemplo (un entorno sftp típico), John puede acceder al sistema mediante sftp, ver la carpeta /etc y descargar los archivos desde allí.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls projects john.txt documents sftp> cd /etc sftp> ls -l passwd -rw-r--r-- 0 0 0 3750 Dec 29 23:09 passwd sftp> get passwd Fetching /etc/passwd to passwd /etc/passwd 100% 3750 3.7KB/s 00:00
Entorno SFTP de Chroot
En el siguiente ejemplo, John puede usar sftp en el sistema y ver solo el directorio que ha designado para que john realice sftp (es decir, /entrante).
Cuando John intente realizar 'cd /etc', dará un mensaje de error. Dado que SFTP está configurado en un entorno chroot, John no puede ver ningún otro archivo en el sistema.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls sftp> cd /etc Couldn't canonicalise: No such file or directory
Ahora que sabe qué es el entorno Chroot SFTP, veamos cómo configurarlo.
1. Crear un nuevo grupo
Cree un grupo llamado sftpusers. Solo los usuarios que pertenezcan a este grupo estarán automáticamente restringidos al entorno chroot SFTP en este sistema.
# groupadd sftpusers
2. Crear usuarios (o modificar usuarios existentes)
Digamos que desea crear un usuario guestuser al que solo se le debe permitir realizar SFTP en un entorno chroot, y no se le debe permitir realizar SSH.
El siguiente comando crea un usuario invitado, asigna este usuario al grupo sftpusers, crea /incoming como el directorio de inicio, establece /sbin/nologin como shell (lo que no permitirá que el usuario use ssh y obtenga acceso al shell).
# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser # passwd guestuser
Verifique que el usuario se haya creado correctamente.
# grep guestuser /etc/passwd guestuser:x:500:500::/incoming:/sbin/nologin
Si desea modificar un usuario existente y convertirlo en un usuario de sftp solamente y ponerlo en la cárcel de sftp de chroot, haga lo siguiente:
# usermod -g sftpusers -d /incoming -s /sbin/nologin john
En una nota relacionada, si tiene que transferir archivos de Windows a Linux, use cualquiera de los clientes sftp mencionados en esta lista de los 7 principales clientes sftp.
3. Configurar el subsistema sftp-server en sshd_config
Debe indicarle a sshd que use el sftp interno para sftp (en lugar del servidor sftp predeterminado).
Modifique el archivo /etc/ssh/sshd_config y comente la siguiente línea:
#Subsystem sftp /usr/libexec/openssh/sftp-server
A continuación, agregue la siguiente línea al archivo /etc/ssh/sshd_config
Subsystem sftp internal-sftp
# grep sftp /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
4. Especifique el directorio Chroot para un grupo
Desea colocar solo ciertos usuarios (es decir, usuarios que pertenecen al grupo sftpusers) en el entorno de chroot jail. Agregue las siguientes líneas al final de /etc/ssh/sshd_config
# tail /etc/ssh/sshd_config Match Group sftpusers ChrootDirectory /sftp/%u ForceCommand internal-sftp
En lo anterior:
- Hacer coincidir sftpusers de grupo:esto indica que las siguientes líneas coincidirán solo para los usuarios que pertenecen al grupo sftpusers
- ChrootDirectory /sftp/%u:esta es la ruta que se usará para chroot después de autenticar al usuario. %u indica el usuario. Entonces, para john, será /sftp/john.
- ForceCommand internal-sftp:esto fuerza la ejecución de internal-sftp e ignora cualquier comando que se mencione en el archivo ~/.ssh/rc.
5. Crear directorio de inicio sftp
Dado que especificamos /sftp como ChrootDirectory arriba, cree este directorio (que es equivalente a su directorio /home típico).
# mkdir /sftp
Ahora, en /sftp, cree los directorios individuales para los usuarios que forman parte del grupo sftpusers. es decir, los usuarios a los que solo se les permitirá realizar sftp y estarán en el entorno chroot.
# mkdir /sftp/guestuser
Entonces, /sftp/guestuser es equivalente a / para el usuario invitado. Cuando el usuario invitado accede al sistema mediante sftp y ejecuta "cd /", solo verá el contenido de los directorios en "/sftp/usuarioinvitado" (y no el / real del sistema). Este es el poder del chroot.
Entonces, en este directorio /sftp/guestuser, cree cualquier subdirectorio que desee que vea el usuario. Por ejemplo, cree un directorio entrante donde los usuarios puedan transferir sus archivos.
# mkdir /sftp/guestuser/incoming
6. Configurar el permiso apropiado
Para que chroot funcione correctamente, debe asegurarse de que los permisos apropiados estén configurados correctamente en el directorio que acaba de crear arriba.
Establezca la propiedad al usuario y agrupe al grupo sftpusers como se muestra a continuación.
# chown guestuser:sftpusers /sftp/guestuser/incoming
El permiso tendrá el siguiente aspecto para el directorio de entrada.
# ls -ld /sftp/guestuser/incoming drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
El permiso tendrá el siguiente aspecto para el directorio /sftp/guestuser
# ls -ld /sftp/guestuser drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser # ls -ld /sftp drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
7. Reinicie sshd y pruebe Chroot SFTP
Reiniciar sshd:
# service sshd restart
Pruebe el entorno chroot sftp. Como puede ver a continuación, cuando guesetuser hace sftp y hace "cd /", solo verá el directorio entrante.
# sftp [email protected] guestuser@thegeekstuff's password: sftp> pwd Remote working directory: /incoming sftp> cd / sftp> ls incoming
Cuando el usuario invitado transfiera archivos al directorio /entrante desde el sftp, en realidad se ubicarán en el directorio /sftp/guestuser/entrante del sistema.