jueves, 11 de agosto de 2016

Enjaular en su home a usuarios en Linux

-rbash: cd: restringido


Que tal amigos, ¿A cuantos de ustedes les han pedido que den acceso a un usuario para que ejecute una o das tareas en un servidor Linux?.

Creo que a muchos y obviamente estamos conscientes del nivel de riesgo que representaría darles a esos usuarios accesos como root, sobre todo si esos usuarios tienen poco conocimiento de Linux.

En este post les indicaré un método que me ha funcionado bastante bien y no es para nada complicado. 

Vamos a suponer que ya existe un usuario de Linux con nombre operador y necesitamos que NO pueda salir de su home y que solo pueda listar los procesos que están en ejecución. 

Si se ha creado el usuario de la forma tradicional (useradd operador) el home del usuario debe de ser /home/operador y el shell de ejecución es el bash.

Muchas distribuciones Linux soportan usar diferentes shell's y cada uno puede usar el que mejor se adapte a sus necesidades, para poder conseguir que el usuario no pueda cambiarse de directorio vamos a utilizar el rbash que es un shell con funciones restringidas.  

Si quieren más información del rbash les sugiero hechar un vistazo al siguiente URL: https://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html
  
1.- Como root hay que "crear" el shell rbash:

#  cp /bin/bash /bin/rbash

2.- Modificar el usuario operador para que use el rbash:

# usermod -s /bin/rbash operador

Realizados estos dos pasos pueden probar "logeandose" con el usuario operador y podrán comprobar que pueden hacer poco o nada con ese usuario.

Pueden probar por ejemplo ejecutar el comando cd para irse a /opt y la salida del comando debe de ser algo como lo siguiente:

-rbash: cd: restringido

Una vez confirmado que no se puede cambiar de directorio debemos de permitirle que ejecute el comando ps para que pueda ver los procesos en ejecución, para eso debemos de hacer lo siguiente:
   
3.- Ingresar al home de usuario:   

# cd /home/operador

4.- Se debe crear un archivo de nombre .bash_profile:

# vi .bash_profile

Ojo que el nombre del archivo empieza con el punto (.)
 
5.- El contenido de ese archivo es:

# .bash_profile
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# Especificamos la variable de entorno PATH del usuario
PATH=$HOME/bin
export PATH

 
Este script lo que hace primero es verificar si existe el archivo .bashrc, si es verdadero lo ejecuta para entrar al modo interactivo.
Luego especifica la ruta del PATH (PATH=$HOME/bin) que para este caso le vamos a ubicar dentro de la carpeta bin.
Y por último exporta la variable para que esté disponible durante nuestra sesión.

6.- En el directorio $HOME/bin deben de estar los "ejecutables" de los comandos que son permitidos para el usuario, para nuestro ejemplo le debemos de dar acceso para que ejecute el comando ps.

# ln -s /bin/ps /home/operador/bin/

Si se "loguean" con el usuario operador y ejecutan el comando ps podrán notar que si lo permite, la salida del comando debe de ser algo como lo siguiente:

 PID TTY          TIME CMD
 5909 pts/0    00:00:00 rbash
 5966 pts/0    00:00:00 ps


7.- Por último, como usuario root le cambiamos los permisos al archivo para que no lo puedan modificar/borrar:

# chattr +i /home/operador/.bash_profile 

Nota: Si desean que el usuario pueda ejecutar más comandos solo tienen que repetir el paso 6 especificando que comando desean agregar.

Espero que les sea de utilidad.

Cualquier comentario lo hacen por esta vía o con un tweet a: @Danny_Obando

No se olviden de pasar por mi página en facebook y darle like. www.facebook.com/deoyecuador

¡ Hasta mi próximo post !