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);