Hemos encontrado una solución recientemente que dice así:
/etc/ssh/sshd_config:
...
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
permisos de directorio:
[email protected]:~ # chown root:root /home
[email protected]:~ # chmod 111 /home
[email protected]:~ # chmod 700 /home/*
Ahora /home
cumple los requisitos para ChrootDirectory
y no puede ser listado por usuarios restringidos, pero sftponly
los usuarios no podrán iniciar sesión si sus directorios de inicio están configurados como de costumbre (/home/$LOGNAME
):en el entorno chroot, sus directorios de inicio no están dentro de /home
pero directamente bajo la raíz (/
).
solución 1
Configure las casas de los usuarios restringidos para que aparezcan en chroot:
[email protected]:~ # usermod -d /username username
advertencia 1
Si alguno de los usuarios sin restricciones o algún script de administración usa la expansión de tilde de bash como ~username
se expandirá a /username
ahora, que no es lo que se quiere decir.
También el administrador que crea sftponly
los usuarios deben recordar usar el hogar no predeterminado. Solucionable con un script. Que el administrador debe recordar usar.
solución 2
Esta es una alternativa a la anterior que acabamos usando:
[email protected]:~ # ln -s . /home/home
Eso es crear un enlace simbólico dentro de /home
a su propio dirname. Ahora bajo chroot /home/username
apunta al mismo directorio que sin chroot. Para usuarios restringidos que iniciaron sesión con sftp, aparecería como /username
. Este directorio tiene permisos de escritura para su propietario (usuario restringido). El usuario restringido no puede enumerar sus directorios principales o de inicio de ninguno de los hermanos por nombre.
Lo único especial de un sftponly
usuario es su participación en el sftponly
grupo. Encontramos que era más fácil de manejar que la solución alternativa 1.
advertencias 2
- No puede tener un usuario llamado 'inicio' con un directorio de inicio
/home/home
- Debe tener cuidado con los scripts que atraviesan
/home
jerarquía y seguir enlaces simbólicos.
Debe crear una estructura dentro del directorio de inicio del usuario, como directorios de entrada y salida. Esos directorios deben ser propiedad del usuario y allí podrá poner y obtener archivos.
Tengo la misma configuración en nuestro servidor. Usamos la misma configuración de SSHD. Los directorios de inicio de los usuarios son propiedad de root y dentro de ellos hay carpetas documents
y public_html
propiedad de los respectivos usuarios. Luego, los usuarios inician sesión usando SFTP y escriben en esas carpetas (no directamente en casa). Como SSH no está permitido para ellos, funciona perfectamente. Puede ajustar qué directorios se crearán para nuevos usuarios en /etc/skel/ (al menos en openSUSE, no estoy tan familiarizado con otras distribuciones).
Otra posibilidad sería ACL (documentación de openSUSE):puede agregar permiso de escritura para el usuario respectivo para su directorio de inicio.