Cómo usar Shell restringido para limitar lo que puede hacer un usuario de Linux

Publicado: 2022-01-29
Una ventana de terminal en un sistema Linux.
Fatmawati Achmad Zaenuri/Shutterstock

Un shell restringido limita lo que una cuenta de usuario puede hacer en Linux. Un usuario restringido no puede cambiar su directorio y usted controla a qué comandos tiene acceso. Aquí se explica cómo configurar un shell restringido en Linux.

Proyectiles restringidos

Un caparazón restringido no es un caparazón diferente. Es un modo diferente de un caparazón estándar. Los shells Bash, Korn, Fish y otros se pueden iniciar en modo de shell restringido. Usaremos Bash en este artículo, pero los mismos principios se aplican a los otros shells.

Debido a que los shells restringidos son solo otra forma de usar su shell estándar, son fáciles de configurar. No hay nada que instalar y están disponibles dondequiera que esté Linux.

Los shells restringidos también se pueden aplicar a los scripts. Eso asegura que cualquier daño que puedan causar si se han escrito incorrectamente se limita a los confines de su mundo restringido y que no tienen acceso a toda su computadora.

Sin embargo, tenga en cuenta que los proyectiles restringidos no son completamente a prueba de escape. Alguien con suficiente conocimiento puede escapar de un caparazón restringido. Son excelentes para poner límites seguros a un usuario ocasional, pero no confíe en shells restringidos para la seguridad del mundo real en un sistema de producción.

RELACIONADO: ¿Cuál es la diferencia entre Bash, Zsh y otros shells de Linux?

Fiesta restringida

Cuando ejecuta Bash como un shell restringido, se eliminan algunas capacidades del usuario. En concreto, el usuario no puede :

  • Use cd para cambiar el directorio de trabajo.
  • Cambie los valores de las variables ambientales $PATH , $SHELL , $BASH_ENV o $ENV (pero pueden leer los valores actuales).
  • Lea o cambie las opciones ambientales de shell $SHELLOPTS .
  • Redirigir la salida de un comando.
  • Invoca comandos que requieren una ruta para localizarlos. Es decir, no puede ejecutar un comando que tenga una o más barras diagonales " / ".
  • Invoque a exec para sustituir el shell por un proceso diferente.
  • Use cualquiera de las funciones restringidas en un script.
Anuncio publicitario

Puede invocar un shell Bash restringido mediante la opción -r (restringido). Está prohibido intentar hacer una tarea simple como cambiar el directorio de trabajo. Un mensaje conciso te dice que el cd está restringido.

 golpe -r
 Documentos de CD 

El shell Bash también puede detectar cuándo se ha invocado utilizando "rbash" en lugar de "bash". Esto hace que también comience como un shell restringido. Esto proporciona una forma conveniente de configurar el shell predeterminado para un usuario en particular, que usaremos pronto.

Si usamos el comando whereis en Ubuntu para buscar los archivos rbash , veremos que el ejecutable está en el directorio “usr/bin”. La página man está en el directorio “/usr/share/man/man1”.

El uso del comando ls con la opción -l (largo) revela que rbash es en realidad un enlace simbólico a bash .

 donde esta rbash
 ls -l /usr/bin/rbash 

En Manjaro y Fedora, se tuvo que crear el enlace simbólico rbash . Esto funciona en ambas distribuciones:

 donde esta rbash
 sudo ln -s /bin/bash /bin/rbash
 donde esta rbash 

Anuncio publicitario

La segunda vez que usamos el comando whereis , encuentra rbash en el directorio “/usr/bin”.

Restricción de un usuario

Vamos a crear una nueva cuenta de usuario llamada "Minnie". Configuraremos su shell para que sea el shell restringido usando la opción -s (shell) del comando useradd . También estableceremos la contraseña de la cuenta con el comando passwd y crearemos una carpeta de inicio para ellos.

El indicador -p (padres) en el comando mkdir le dice a mkdir que cree el directorio de destino y cualquier directorio padre que necesite crear también. Entonces, al crear el directorio “/home/minnie/bin”, creamos el directorio “/home/minnie” al mismo tiempo.

 sudo useradd minnie -s /bin/rbash
 sudo contraseña minnie
 sudo mkdir -p /home/minnie/bin 

Cuando minnie inicie sesión, se ejecutará en un shell restringido.

 CD 

No puede invocar comandos que deben incluir una barra inclinada " / ":

 /usr/bin/ping 

Sin embargo, aún puede ejecutar los comandos que se encuentran en la ruta.

 silbido 

Anuncio publicitario

Ese no es el comportamiento que podría haber esperado, y ciertamente no es lo que queremos. Para reforzar aún más las restricciones, necesitamos cambiar la ruta que usará el shell de minnie para buscar comandos.

