Solución 1:
Hola, @emmdee. Me tomó una eternidad darme cuenta de que hay un truco simple y agradable para eso. Solo tiene que convertir a root en el propietario de una carpeta principal en la que desea sFTP, luego use el comando de fuerza para decirle a un usuario específico que cargue un DIR específico dentro del directorio CHROOT.
En tu caso por si quieres /home/sftpuser
para ser el directorio escribible, tendrá que hacer root el dueño de /home
luego siga adelante y Force Command he /sftpuser
como un directorio de destino para ese usuario o grupo.
Tu /etc/ssh/sshd_conf
se verá así:
Match User sftpuser
ChrootDirectory /home
ForceCommand internal-sftp -d /sftpuser
AllowTCPForwarding no
X11Forwarding no
Una vez hecho esto, debe otorgar los permisos correctos como se dijo anteriormente, la raíz debe ser propietaria del directorio principal (chroot) /home
mientras que el usuario debe poseer el directorio final (-d) /sftpuser
. Voy a suponer que tiene un grupo de usuarios de sFTP llamado sftpusers , que no; simplemente omita el grupo de los siguientes comandos o reemplácelo con los usuarios (root en los primeros y sftpusers en el segundo). Como estamos usando -R en la línea de comando para la herencia, deberá comenzar con la propiedad raíz antes de la propiedad del usuario de la siguiente manera:
sudo chown -R root:sftpusers /home
luego para el usuario puede ejecutar:
sudo chown -R sftpuser:sftpusers /home/sftpuser
No estoy seguro de que esto sea necesario, pero siempre puede reiniciar el servicio sshd para asegurarse de que todas las configuraciones se vuelvan a cargar:
sudo systemctl restart sshd.service
Con suerte, esto debería funcionar a las mil maravillas, tuve un problema similar y la solución estaba ahí mirándome a los ojos la mayor parte del tiempo.
¡Salud!
Solución 2:
Sé que han pasado un par de años, pero esta publicación me llevó al 98% del camino. después de buscar durante mucho tiempo.
Para que pueda tener usuarios chroot y obtenerlos automáticamente en su propio directorio con permisos de escritura, utilicé el método que sugirió African Idiot, y también hice que el directorio chroot original fuera propiedad del usuario root y el grupo ftp.
Pero la clave para mí para mantenerlos en esa carpeta y no poder... e intentar explorar las carpetas de otros usuarios, fue hacer que la carpeta chmod 710 (rwx--x---)
para que el grupo ftp haya ejecutado para hacer internal-sftp -d /%u (es decir, cd en el subdirectorio de usuarios) y ahora si intento cd ..
en el directorio superior, porque no hay lectura para nadie más que para root, falla.
drwx--x--- 6 root sftpusers uarch 6 Feb 19 15:34 ./
drwxr-xr-x 5 root root uarch 5 Feb 4 09:13 ../
drwxrwx--- 3 anotheruser anotheruser uarch 3 Feb 24 15:34 anotheruser/
drwxrwx--- 3 ftpuser ftpuser uarch 12 Feb 25 10:55 ftpuser/
espero que esto ayude a alguien más también.