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

Publié: 2022-01-29
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 shells Bash, Korn, Fish et autres 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 complètement à l'épreuve des évasions. Quelqu'un avec suffisamment de connaissances peut échapper à une coquille restreinte. Ils sont parfaits pour mettre des limites de sécurité sur un utilisateur occasionnel, mais ne vous fiez pas à des shells restreints pour toute sécurité réelle sur un système de production.

CONNEXION : Quelle est la différence entre Bash, Zsh et les autres shells Linux ?

Coup restreint

Lorsque vous exécutez Bash en tant que shell restreint, l'utilisateur se voit retirer certaines fonctionnalités. Concrètement, l'utilisateur ne peut pas :

  • Utilisez cd pour changer le répertoire de travail.
  • Modifiez les valeurs des variables d'environnement $PATH , $SHELL , $BASH_ENV ou $ENV (mais elles peuvent lire les valeurs actuelles).
  • Lire ou modifier les options environnementales du shell $SHELLOPTS .
  • Rediriger la sortie d'une commande.
  • Appelez des commandes qui nécessitent un chemin pour les localiser. Autrement dit, vous ne pouvez pas exécuter une commande contenant une ou plusieurs barres obliques " / ".
  • Appelez exec pour substituer un processus différent au shell.
  • Utilisez l'une des fonctionnalités restreintes d'un script.
Publicité

Vous pouvez invoquer un shell Bash restreint en utilisant l'option -r (restreint). Essayer de faire une tâche simple comme changer le répertoire de travail est interdit. Un message laconique vous indique que cd est restreint.

 bash-r
 cd Documents 

Le shell Bash peut également détecter quand il a été invoqué en utilisant « rbash » au lieu de « bash ». Cela le fait également démarrer en tant que 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 la commande whereis sur Ubuntu pour rechercher les fichiers rbash , 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 ».

L'utilisation de la commande ls avec l'option -l (long) révèle que rbash est en fait un lien symbolique vers bash .

 où est rbash
 ls -l /usr/bin/rbash 

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

 où est rbash
 sudo ln -s /bin/bash /bin/rbash
 où est rbash 

Publicité

La deuxième fois que nous utilisons la commande whereis , elle 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 à l'aide de l'option -s (shell) de la commande useradd . Nous définirons également le mot de passe du compte à l'aide de la commande passwd et nous créerons un dossier personnel pour eux.

L'indicateur -p (parents) dans la commande mkdir indique à mkdir de créer également le répertoire cible et tous les répertoires parents qu'il doit créer. Donc en créant le répertoire « /home/minnie/bin », on crée en même temps le répertoire « /home/minnie ».

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

Lorsque minnie se connecte, elle s'exécute dans un shell restreint.

 CD 

Elle ne peut pas invoquer des commandes qui doivent inclure une barre oblique " / " :

 /usr/bin/ping 

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

 ping 

Publicité

Ce n'est pas le comportement auquel vous auriez pu vous attendre, et ce n'est certainement pas ce que nous voulons. Pour resserrer davantage les restrictions, nous devons modifier le chemin que le shell de Minnie utilisera pour rechercher des commandes.

Resserrement des 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 modifier le fichier ".bash_profile" de minnie et définir son chemin pour qu'il pointe uniquement vers ce répertoire. Nous limiterons également le fichier ".bash_profile" de minnie afin que seul root puisse le modifier. Cela signifie qu'aucun autre utilisateur ne peut modifier ce fichier et changer son chemin.

 sudo gedit /home/minnie/.bash_profile 

Modifiez le "PATH=" existant ou ajoutez la ligne suivante :

 CHEMIN=$HOME/bin 

Enregistrez le fichier. Nous allons changer le propriétaire du fichier en root à l'aide de la commande chown et modifier les autorisations du fichier à l'aide de la commande chmod . 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.

Publicité

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

 ls 

Nous devrons desserrer 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 auxquelles elle a été liée.

 ls
 petit dave
 disponibilité 

Restreindre les utilisateurs existants

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

 sudo usermod -s /bin/rbash marie 

Vous pouvez utiliser la commande less sur le fichier "/etc/passwd" pour voir rapidement quel shell est défini comme shell par défaut d'un utilisateur.

 moins /etc/passwd 

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

Publicité

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

Restreindre les scripts

Un utilisateur régulier et non restreint 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

# le script démarre dans le shell Bash normal
echo "## En mode non restreint ! ##"

écho
echo "Répertoire actuel : `pwd`"
echo "Changement de répertoire"
cd /usr/partage
echo "Maintenant dans le répertoire : `pwd`"
echo "Changement de répertoire personnel"
cd ~
echo "Maintenant dans le répertoire : `pwd`"

# Réglage du mode restreint
ensemble -r

écho
echo "## En mode restreint ! ##"

écho
echo "Répertoire actuel : `pwd`"
echo "Changement de répertoire vers /home/"
cd /maison
echo "Toujours dans le répertoire : `pwd`"

écho
echo "Essayer de démarrer un autre shell"
/bin/bash

écho
echo "Essayer de rediriger la sortie de la commande"
ls -l $HOME > mes_fichiers.txt
chat mes_fichiers.txt
écho

sortie 0

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

 chmod +x restreint.sh 

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

 ./restreint.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.

Publicité

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

 !#/bin/bash-r

Rappelez-vous Houdini

Les coquilles restreintes sont utiles, mais pas totalement infaillibles. Un utilisateur suffisamment averti peut être en mesure d'y échapper. Mais lorsqu'ils sont utilisés judicieusement, ils constituent un moyen utile d'établir un ensemble de limitations pour un compte particulier.