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

Contenidos

Una ventana de terminal en un sistema Linux.

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 distinto. Es un modo distinto de un shell estándar. los Intento, Korn, Pez, y otros shells pueden iniciarse en modo de shell restringido. Usaremos Bash en este post, pero los mismos principios se aplican a los otros shells.

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

Los shells restringidos además 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.

A pesar de esto, tenga en cuenta que los proyectiles restringidos no son totalmente 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.

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

Golpe restringido

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

  • Utilizar cd para cambiar el directorio de trabajo.
  • Cambiar los valores del $PATH , $SHELL , $BASH_ENV , o $ENV variables ambientales (pero pueden leer los valores actuales).
  • Leer o cambiar $SHELLOPTS opciones ambientales de shell.
  • Redirigir la salida de un comando.
  • Invoque comandos que requieran una ruta para localizarlos. Dicho de otra forma, no puede emitir un comando que tenga una o más barras diagonales «/» en eso.
  • Invocar exec para sustituir la cáscara por un procedimiento distinto.
  • Utilice cualquiera de las funciones restringidas en un script.

Puede invocar un shell Bash restringido usando el -r opción (restringida). Está prohibido intentar realizar una tarea sencilla como cambiar el directorio de trabajo. Un mensaje lacónico te dice que cd está restringido.

bash -r
cd Documents

El shell Bash además puede detectar cuándo se ha invocado usando «rbash» en lugar de «bash». Esto además 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 whereis comando en Ubuntu para buscar el rbash archivos, veremos que el ejecutable está en el directorio «usr / bin». La página de manual está en el directorio “/ usr / share / man / man1”.

Usando el ls comando con el -l La opción (larga) revela que rbash es en realidad un link simbólico a bash .

whereis rbash
ls -l /usr/bin/rbash

En Manjaro y Fedora, el rbash Había que crear un vínculo simbólico. Esto funciona en ambas distribuciones:

whereis rbash
sudo ln -s /bin/bash /bin/rbash
whereis rbash

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

Restricción de un usuario

Creemos una nueva cuenta de usuario llamada «Minnie». Configuraremos su caparazón para que sea el caparazón restringido usando el -s (shell) opción de la useradd mando. Además configuraremos la contraseña de la cuenta usando elpasswd comando, y crearemos una carpeta de inicio para ellos.

los -p (padres) bandera en el mkdir el comando dice mkdir para crear el directorio de destino y cualquier directorio principal que necesite crear además. 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 /home/minnie/bin

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

cd

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

/usr/bin/ping

A pesar de esto, aún puede ejecutar comandos que se encuentran en la ruta.

ping

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.

Apretando las restricciones

Cuando creamos el directorio de inicio de minnie «/ home / minnie», además creamos un directorio «/ home / minnie / bin». Aquí es donde entra en juego ese directorio.

Vamos a editar el archivo «.bash_profile» de minnie y determinar su ruta para que apunte solo a ese directorio. Además 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 próxima línea:

PATH=$HOME/bin

Guarda el archivo. Bien cambiar el propietario del archivo rootear usando el chown comando y cambiar los permisos del archivo usando el chmod mando. 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.

Nuestro usuario restringido minnie solo puede utilizar comandos integrados de Bash como echo, alias, y logout. Ella ni siquiera puede utilizar ls!

ls

Tendremos que aflojar un poco nuestro dominio si queremos que puedan hacer algo útil. Crearemos algunos links simbólicos desde el directorio «bin» de minnie a los comandos que queremos que minnie pueda utilizar.

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 utilizar los comandos integrados de Bash, al mismo tiempo de los comandos a los que se han vinculado.

ls
pinky dave
uptime

Restricción de usuarios existentes

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

sudo usermod -s /bin/rbash mary

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

less /etc/passwd

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

Recuerde aplicar los otros cambios para restringir su $PATH variable de entorno y para 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

# script starts in normal Bash shell
echo "## In UNrestricted mode! ##"

echo
echo "Current directory: `pwd`"
echo "Changing directory"
cd /usr/share
echo "Now in directory: `pwd`"
echo "Changing to home directory"
cd ~
echo "Now in directory: `pwd`"

# Setting restricted mode
set -r

echo
echo "## In restricted mode! ##"

echo
echo "Current directory: `pwd`"
echo "Changing directory to /home/"
cd /home
echo "Still in directory: `pwd`"

echo
echo "Trying to start another shell"
/bin/bash

echo
echo "Trying to redirect command output"
ls -l $HOME > my_files.txt
cat my_files.txt
echo

exit 0

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

chmod +x restricted.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 -r a la primera línea:

!#/bin/bash -r

Recuerda a Houdini

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

setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.