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

Una ventana de terminal en un sistema Linux.
Fatmawati Achmad Zaenuri / Shutterstock

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

Conchas restringidas

Un caparazón restringido no es un caparazón diferente. Es un modo diferente de un shell estándar . El  BashKornFish y otros proyectiles se pueden iniciar en el modo de proyectil 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 limite a los confines de su mundo restringido y que no tengan acceso a toda su computadora.

Sin embargo, tenga en cuenta que los proyectiles restringidos no son completamente a prueba de fugas. 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.

Golpe restringido

Cuando ejecuta Bash como un shell restringido, el usuario tiene algunas capacidades eliminadas. Específicamente, el usuario no puede :

  • Úselo cdpara cambiar el directorio de trabajo.
  • Cambiar los valores de la $PATH, $SHELL, $BASH_ENV, o $ENVvariables ambientales (pero pueden leer los valores actuales).
  • Leer o cambiar $SHELLOPTSlas opciones de entorno de shell.
  • Redirigir la salida de un comando.
  • Invoque comandos que requieran una ruta para localizarlos. Es decir, no puede emitir un comando que tenga una o más barras diagonales “ /”.
  • Invocar execpara sustituir el shell por un proceso diferente.
  • Utilice cualquiera de las funciones restringidas en un script.
Relacionado:  ¿Qué son los espacios de Twitter y en qué se diferencian de la casa club?

Puede invocar un shell Bash restringido mediante la -ropción (restringido). Está prohibido intentar realizar una tarea sencilla como cambiar el directorio de trabajo. Un mensaje conciso le dice que cdestá restringido.

bash -r
documentos en cd

El shell Bash también puede detectar cuándo se ha invocado usando «rbash» en lugar de «bash». Esto también hace que se inicie 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 whereiscomando en Ubuntu para buscar los rbasharchivos, veremos que el ejecutable está en el directorio «usr / bin». La página de manual está en el directorio “/ usr / share / man / man1”.

El uso del lscomando con la -lopción (larga) revela que en realidadrbash es un enlace simbólico a bash.

donde está rbash
ls -l / usr / bin / rbash

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

donde está rbash
sudo ln -s / bin / bash / bin / rbash
donde está rbash

La segunda vez que usamos el whereiscomando, se encuentra rbashen el directorio “/ usr / bin”.

Restricción de un usuario

Creemos una nueva cuenta de usuario llamada «Minnie». Configuraremos su shell para que sea el shell restringido usando la -sopción (shell) del useraddcomando. También configuraremos la contraseña de la cuenta  usando el passwd comando y crearemos una carpeta de inicio para ellos.

La -pbandera (padres) en el mkdircomando le dice mkdirque cree el directorio de destino y cualquier directorio principal 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 passwd minnie
sudo mkdir -p / inicio / minnie / bin

Cuando minnie inicie sesión, correrá en un caparazón restringido.

CD

No puede invocar comandos que deben incluir una barra diagonal » /«:

/ usr / bin / ping

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

silbido

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

Relacionado:  Cómo crear un borde personalizado en Microsoft Excel

Apretando las restricciones

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

Vamos a editar el archivo «.bash_profile» de minnie y establecer su ruta para que apunte solo a ese directorio. También restringiremos el archivo “.bash_profile” de minnie para que solo 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 chowncomando y cambiaremos los permisos del archivo usando el  chmod comando. Solo el usuario root podrá editar el archivo.

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

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

Nuestra Minnie usuario restringido sólo pueden utilizar Bash comandos integrados como echo, alias, y logout. ¡Ni siquiera puede usar ls!

ls

Tendremos que aflojar un poco nuestro dominio 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 / uptime / home / minnie / bin
sudo ln -s / bin / pinky / home / minnie / bin

La próxima vez que minnie inicie sesión, encontrará que puede usar los comandos integrados de Bash, además de los comandos a los que se han 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 -sopción (shell) del usermodcomando.

sudo usermod -s / bin / rbash mary

Puede usar el  lesscomando 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.

Relacionado:  Cómo cambiar el tamaño de la diapositiva en Google Slides

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

Restricción de secuencias de comandos

Un usuario normal y 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 «restricto.sh» y cierre el editor.

#! / bin / bash

# el script se inicia en el shell Bash normal
echo "## ¡En modo no restringido! ##"

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

# Configuración del modo restringido
set -r

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

eco
echo "Directorio actual:` pwd` "
echo "Cambiando directorio a / home /"
cd / hogar
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 $ HOME> mis_archivos.txt
cat my_files.txt
eco

salir 0

Necesitamos usar el chmodcomando con la +xbandera (ejecutar) para hacer que el script sea ejecutable.

chmod + x restricto.sh

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

./restricted.sh

La segunda parte del script, el bit que sigue a la línea «set -r», se ejecuta en un shell restringido.

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

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

! # / bin / bash -r

Recuerda a Houdini

Los proyectiles restringidos son útiles, pero no completamente infalibles. Un usuario suficientemente capacitado 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.