¿Cómo puedo eliminar los usuarios de SSH sftp solo en sus casas?

111

Quiero dar acceso a un cliente a mi servidor, pero quiero limitar esos usuarios a sus directorios de inicio. Fijaré el montaje en cualquier archivo que quiera que ellos puedan ver.

Creé un usuario llamado bob y lo agregué a un nuevo grupo llamado sftponly . Tienen un directorio de inicio en /home/bob . Cambié su shell a /bin/false para detener los inicios de sesión de SSH. Aquí está su línea /etc/passwd :

bob:x:1001:1002::/home/bob:/bin/false

También he cambiado el /etc/ssh/sshd_config para incluir lo siguiente:

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

Cuando intento iniciar sesión como ellos, esto es lo que veo

$ sftp [email protected]
[email protected]'s password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

Si hago un comentario sobre la línea ChrootDirectory , puedo SFTP pero luego tienen acceso libre al servidor. He descubierto que ChrootDirectory /home funciona, pero aún les da acceso a cualquier directorio de inicio. He probado explícitamente ChrootDirectory /home/bob pero eso tampoco funciona.

¿Qué estoy haciendo mal? ¿Cómo puedo limitar bob a /home/bob/ ?

---- EDIT -----

De acuerdo, solo eché un vistazo a /var/log/auth.log y vi esto:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

No estoy del todo seguro de lo que sucede allí, pero sugiere que algo anda mal en el directorio de usuarios. Aquí está el resultado de ls -h /home :

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob
    
pregunta Oli 09.05.2012 - 15:43

3 respuestas

111

Todo este dolor es gracias a varios problemas de seguridad como descrito aquí . Básicamente, el directorio chroot debe ser propiedad de root y no puede ser ningún acceso de escritura grupal. Encantador. Entonces, básicamente, necesitas convertir tu chroot en una celda de retención y dentro de ese puedes tener tu contenido editable.

sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable

Y bam, puedes iniciar sesión y escribir en /writable .

    
respondido por el Oli 09.05.2012 - 16:21
52

Para cerrar un directorio de SFTP, debes

  1. Crear un usuario y forzar la raíz para que sea su propietario

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. Cambiar la ubicación del subsistema en / etc / ssh / sshd_config:

    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
    

    y crea una sección de usuario al final del archivo (ssh puede morir reapareciendo si se coloca después de la línea del subsistema):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    
respondido por el josircg 25.10.2012 - 19:54
4

Pasé todo el día intentando obtener una red compartida en mi frambuesa. Quería bloquear al usuario para que no pudiera navegar a través de todo el sistema de archivos, no tenía acceso de inicio de sesión ssh y quería tener acceso de escritura al recurso compartido de red.

Y así es como lo hice funcionar:

Primero creé un usuario:

sudo useradd netdrive

Luego editó /etc/passwd y se aseguró de que tenga /bin/false para el usuario, por lo que la línea era:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

Edité /etc/ssh/sshd_config para incluir:

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

Propietario y permisos de directorio personal modificados:

sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/

Bien, después de todo esto pude conectar usando sshfs pero en modo de solo lectura. Lo que tuve que hacer para obtener una carpeta escribible:

sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/

Eso fue todo, funcionó sin más cambios. Tenga en cuenta que solo tengo permiso de escritura para el usuario , no para el grupo como muchas otras soluciones en línea. Pude crear / eliminar / editar / cambiar el nombre de archivos / carpetas sin problemas.

Al acceder usando sshfs con el usuario netdrive debido a la configuración de chroot, solo vería las cosas almacenadas dentro del directorio /home/netdrive/ del servidor, perfecto. La repetida estructura de directorios /home/netdrive/home/netdrive/ es lo que me ayudó a tener una solución limpia chroot ssh writeable .

Ahora voy a explicar a continuación los problemas que tuve:

Probablemente no deberías ejecutar los siguientes párrafos :

Después de ver las soluciones anteriores (y muchas otras en la red que incluso usaban acl (listas de control de acceso)) aún no podía ponerlo en funcionamiento porque lo que hice a continuación fue:

Lo siguiente NO me ha funcionado:

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

Debido a que el usuario netdrive aún no podía escribir en ese directorio /home/netdrive/writable/ a pesar de ser propietario de la carpeta y tener los permisos. Entonces lo hice:     sudo chmod 775 / home / netdrive / writeable / Y ahora podría crear un directorio y eliminarlo, pero no pude editarlo porque estaba siendo creado sin permisos de escritura grupales. Aquí, por lo que vi en la red, la gente usa acl para arreglarlo. Pero no estaba contento con eso ya que tenía que instalar acl , luego configurar puntos de montaje, etc. Tampoco tengo idea de por qué necesitaría group permiso para escribir en una carpeta propiedad de la mismo usuario.

Parece que por alguna razón, la creación de /home/netdrive/home/netdrive y la propiedad de la última carpeta netdrive pude hacer que todo funcione sin interferir con los permisos del grupo .

    
respondido por el mihai.ile 18.07.2015 - 19:58

Lea otras preguntas en las etiquetas