En este momento estás viendo Como restringir la shell de usuario con rbash

Como restringir la shell de usuario con rbash

Como restringir la shell de usuario con rbash

En este artículo vamos a ver como restringir la shell de usuario con una utilidad llamada «rbash». La shell de linux es una poderosísima herramienta que nos permite tener el control del sistema con mucha precisión y granularidad.

Sumario

  • Consideraciones previas
  • Qué es «rbash»
  • Restricciones implementadas
  • Uso de «rbash»
  • Restringir la shell de un usuario con un script
  • Permitir el acceso de un usuario restringido a algunos comandos

Consideraciones previas

En todos los sistemas derivados de UNIX, como Linux, cuando se crea un nuevo usuario se le asigna un shell predeterminado, normalmente «/bin/bash». Esto puede plantear un problema, ya que un usuario con suficientes conocimientos, puede acceder a directorios de otros usuarios, a los que no debería tener acceso, y moverse libremente por ellos, incluso ejecutar alguna acción dañina para otros usuarios.

Además, un usuario con pocos conocimientos, sin ninguna restricción, podría ejecutar alguna acción, sin ser consciente de sus consecuencias, que pudiera llevar al sistema a un desastre.

Qué es rbash

«Rbash», también conocido como «restricted shell», es una herramienta perfecta para evitar que se produzcan situaciones como las que hemos descrito. Con ella podemos implementar restricciones a las operaciones de un usuario, o varios, para evitar que usen determinados comandos, e incluso que ejecuten algún script potencialmente dañino.

Será especialmente útil cuando administras un servidor al que se conectan usuarios por SSH, evitando que estos puedan acceder a directorios a los que no deberían tener acceso.

Restricciones implementadas

Con un modo restringido podemos configurar un entorno mucho más controlado que el predeterminado. Nos proporciona una capa adicional de seguridad para el sistema, ya que su comportamiento y forma de operar es idéntico a «bash», pero con la excepción de lo que no está permitido. Veamos algunas de estas restricciones.

  • 1.- Cambiar de directorios con el comando «cd».
  • 2.- No se permite modificar los valores de «SHELL», «PATH», «ENV» o «BASH_ENV».
  • 3.- Ejecución de comandos que contengan barras «/», como caracter o argumento.
  • 4.- Ficheros que contengan una barra «/» como argumento para la opción «-p» del propio hash.
  • 5.- Ficheros que contenga una barra inclinada «/» como argumento para el comando «history».
  • 6.- Importar definiciones de funciones desde el entorno de inicio del shell.
  • 7.- Analizar el valor de «SHELLOPTS» desde el entorno de inicio shell.
  • 8.- Redirigir la salida estandar usando los operadores de redirección como «>», «>|», «>>», «<>», «>&» y «&>».
  • 9.- Usar «exec» para reemplazar la shell con otro comando.
  • 10.-Agregar o eliminar comandos integrados con las opciones «-f» y «-d», del comando «enable».
  • 11.-Usar el comando «enable builtin» para habilitar funciones shell, que están deshabilitadas.
  • 12.-Desactivar cualquier modo de salir del modo restringido.
  • 13.-Desactivar el modo restringido con «set +r» o «shopt -u shell_restringido».

Estas restricciones se aplican después de leer los ficheros de inicio, por lo que no afecta al arranque del sistema.

Uso de «rbash»

Para hacer las pruebas, creamos un usuario al que restringiremos el shell con «rbash».

sudo useradd -u 3005 -d /home/weblinus/ -m -g 1000 -s /bin/bash -c "Weblinus.com" weblinus

Tienes información sobre como crear usuarios en «administracion de usuarios y grupos en gnu linux»

De todas formas explico las opciones

  • -u : permite especificar el UID.
  • -d : permite especificar el directorio de trabajo, creará automáticamente el directorio señalado.
  • -m : para que cree el directorio /home del usuario
  • -g : Para añadir el usuario a un grupo concreto
  • -s : permite establecer el Shell.
  • -c : añade los valores a la sección de comentarios que suele ser el nombre completo del usuario.

Comprobamos que existe el usuario

grep weblinus /etc/passwd
Creamos un nuevo usuario y lo comprobamos
Creamos un nuevo usuario y lo comprobamos

Y ya nos podemos «logear» con el nuevo usuario

Cambiamos de usuario
Cambiamos de usuario

