Permisos de escritura de usuario SFTP chrootados

10

Tengo una configuración con usuarios sftp solo:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Recibo el siguiente mensaje en mi secure.log:

fatal: bad ownership or modes for chroot directory

Con la palabra clave de coincidencia, vienen algunos elementos de seguridad ... los directorios deben ser propiedad de root y los directorios deben ser chmod 755 (drwxr-xr-x). Por lo tanto, hace que sea imposible para un usuario tener permisos de escritura en las carpetas, si solo se puede escribir en la raíz del usuario y se establece en ben no escribible para grupos debido a la seguridad de ssh.

Alguien sabe acerca de un buen trabajo?

Adionditsak
fuente
¿Los chrootusuarios ed son dueños de sus ChrootDirectory? ¿Pueden acceder a él?
John WH Smith

Respuestas:

2

Tengo la misma configuración en nuestro servidor. Usamos la misma configuración de SSHD. Los directorios principales de los usuarios son propiedad de root y dentro de ellos hay carpetas documentsy public_htmlpropiedad de sus respectivos usuarios. Luego, los usuarios inician sesión con 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 los 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.

Tilia
fuente
1
Para mí, en Debian Jessie (8.10), configurar una ACL en el hogar del usuario no funciona. Cuando el usuario intenta iniciar sesión con SFTP, obtienepacket_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
Drew Chapin
7

Recientemente hemos encontrado una solución alternativa 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:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

Ahora /homesatisface los requisitos ChrootDirectoryy los usuarios restringidos no pueden enumerarlos, pero los sftponlyusuarios no podrán iniciar sesión si sus directorios de inicio están configurados como de costumbre ( /home/$LOGNAME): en el entorno chrooteado, sus directorios de inicio no están dentro /homesino directamente debajo raíz ( /).

solución 1

Establezca las casas restringidas de los usuarios para que aparezcan en chroot:

root@server:~ # usermod -d /username username

advertencia 1

Si alguno de los usuarios sin restricciones o alguna secuencia de comandos de administración usa la expansión tilde de bash como ~usernamese expandirá hasta /usernameahora, que no es lo que se quiere decir.

Además, el administrador que crea sftponlyusuarios tiene que recordar usar el hogar no predeterminado. Solucionable con un guión. Que el administrador debe recordar usar.

solución 2

Esta es una alternativa a la anterior que terminamos usando:

root@server:~ # ln -s . /home/home

Es decir, crear un enlace simbólico dentro /homede su propio nombre de directorio. Ahora bajo chroot /home/usernameapunta al mismo directorio que sin chroot. Para el usuario restringido que inició sesión con sftp, aparecería como /username. Este directorio se puede escribir a su propietario (usuario restringido). El usuario restringido no puede enumerar sus directorios principales o principales de ninguno de los hermanos por nombre.

Lo único especial de un sftponlyusuario es su participación en el sftponlygrupo. Encontramos que es más fácil de tratar que la solución 1.

advertencias 2

  1. No puede tener un usuario llamado 'inicio' con un directorio de inicio /home/home
  2. Debe tener cuidado con los scripts que atraviesan la /homejerarquía y siguen los enlaces simbólicos.
artm
fuente
Hola Artm o cualquier otro lector, sé que esta es una publicación antigua, pero ¿podría ayudarme a entender la solución 2 por favor? Tengo un usuario (ftpuser) que necesita ser encarcelado a su directorio de inicio (/ home / ftpuser /), esto puedo lograrlo pero / home / ftpuser tiene que tener 755 por supuesto. Necesito el ftpuser para poder crear archivos y carpetas en su directorio de inicio. ¿Qué enlace simbólico necesito crear y qué valor debería tener mi ChrootDirectory?
descarado
4

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á colocar y obtener archivos.

YoMismo
fuente
0

Debe crear la siguiente estructura de directorio:

/Usuario doméstico

/ home / user / home / user <- el directorio real al que tendrá acceso el usuario

Opcionalmente:

/home/user/.ssh/authorized_keys <- si desea autenticarse con una clave pública

Fernando Ulisses dos Santos
fuente
0

En referencia a la sección 'permisos de directorio' en la respuesta de @artm (que acabo de probar) ... encontré:

root@server:~ # chmod 111 /home <- Does not work

No permite que la conexión sftp funcione en ubuntu con permisos de ejecución solo en todo, es decir, 111.

Encontre eso:

root@server:~ # chmod 555 /home

Funciona con conexión a sftp con los permisos Leer y Ejecutar, es decir, 555. No estoy seguro si debian vs otros sabores son diferentes, pero eso es lo que funciona en mis instalaciones de ubuntu.

willm
fuente
0

Cuando crea un usuario, debe establecer la propiedad utilizando chowncada directorio para cada usuario.

Por ejemplo:

sudo chown usertest:groupsftp /home/rootsftp/usertest
Miguel Dueñas
fuente