Encerrando usuarios con CHROOT
Basado en Linux Debian 10
Resulta 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 …
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 …
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.