Si ejecutamos el modo simple «rbash», o «bash» con la opción «-r», la shell del usuario actual se restringe automáticamente. Volverá a su estado normal al reiniciar el entorno. Vemos un ejemplo.

~$ cd Descargas
~/Descargas$
~/Descargas$ rbash 
~/Descargas$ cd
rbash: cd: restringido 
~/Descargas$
~/Descargas$ pwd > fichero.txt
bash: fichero.txt: restricted: cannot redirect output
~/Descargas$
Restricción de la shell con rbash
Restricción de la shell con rbash

Pero si sabe un poco, podrá ejecutar el comando «bash» y quitará las restricciones. Para evitarlo luego explicamos como hacerlo con el fichero «.bash_profile».

Restringir la shell de un usuario con un script

También podemos restringir bash a un solo usuario modificando su entorno de inicio con un script que ubicaremos en el fichero «.bash_profile» en su home. Para ello creamos este fichero en la «home» del usuario que queremos restringir. Este método afectará a todas las acciones que hemos descrito arriba.

cd /home/usuario
sudo nano .bash_profile

Copia y pega el siguiente código.

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
bash -r
Script en .bash_profile
Script en .bash_profile

Guardamos el fichero y cerramos el editor. Al reiniciar el entorno de inicio del usuario en particular comprobamos que funciona correctamente.

cd /etc/
pwd >> fichero.txt
cd /home/javier
Usuario con restricciones aplicadas
Usuario con restricciones aplicadas

Como hemos creado el fichero «.bash_profile» con sudo, pertenece a root y el usuario no podrá modificarlo.

El fichero pertenece a root
El fichero pertenece a root

Permitir el acceso de un usuario restringido a algunos comandos

Para permitir algunos comandos al usuario restringido procedemos como sigue

El primer paso es crear un enlace simbólico para «rbash». De la siguiente manera:

sudo cd /bin
sudo ln -s bash rbash

En mi caso este enlace ya existía por unas pruebas previas.

Creamos el directorio que contendrá los comandos permitidos

sudo mkdir /home/weblinus/bin

Y a continuación creamos unos enlaces simbólicos, de los binarios permitidos, que apunten a este directorio recién creado

sudo ln -s /bin/ls /home/weblinus/bin/ls
sudo ln -s /bin/mkdir /home/weblinus/bin/mkdir
sudo ln -s /bin/touch /home/weblinus/bin/touch
sudo ln -s /bin/pwd /home/weblinus/bin/pwd
Comandos permitidos
Comandos permitidos

De esta manera el usuario solo podrá utilizar los comandos «ls», «mkdir», «touch» y «pwd».

Con estos pasos conseguimos que, cuando el usuario inicie sesión, por defecto tendrá la shell restringida con «rbash», leyendo el fichero de variables de entorno «.bash_profile», con el PATH en «$HOME/bin» y solo podrá ejecutar los comandos indicados con los enlaces simbólicos.

Comprobación comandos permitidos
Comprobación comandos permitidos

Otra opción, que afecte a todos los usuarios, es modificar la shell predeterminada.

chsh -s /bin/rbash

Y también lo podemos implementar por usuario.

chsh -s /bin/rbash usuario

Lo más lógico sería aplicar las mismas restricciones a todos los usuarios del sistema. Root nunca se verá afectado por estas restricciones. No obstante, como hemos visto, lo más fácil y lo recomendable, es crear un enlace simbólico en «/bin» de «bash» a «rbash». De esta forma ningún usuario tendrá más permisos que los que necesita para su trabajo.

Además, en alguna versión de GNU/Linux como «Red Hat» o «CentOS», «rbash» no puede implementarse directamente y necesita hacerse con la creación de enlaces simbólicos.

En la mayoría de las distribuciones estándar GNU/Linux modernas, «rbash» está disponible de forma predeterminada. Si no es así, puedes descargar el fichero con el código fuente e instalarlo en tu sistema.

La forma de trabajar de esta shell restringida es muy parecida a la forma en como se tratan los usuarios en las jaulas chroot.

Puedes consultar toda la información en el manual integrado de la herramienta

man rbash
Manual de rbash
Manual de rbash

Como ves se trata de una herramienta muy útil que te permitirá establecer que los usuarios trabajen dentro de un entorno restringido, aumentando la seguridad del sistema.

Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.

Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.

Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.