Reforzando las Restricciones

Cuando creamos el directorio de inicio de minnie “/home/minnie”, también creamos un directorio “/home/minnie/bin”. Aquí es donde ese directorio entra en juego.

Vamos a editar el archivo “.bash_profile” de minnie y configurar su ruta para que apunte solo a ese directorio. También restringiremos el archivo “.bash_profile” de minnie para que solo el root pueda editarlo. Eso significa que ningún otro usuario puede editar ese archivo y cambiar su ruta.

 sudo gedit /home/minnie/.bash_profile 

Edite el “PATH=” existente o agregue la siguiente línea:

 RUTA=$INICIO/contenedor 

Guarda el archivo. Cambiaremos el propietario del archivo a root usando el comando chown y cambiaremos los permisos del archivo usando el comando chmod . Solo el usuario raíz podrá editar el archivo.

 sudo chown root:root /home/minnie/.bash_profile
 sudo chmod 755 /home/minnie/.bash_profile
 ls -l /inicio/minnie/.bash_perfil 

La próxima vez que el usuario minnie inicie sesión, su ruta apunta a una sola carpeta.

Anuncio publicitario

Nuestro usuario restringido minnie solo puede usar los comandos integrados de Bash como echo , alias y logout . ¡Ni siquiera puede usar ls !

 ls 

Tendremos que aflojar un poco nuestro dominio absoluto si queremos que puedan hacer algo útil. Crearemos algunos enlaces simbólicos desde el directorio "bin" de minnie a los comandos que queremos que minnie pueda usar.

 sudo ln -s /bin/ls /home/minnie/bin
 sudo ln -s /bin/top /home/minnie/bin
 sudo ln -s /bin/tiempo de actividad /home/minnie/bin
 sudo ln -s /bin/pinky /home/minnie/bin 

La próxima vez que minnie inicie sesión, descubrirá que puede usar los comandos integrados de Bash, además de los comandos a los que se ha vinculado.

 ls
 meñique dave
 tiempo de actividad 

Restricción de usuarios existentes

Creamos a minnie como un nuevo usuario. Para cambiar el shell de un usuario existente, podemos usar la opción -s (shell) del comando usermod .

 sudo usermod -s /bin/rbash maría 

Puede usar el comando less en el archivo “/etc/passwd” para ver rápidamente qué shell está configurado como shell predeterminado del usuario.

 menos /etc/passwd 

Podemos ver que el usuario mary usará el shell restringido la próxima vez que inicie sesión.

Anuncio publicitario

Recuerde aplicar los otros cambios para restringir su variable de entorno $PATH y establecer los comandos que desea que el usuario mary pueda ejecutar.

Restricción de guiones

Un usuario regular sin restricciones puede iniciar scripts que se ejecutan en un shell restringido. Copie las siguientes líneas y péguelas en un editor. Guarde el archivo como "restricted.sh" y cierre el editor.

 #!/bin/bash

# el script comienza en el shell Bash normal
echo "## ¡En modo sin restricciones! ##"

eco
echo "Directorio actual: `pwd`"
echo "Cambiando de directorio"
cd /usr/compartir
echo "Ahora en el directorio: `pwd`"
echo "Cambiando al directorio de inicio"
discos compactos ~
echo "Ahora en el directorio: `pwd`"

# Configuración del modo restringido
conjunto -r

eco
echo "## ¡En modo restringido! ##"

eco
echo "Directorio actual: `pwd`"
echo "Cambiando directorio a /home/"
cd /casa
echo "Todavía en el directorio: `pwd`"

eco
echo "Intentando iniciar otro shell"
/bin/bash

eco
echo "Intentando redirigir la salida del comando"
ls -l $INICIO > mis_archivos.txt
gato mis_archivos.txt
eco

salida 0

Necesitamos usar el comando chmod con el indicador +x (ejecutar) para hacer que el script sea ejecutable.

 chmod +x restringido.sh 

La primera parte del script se ejecuta en un shell normal.

 ./restringido.sh 

La segunda parte de la secuencia de comandos, el bit después de la línea "set -r", se ejecuta en un shell restringido.

Ninguna de las acciones intentadas tiene éxito en la parte restringida del script.

Anuncio publicitario

Se puede hacer que un script completo se ejecute en un shell restringido agregando -r a la primera línea:

 !#/bin/bash -r

Recuerda Houdini

Los proyectiles restringidos son útiles, pero no completamente infalibles. Un usuario suficientemente hábil puede escapar de ellos. Pero cuando se usan con prudencia, son una forma útil de establecer un conjunto de limitaciones para una cuenta en particular.