Skip to content

Instantly share code, notes, and snippets.

@SrShark
Last active March 15, 2021 15:25
Show Gist options
  • Save SrShark/89ee19d85d0483b8ad93970c0aec55e9 to your computer and use it in GitHub Desktop.
Save SrShark/89ee19d85d0483b8ad93970c0aec55e9 to your computer and use it in GitHub Desktop.

Cómo configurar un acceso restringido (chroot) para un usuario SFTP

Crear usuario

El primer paso consiste en crear el usuario negando el acceso a una shell (/usr/sbin/nologin) y sin crear un directorio $HOME (opción -M)

useradd -M -s /usr/sbin/nologin 'usuario'

Notar que la nueva entrada en el archivo /etc/passwd indica que el $HOME del usuario es /home/usuario, si embargo éste no ha sido creado.

grep "usuario:" /etc/passwd

usuario:x:1001:1001::/home/usuario:/usr/sbin/nologin

A continuación, hay que generar las ssh keys para autenticar al usuario:

https://www.linuxito.com/gnu-linux/nivel-alto/459-como-autenticar-con-clave-publica-en-ssh

# generar claves
ssh-keygen -b 4096

En nuestro caso ya tenemos generadas las claves, debemos copiar la carpeta .ssh y pegarla en el home del nuevo usuario.

De acuerdo al manual del servidor SSH man sshd_config, cuando se implementa un chroot, todos los componentes de la ruta deben ser propiedad de root y no deben tener permisos de escritura para otros usuarios o grupos.

Por ello, el siguiente paso consiste en ajustar los permisos de todos los directorios en la ruta.

Asegurarse que todas las carpetas incluida la carpeta a asignarle el home al nuevo usuario sean propiedad del root y con permisos 755.

chown root:root /var/www/html/'root-usuario'
chmod 755 /var/www/html/'root-usuario'

ls -l /var/www/html/
drwxr-xr-x 6 root root 4096 Nov 25 22:26 'root-usuario'

Verificamos el actual home del usuario y procedemos a cambiarlo por el nuevo.

grep "usuario:" /etc/passwd

usuario:x:1001:1001::/home/usuario:/usr/sbin/nologin

Cambiar el home del usuario:

usermod -d /var/www/html/'root-usuario' 'usuario'

Acontinuación debemos cambiar los permisos de todos los archivos y carpetas contenidos dentro para que sean propiedad del usuario.

chown -R 'usuario':'usuario' /var/www/html/'root-usuario'/*
chmod -R 755 /var/www/html/'root-usuario'/*

Si dentro del 'root-usuario' existe la carpeta .ssh/ debemos asignarle como propietario el usuario y cambiarle los permisos.

chown -R 'usuario':'usuario' /var/www/html/'root-usuario'/.ssh/
chmod -R 700 /var/www/html/'root-usuario'/.ssh/

Finalmente resta configurar el servidor SSH para implementar el chroot, sólo para el usuario:

vim /etc/ssh/sshd_config

Al final del archivo agregar:

Match User 'usuario'
        ChrootDirectory /var/www/html/'root-usuario'/
        PubkeyAuthentication yes
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp

Reiniciar el servicio SSH:

systemctl restart ssh

fuente: https://www.linuxito.com/gnu-linux/nivel-medio/661-como-configurar-un-acceso-restringido-chroot-para-un-usuario-sftp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment