Agence web » Actualités du digital » Comment utiliser un shell restreint pour limiter ce qu’un utilisateur Linux peut faire

Comment utiliser un shell restreint pour limiter ce qu’un utilisateur Linux peut faire

Une fenêtre de terminal sur un système Linux.
Fatmawati Achmad Zaenuri / Shutterstock

Un shell restreint limite ce qu’un compte utilisateur peut faire sous Linux. Un utilisateur restreint ne peut pas modifier son répertoire et vous contrôlez les commandes auxquelles il a accès. Voici comment configurer un shell restreint sous Linux.

Coquilles restreintes

Un shell restreint n’est pas un shell différent. C’est un mode différent d’un shell standard. Les Bash, Korn, Fish et autres shells peuvent tous être démarrés en mode shell restreint. Nous utiliserons Bash dans cet article, mais les mêmes principes s’appliquent aux autres shells.

Parce que les shells restreints ne sont qu’une autre façon d’utiliser votre shell standard, ils sont faciles à configurer. Il n’y a rien à installer et ils sont disponibles partout où se trouve Linux.

Les shells restreints peuvent également être appliqués aux scripts. Cela garantit que tout dommage qu’ils pourraient causer s’ils ont été écrits de manière incorrecte est limité aux limites de leur monde restreint et qu’ils n’ont pas accès à l’ensemble de votre ordinateur.

Sachez cependant que les obus restreints ne sont pas totalement résistants à la fuite. Quelqu’un avec suffisamment de connaissances peut échapper à un shell restreint. Ils sont parfaits pour fixer des limites sûres à un utilisateur occasionnel, mais ne comptez pas sur des shells restreints pour une sécurité réelle sur un système de production.

Bash restreint

Lorsque vous exécutez Bash en tant que shell restreint, certaines fonctionnalités lui sont supprimées. Plus précisément, l’utilisateur ne peux pas:

  • Utilisation cd pour changer le répertoire de travail.
  • Modifiez les valeurs de $PATH , $SHELL , $BASH_ENV , ou $ENV variables d’environnement (mais ils peuvent lire les valeurs actuelles).
  • Lire ou modifier $SHELLOPTS les options environnementales de la coque.
  • Redirige la sortie d’une commande.
  • Appelez les commandes qui nécessitent un chemin pour les localiser. Autrement dit, vous ne pouvez pas émettre une commande comportant une ou plusieurs barres obliques « /»Dedans.
  • Invoquer exec pour remplacer la coque par un processus différent.
  • Utilisez l’une des fonctionnalités restreintes d’un script.

Vous pouvez invoquer un shell Bash restreint en utilisant le -r Option (restreinte). Tenter de faire une tâche simple comme changer le répertoire de travail est interdit. Un message laconique vous dit que cd est restreint.

bash -r
cd Documents

Le shell Bash peut également détecter quand il a été appelé en utilisant «rbash» au lieu de «bash». Cela le fait également démarrer comme un shell restreint. Cela fournit un moyen pratique de définir le shell par défaut pour un utilisateur particulier, que nous utiliserons bientôt.

Si nous utilisons le whereis commande sur Ubuntu pour rechercher le rbash fichiers, nous verrons que l’exécutable se trouve dans le répertoire «usr / bin». La page de manuel se trouve dans le répertoire «/ usr / share / man / man1».

En utilisant le ls commande avec la -l (longue) option révèle que rbash est en fait un lien symbolique vers bash .

whereis rbash
ls -l /usr/bin/rbash

Sur Manjaro et Fedora, le rbash un lien symbolique a dû être créé. Cela fonctionne sur les deux distributions:

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

La deuxième fois que nous utilisons le whereis commande, il trouve rbash dans le répertoire «/ usr / bin».

Restreindre un utilisateur

Créons un nouveau compte utilisateur nommé «Minnie». Nous définirons leur shell comme étant le shell restreint en utilisant le -s (shell) de l’option useradd commander. Nous définirons également le mot de passe du compte à l’aide dupasswd commande, et nous créerons un dossier de départ pour eux.

Le -p (parents) dans le mkdir la commande dit mkdir pour créer le répertoire cible et tous les répertoires parents qu’il doit également créer. Ainsi, en créant le répertoire «/ home / minnie / bin», nous créons le répertoire «/ home / minnie» en même temps.

