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