Realmente necesito ayuda, he estado intentando encarcelar a un usuario que usa ubuntu
.
Cosa a tener en cuenta:
james
es el usuariosshusers
es el grupo/home/james/upload/
es el directorio donde deseo bloquear al usuario
sshd_config:
AllowGroups sshusers
Match Group sshusers
ChrootDirectory /home/%u/upload/
ForceCommand internal-sftp
Isiguió una respuestaEn Askubuntu, aquí están mis comandos.
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
Problema:
me sale este error
Error: Network error: Software caused connection abort
Error: Could not connect to server
Investigué en los registros y encontré esto:
fatal: propiedad o modos incorrectos para el componente del directorio chroot "/home/james/upload/"
Pero si ejecuto los siguientes comandos
sudo chown root /home/james/upload
sudo chmod go-w /home/james/upload
Funciona perfecto, el usuario puede conectarse, la carpeta está bloqueadaPERO no puedo soltar archivosen el directorio
Status: Listing directory /
Status: Directory listing successful
Status: Starting upload of C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm
Command: put "C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm" "test"
Error: /test: open for write: permission denied
Error: File transfer failed
Por favor, aconseje, he buscado tanto en Google que ahora todos los enlaces son morados (visitado :P
)
Estoy usando el cliente filezilla para probar SFTP
.
Respuesta1
La ChrootDirectory
directiva espera que el directorio chroot sea propiedad de root
y nadie más pueda escribirlo. Vos tambienno puedoencarcelar a un usuario en un directorio y permitirle permiso para escribir en ese directorio. Puede:
Chroot a casa, subir aupload/
El primer conjunto de comandos que probó es correcto para esto:
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
Sin embargo, la opción sshd_config
sería:
Match Group sshusers
ChrootDirectory %h
ForceCommand internal-sftp
( %h
se reemplaza por el directorio de inicio del usuario que se autentica, equivalente a /home/%u
en la mayoría de los casos). Además, para limitar la visibilidad de las carpetas en /home/james
y restringir el permiso de escritura allí, use las opciones recursivas para chown
y chmod
en el primer comando para /home/james
y eliminar read
permisos. El conjunto modificado quedaría así:
sudo chown root /home/james -R
sudo chmod go-rwx /home/james -R # Disallow traversing any directory in home
sudo chmod go+x /home/james # Allow traversing this directory
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwx /home/james/upload
Ahora el usuario sólo debería poder acceder a /home/james/upload
, o /upload
.
Chroot para subir, subir aupload/some_directory
Más o menos lo mismo que el anterior, reemplazando /home/james/
con /home/james/upload
y /home/james/upload
con /home/james/upload/some_directory
. No hay ganancias particulares.
Cambie el directorio de inicio de james
a/upload
El comportamiento habitual de ChrootDirectory es: "Después del chroot, sshd(8) cambia el directorio de trabajo al directorio de inicio del usuario". Entonces cambiamos james
el directorio de inicio de:
usermod -d /upload user
Luego establezca el ChrootDirectory
en /home/%u
. Utilice las mismas restricciones en la primera opción.
Respuesta2
El mecanismo chroot sftp incorporado en OpenSSH requiere que el directorio chroot sea propiedad del root (y los usuarios no puedan escribirlo). Esto podría ser una molestia si el directorio es un recurso compartido SMB/CIFS, por ejemplo, donde tendría que realizar un montaje vinculado.
Una de las soluciones más flexibles sería utilizar MySecureShell (http://mysecureshell.readthedocs.io/en/latest/)
apt install mysecureshell
Funciona sin ninguna modificación en la configuración predeterminada de OpenSSH. Todo lo que necesita hacer es crear su shell de inicio de sesión de usuario SFTP en mysecureshell, y él se encargará de la ACL/chroot virtual por usted. Consulte la documentación para obtener más detalles.
Por ejemplo, una vez que haya instalado MySecureShell, puede agregar un usuario SFTP (restringido a su directorio de inicio) como se muestra a continuación:
sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01
De lo anterior, el usuario 'sftpuser01' será chroot virtual a '/home/sftpuser01' en la sesión SFTP.
También proporciona muchas opciones flexibles para controlar ACL, grupos, etc. configurando '/etc/ssh/sftp-config'. Por favor refiérase ahttp://mysecureshell.readthedocs.io/en/latest/configuration.htmlpara detalles.