sudo useradd minnie -s /bin/rbash
sudo passwd minnie
sudo mkdir -p /home/minnie/bin

Lorsque Minnie se connectera, elle fonctionnera dans un shell restreint.

cd

Elle ne peut pas appeler de commandes qui doivent inclure une barre oblique « /« :

/usr/bin/ping

Cependant, elle peut toujours exécuter les commandes qui se trouvent dans le chemin.

ping

Ce n’est pas le comportement auquel vous vous attendiez, et ce n’est certainement pas ce que nous voulons. Pour resserrer davantage les restrictions, nous devons changer le chemin que le shell de minnie utilisera pour rechercher des commandes.

Resserrer les restrictions

Lorsque nous avons créé le répertoire personnel de minnie «/ home / minnie», nous avons également créé un répertoire «/ home / minnie / bin». C’est là que ce répertoire entre en jeu.

Nous allons éditer le fichier «.bash_profile» de minnie et définir son chemin pour qu’il pointe vers ce répertoire uniquement. Nous allons également restreindre le fichier «.bash_profile» de minnie afin que seul root puisse le modifier. Cela signifie qu’aucun autre utilisateur ne peut éditer ce fichier et changer son chemin.

sudo gedit /home/minnie/.bash_profile

Modifiez le « PATH = » existant ou ajoutez la ligne suivante:

PATH=$HOME/bin

Enregistrez le fichier. Nous allons changer le propriétaire du fichier en root en utilisant le chown et modifiez les autorisations de fichier à l’aide de la chmod commander. Seul l’utilisateur root pourra modifier le fichier.

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

La prochaine fois que l’utilisateur minnie se connecte, son chemin pointe vers un seul dossier.

Notre utilisateur restreint minnie ne peut utiliser que les commandes intégrées de Bash telles que echo, alias, et logout. Elle ne peut même pas utiliser ls!

ls

Nous devrons relâcher un peu notre emprise si nous voulons qu’ils puissent faire quoi que ce soit d’utile. Nous allons créer des liens symboliques depuis le répertoire «bin» de minnie vers les commandes que nous voulons que minnie puisse utiliser.

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

Lors de la prochaine connexion de minnie, elle découvrira qu’elle peut utiliser les commandes intégrées de Bash, ainsi que les commandes qui ont été liées.

ls
pinky dave
uptime

Restriction des utilisateurs existants

Nous avons créé minnie en tant que nouvel utilisateur. Pour changer le shell d’un utilisateur existant, nous pouvons utiliser le -s (shell) de l’option usermod commander.

sudo usermod -s /bin/rbash mary

Vous pouvez utiliser le less dans le fichier «/ etc / passwd» pour voir rapidement quel shell est défini comme shell par défaut de l’utilisateur.

less /etc/passwd

Nous pouvons voir que l’utilisateur Mary utilisera le shell restreint lors de sa prochaine connexion.

N’oubliez pas d’appliquer les autres modifications pour restreindre leur $PATH variable d’environnement et pour définir les commandes que vous souhaitez que l’utilisateur mary puisse exécuter.

Restriction des scripts

Un utilisateur régulier et sans restriction peut lancer des scripts qui sont exécutés dans un shell restreint. Copiez les lignes suivantes et collez-les dans un éditeur. Enregistrez le fichier sous «restricted.sh» et fermez l’éditeur.

#!/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

Nous devons utiliser le chmod commande avec la +x (exécuter) pour rendre le script exécutable.

chmod +x restricted.sh

La première partie du script s’exécute dans un shell normal.

./restricted.sh

La deuxième partie du script – le bit après la ligne «set -r» – s’exécute dans un shell restreint.

Aucune des actions tentées ne réussit dans la partie restreinte du script.

Un script entier peut être exécuté pour s’exécuter dans un shell restreint en ajoutant -r à la première ligne:

!#/bin/bash -r

Souviens-toi de Houdini

Les coquilles restreintes sont utiles, mais pas complètement infaillibles. Un utilisateur suffisamment expérimenté pourra leur échapper. Mais lorsqu’ils sont utilisés judicieusement, ils constituent un moyen utile d’établir un ensemble de limitations pour un compte particulier.

★★★★★