Quiero dar acceso a un cliente a mi servidor, pero quiero limitar esos usuarios a sus directorios personales. Enlazaré y montaré en cualquier archivo que quiera que puedan ver.
Creé un usuario llamado bob
y lo agregué a un nuevo grupo llamado sftponly
. Tienen un directorio de inicio en /home/bob
. He cambiado su shell /bin/false
para detener los inicios de sesión SSH. Aquí está su /etc/passwd
línea:
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 bob@server
bob@server's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
Si comento la ChrootDirectory
línea, puedo ingresar SFTP pero luego tienen rienda suelta sobre el servidor. He encontrado que ChrootDirectory /home
funciona, pero todavía les da acceso a cualquier directorio de inicio. Lo he intentado explícitamente ChrootDirectory /home/bob
pero eso tampoco funciona.
¿Qué estoy haciendo mal? ¿Cómo puedo limitarme bob
a /home/bob/
?
----EDITAR-----
De acuerdo, así que solo miré /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 completamente seguro de lo que está sucediendo allí, pero sugiere que algo está mal con el directorio de usuarios. Aquí está la ls -h /home
salida:
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
ChrootDirectory /home/%u
puede ser reemplazadoChrootDirectory %h
.Respuestas:
Todo este dolor es gracias a varios problemas de seguridad como se describe aquí . Básicamente, el directorio chroot debe ser propiedad de
root
y no puede ser ningún acceso de escritura grupal. Encantador. Por lo tanto, esencialmente necesita convertir su chroot en una celda de retención y dentro de eso puede tener su contenido editable.Y bam, puedes iniciar sesión y escribir
/writable
.fuente
root
. En este ejemplo,/home
también debe ser propiedad de root.Subsystem sftp /usr/lib/openssh/sftp-server
línea aSubsystem sftp internal-sftp -f AUTH -l VERBOSE
antes de que esto funcionara.Para chroot un directorio SFTP, debe
Crea un usuario y obliga a root a ser dueño de él
Cambie la ubicación del subsistema en / etc / ssh / sshd_config:
y cree una sección de usuario al final del archivo (ssh puede morir reapareciendo si se coloca después de la línea del Subsistema):
fuente
john
está bloqueado en el/home/john
directorio. Usted ha otorgado755
permisos al directorio. entonces el propietario ha leído (4), escribe (2) y ejecuta (1), y el grupo ha leído (4) y ejecutar (1). también ha configurado el propietario y el grupo comoroot
, por lo quejohn
pertenece a otro. él también ha leído y ejecutado (4 + 1 = 5) entonces. entonces has encerrado a John en un directorio donde no tiene privilegios de escritura. ¿Cómo arreglar esto? cambiar privilegios757
o incluso777
rompe el inicio de sesión. Cambiar el grupo o el propietario a John también interrumpe el inicio de sesión./home/userx/sftproot/uploads
y sftpuser en / home / sftpuse. He establecido que chroot/home/usex/sftproot
sea propiedad de root: root y chmod 755. El/home/usex/sftproot/uploads
sftpuser lo conoce: sftpuser. Me sale el mismo error que la pregunta inicial anterior. ¿El chroot y todas las carpetas principales deben ser propiedad de root: root para que sftp funcione?Pasé todo el día tratando de obtener una red compartida en mi frambuesa. Quería bloquear al usuario para que no pudiera navegar por todo el sistema de archivos, sin 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:
Luego editó
/etc/passwd
y se aseguró de que tiene/bin/false
para el usuario, por lo que la línea era:Edité
/etc/ssh/sshd_config
para incluir:Cambió el propietario del directorio de inicio y los permisos:
Ok, después de todo esto pude conectarme usando
sshfs
pero en modo de solo lectura. Lo que tuve que hacer para obtener una carpeta de escritura:Eso fue todo, funcionó sin más cambios. Tenga en cuenta que solo tengo permisos de escritura para el usuario , no para el grupo como muchas otras soluciones en línea. Pude crear / eliminar / editar / renombrar archivos / carpetas sin problemas.
Cuando accedo a usar
sshfs
con el usuario netdrive debido a la configuración de chroot, solo vería cosas almacenadas dentro del/home/netdrive/
directorio del servidor , perfecto. La/home/netdrive/home/netdrive/
estructura de directorio repetida es lo que hizo que funcionara para mí tener una solución de escritura ssh limpia de chroot .Ahora voy a explicar a continuación los problemas que tuve:
Probablemente no deberías ejecutar los siguientes párrafos :
Después de mirar las soluciones anteriores (y muchas otras en la red que incluso usaban acl (listas de control de acceso)) aún no podía hacerlo funcionar porque lo que hice a continuación fue:
Lo siguiente NO me funcionó:
Debido a que el usuario de netdrive aún no podía escribir en ese
/home/netdrive/writable/
directorio a pesar de poseer la carpeta y tener los permisos. Luego hice: sudo chmod 775 / home / netdrive / writable / Y ahora podí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 usaacl
para arreglarlo. Pero no estaba contento con eso, ya que tenía que instalaracl
, luego configurar los puntos de montaje, etc. Además, no tengo idea de por qué necesitaría permiso de grupo para escribir en una carpeta propiedad del mismo usuario.Parece que, por alguna razón, al crear
/home/netdrive/home/netdrive
y otorgar la propiedad a la últimanetdrive
carpeta pude hacer que todo funcionara sin alterar los permisos de grupo .fuente
Seguí este artículo pero no funcionó. Comenzó a funcionar después de que hice este cambio (sugerido en las respuestas anteriores):
Además, creó el directorio de inicio propietario de la raíz en el que tenía el subdirectorio de escritura del usuario (como se describió anteriormente).
Lo nuevo y útil que quiero agregar con esta respuesta es que puede simplificar la configuración simplemente especificando% h como directorio de inicio del usuario:
Lo he descubierto gracias a este enlace.
fuente