Comment utiliser un shell restreint pour limiter ce qu’un utilisateur Linux peut faire
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.
Sommaire
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.