Basado en Linux Debian 10

Encerrando usuarios con CHROOT en Linux

YouTube

Proyecto P4Resulta que necesito alojar a un cliente en un servidor con Linux Debian que no tiene panel de control. Este servidor se administra puramente desde el teclado por lo que siempre ha tenido un usuario normal y él super usuario ROOT.

Si para este cliente creo un usuario normal del sistema me encuentro con el problema de que el usuario puede ver que hay en el resto de los directorios del servidor. Aunque no pueda escribir nada ni borrar nada porque no tenga permisos, no me gusta la idea de que salga del directorio que yo le he puesto para que aloje su web.

Para que el usuario cuando se conecte al servidor vea solo su directorio y solo pueda trabajar dentro de el vamos a crear una jaula con Chroot y con ella haremos que se conecte por SFTP y no pueda salir de su directorio.

Si estas montando el proyecto P4 y tienes a un amigo al que te gustaría ofrecerle sitio en tu servidor para que aloje su web o algunos archivos puedes hacerlo de una forma segura continuando con este tutorial.

Para comenzar nos identificamos como super usuario root con …

su

Usuarios y grupos en SFTP

Ya que me pongo y sé que acabaremos alojando otros clientes en este servidor voy a crear un grupo al que pueda ir agregando usuarios en un futuro de la siguiente forma …

groupadd usuarios_sftp

Para comenzar crearemos el usuario llamado cliente

useradd -m -G usuarios_sftp cliente

Ahora vamos a darle una contraseña al usuario cliente con …

echo "cliente:contraseña" | chpasswd

Lanzamos el comando usermod para hacer del grupo usuarios_sftp el primero para el usuario cliente …

usermod -G usuarios_sftp cliente

Seguidamente le damos permisos …

chown root /home/cliente

Ahora creamos un directorio donde el usuario podrá alojar su web cuando se conecte por SFTP …

mkdir /home/cliente/web

Le damos permisos …

chown cliente /home/cliente/web

Ahora para finalizar tenemos que ir al fichero de configuración de SSH y crearemos las reglas para nuestra jaula Chroot, lo editamos …

vi /etc/ssh/sshd_config

Ahora vamos al final del fichero y localizamos esta línea …

Subsystem

Ahora vamos a comentarla y agregar lo siguiente …

Subsystem       sftp    internal-sftp

Match Group usuarios_sftp

X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h
ForceCommand internal-sftp

Antes de guardar el fichero hay que tener en cuenta que si tenemos activada la opción DebianBanner no la cual activamos en el artículo Seguridad por oscuridad para Apache y SSH os dará error por lo que si la tenéis tendréis que comentar la linea.

Una vez hecho esto guardamos el fichero y salimos del editor pulsando la tecla ESC y :wq!

Ahora vamos a reiniciar el servicio de SSH con …

systemctl restart sshd

Ahora si nos conectamos con FileZilla por ejemplo tendríamos que conectarnos por SFTP al puerto 22

filezilla

Cómo podemos ver tenemos acceso a la /home/usuario pero solo podremos escribir dentro del directorio web que es el que hemos configurado antes para que el cliente pueda alojar su web.

Aunque un usuario no tenga permisos para ejecutar, editar o borrar archivos no es aconsejable que pueda escalar por directorios del servidor, si puede leer ya puede hacer algo.

Y hasta aquí el tutorial Encerrando usuarios con CHROOT en Linux. Ahora cuando el usuario se conecte al servidor por SFTP podrá conectarse a su directorio y no podrá salir de él y tampoco podrá conectarse al servidor por SSH como lo haría ROOT o cualquier otro usuario del sistema.