So verwenden Sie die eingeschränkte Shell, um die Möglichkeiten eines Linux-Benutzers einzuschränken

Veröffentlicht: 2022-01-29
Ein Terminalfenster auf einem Linux-System.
Fatmawati Achmad Zaenuri/Shutterstock

Eine eingeschränkte Shell schränkt die Möglichkeiten eines Benutzerkontos unter Linux ein. Ein eingeschränkter Benutzer kann sein Verzeichnis nicht ändern, und Sie steuern, auf welche Befehle er Zugriff hat. So richten Sie eine eingeschränkte Shell unter Linux ein.

Eingeschränkte Muscheln

Eine eingeschränkte Shell ist keine andere Shell. Es ist ein anderer Modus einer Standard-Shell. Bash, Korn, Fish und andere Shells können alle im eingeschränkten Shell-Modus gestartet werden. Wir werden in diesem Artikel Bash verwenden, aber die gleichen Prinzipien gelten für die anderen Shells.

Da eingeschränkte Shells nur eine andere Möglichkeit sind, Ihre Standard-Shell zu verwenden, sind sie einfach einzurichten. Es muss nichts installiert werden und sie sind überall dort verfügbar, wo Linux ist.

Eingeschränkte Shells können auch auf Skripte angewendet werden. Dadurch wird sichergestellt, dass jeder Schaden, den sie verursachen können, wenn sie falsch geschrieben wurden, auf die Grenzen ihrer eingeschränkten Welt beschränkt ist und dass sie keinen Zugriff auf Ihren gesamten Computer haben.

Beachten Sie jedoch, dass eingeschränkte Granaten nicht vollständig fluchtsicher sind. Jemand mit genügend Wissen kann einer eingeschränkten Hülle entkommen. Sie sind großartig, um einem gelegentlichen Benutzer sichere Grenzen zu setzen, aber verlassen Sie sich nicht auf eingeschränkte Shells für reale Sicherheit in einem Produktionssystem.

VERWANDT: Was ist der Unterschied zwischen Bash, Zsh und anderen Linux-Shells?

Eingeschränkte Bash

Wenn Sie Bash als eingeschränkte Shell ausführen, werden dem Benutzer einige Funktionen entzogen. Insbesondere darf der Benutzer nicht :

  • Verwenden Sie cd , um das Arbeitsverzeichnis zu ändern.
  • Ändern Sie die Werte der Umgebungsvariablen $PATH , $SHELL , $BASH_ENV oder $ENV (aber sie können die aktuellen Werte lesen).
  • Lesen oder ändern Sie die Shell-Umgebungsoptionen $SHELLOPTS .
  • Leiten Sie die Ausgabe eines Befehls um.
  • Rufen Sie Befehle auf, die einen Pfad erfordern, um sie zu finden. Das heißt, Sie können keinen Befehl ausgeben, der einen oder mehrere Schrägstriche „ / “ enthält.
  • Rufen exec auf, um die Shell durch einen anderen Prozess zu ersetzen.
  • Verwenden Sie eine der eingeschränkten Funktionen in einem Skript.
Anzeige

Sie können eine eingeschränkte Bash-Shell mit der Option -r (eingeschränkt) aufrufen. Der Versuch, eine einfache Aufgabe wie das Ändern des Arbeitsverzeichnisses auszuführen, ist verboten. Eine knappe Meldung teilt Ihnen mit, dass cd eingeschränkt ist.

 bash-r
 CD-Dokumente 

Die Bash-Shell kann auch erkennen, wenn sie aufgerufen wurde, indem sie „rbash“ anstelle von „bash“ verwendet. Dies bewirkt, dass es auch als eingeschränkte Shell gestartet wird. Dies bietet eine bequeme Möglichkeit, die Standard-Shell für einen bestimmten Benutzer festzulegen, die wir bald verwenden werden.

Wenn wir unter Ubuntu den Befehl whereis verwenden, um nach den rbash Dateien zu suchen, sehen wir, dass sich die ausführbare Datei im Verzeichnis „usr/bin“ befindet. Die Manpage befindet sich im Verzeichnis „/usr/share/man/man1“.

Die Verwendung des ls mit der Option -l (long) zeigt, dass rbash tatsächlich ein symbolischer Link zu bash ist.

 wo ist rbash
 ls -l /usr/bin/rbash 

Auf Manjaro und Fedora musste der symbolische Link rbash erstellt werden. Dies funktioniert auf beiden Distributionen:

 wo ist rbash
 sudo ln -s /bin/bash /bin/rbash
 wo ist rbash 

Anzeige

Das zweite Mal, wenn wir den whereis Befehl verwenden, findet er rbash im Verzeichnis „/usr/bin“.

Einschränken eines Benutzers

Lassen Sie uns ein neues Benutzerkonto mit dem Namen „Minnie“ erstellen. Wir werden ihre Shell mit der Option -s (shell) des Befehls useradd als eingeschränkte Shell festlegen. Wir werden auch das Passwort des Kontos mit dem Befehl passwd festlegen und einen Home-Ordner für sie erstellen.

Das Flag -p (parents) im Befehl mkdir weist mkdir an, das Zielverzeichnis und alle übergeordneten Verzeichnisse, die es ebenfalls erstellen muss, zu erstellen. Indem wir also das Verzeichnis „/home/minnie/bin“ erstellen, erstellen wir gleichzeitig das Verzeichnis „/home/minnie“.

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

Wenn sich Minnie anmeldet, wird sie in einer eingeschränkten Shell ausgeführt.

 CD 

Sie kann keine Befehle aufrufen, die einen Schrägstrich „ / “ enthalten müssen:

 /usr/bin/ping 

Sie kann jedoch weiterhin Befehle ausführen, die im Pfad gefunden werden.

 Klingeln 

Anzeige

Das ist nicht das Verhalten, das Sie vielleicht erwartet haben, und es ist sicherlich nicht das, was wir wollen. Um die Einschränkungen weiter zu verschärfen, müssen wir den Pfad ändern, den Minnies Shell verwendet, um nach Befehlen zu suchen.

Verschärfung der Beschränkungen

Als wir Minnies Home-Verzeichnis „/home/minnie“ erstellt haben, haben wir auch ein „/home/minnie/bin“-Verzeichnis erstellt. Hier kommt das Verzeichnis ins Spiel.

Wir werden Minnies „.bash_profile“-Datei bearbeiten und ihren Pfad so einstellen, dass er nur auf dieses Verzeichnis verweist. Wir werden auch Minnies „.bash_profile“-Datei einschränken, sodass nur root sie bearbeiten kann. Das bedeutet, dass kein anderer Benutzer diese Datei bearbeiten und ihren Pfad ändern kann.

 sudo gedit /home/minnie/.bash_profile 

Bearbeiten Sie entweder das vorhandene „PATH=“ oder fügen Sie die folgende Zeile hinzu:

 PATH=$HOME/bin 

Speicher die Datei. Wir ändern den Eigentümer der Datei mit dem Befehl chown auf root und ändern die Dateiberechtigungen mit dem Befehl chmod . Nur der Root-Benutzer kann die Datei bearbeiten.

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

Wenn sich Benutzerin Minnie das nächste Mal anmeldet, zeigt ihr Pfad auf einen einzelnen Ordner.

Anzeige

Unser eingeschränkter Benutzer minnie kann nur integrierte Bash-Befehle wie echo , alias und logout verwenden. Sie kann nicht einmal ls benutzen!

 ls 

Wir müssen unseren Würgegriff etwas lockern, wenn wir wollen, dass sie überhaupt etwas Nützliches tun können. Wir erstellen einige symbolische Links von Minnies „bin“-Verzeichnis zu den Befehlen, die Minnie verwenden können soll.

 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 

Wenn sich Minnie das nächste Mal anmeldet, wird sie feststellen, dass sie die in Bash integrierten Befehle sowie die verknüpften Befehle verwenden kann.

 ls
 Pinky Dave
 Betriebszeit 

Bestehende Benutzer einschränken

Wir haben Minnie als neuen Benutzer erstellt. Um die Shell eines bestehenden Benutzers zu ändern, können wir die Option -s (shell) des Befehls usermod .

 sudo usermod -s /bin/rbash mary 

Sie können den Befehl less in der Datei „/etc/passwd“ verwenden, um schnell zu sehen, welche Shell als Standard-Shell eines Benutzers festgelegt ist.

 weniger /etc/passwd 

Wir können sehen, dass die Benutzerin Mary die eingeschränkte Shell verwenden wird, wenn sie sich das nächste Mal anmeldet.

Anzeige

Denken Sie daran, die anderen Änderungen anzuwenden, um ihre $PATH Umgebungsvariable einzuschränken und die Befehle festzulegen, die der Benutzer mary ausführen können soll.

Einschränken von Skripten

Ein normaler, uneingeschränkter Benutzer kann Skripte starten, die in einer eingeschränkten Shell ausgeführt werden. Kopieren Sie die folgenden Zeilen und fügen Sie sie in einen Editor ein. Speichern Sie die Datei als „restricted.sh“ und schließen Sie den Editor.

 #!/bin/bash

# Das Skript startet in der normalen Bash-Shell
echo "## Im uneingeschränkten Modus! ##"

Echo
echo "Aktuelles Verzeichnis: `pwd`"
echo "Verzeichnis wechseln"
CD /usr/share
echo "Jetzt im Verzeichnis: `pwd`"
echo "Wechsel ins Home-Verzeichnis"
CD ~
echo "Jetzt im Verzeichnis: `pwd`"

# Einstellen des eingeschränkten Modus
setze -r

Echo
echo "## Im eingeschränkten Modus! ##"

Echo
echo "Aktuelles Verzeichnis: `pwd`"
echo "Ändere das Verzeichnis nach /home/"
cd /home
echo "Noch im Verzeichnis: `pwd`"

Echo
echo "Versuche, eine andere Shell zu starten"
/bin/bash

Echo
echo "Versuche, die Befehlsausgabe umzuleiten"
ls -l $HOME > meine_dateien.txt
cat meine_dateien.txt
Echo

Ausgang 0

Wir müssen den Befehl chmod mit dem Flag +x (Ausführen) verwenden, um das Skript ausführbar zu machen.

 chmod +x eingeschränkt.sh 

Der erste Teil des Skripts läuft in einer normalen Shell.

 ./eingeschränkt.sh 

Der zweite Teil des Skripts – das Bit nach der Zeile „set -r“ – wird in einer eingeschränkten Shell ausgeführt.

Keine der versuchten Aktionen ist im eingeschränkten Teil des Skripts erfolgreich.

Anzeige

Ein ganzes Skript kann dazu gebracht werden, in einer eingeschränkten Shell ausgeführt zu werden, indem man -r zur ersten Zeile hinzufügt:

 !#/bin/bash -r

Denken Sie an Houdini

Eingeschränkte Shells sind nützlich, aber nicht völlig unfehlbar. Ein ausreichend erfahrener Benutzer kann ihnen möglicherweise entkommen. Bei vernünftiger Verwendung sind sie jedoch eine nützliche Methode, um eine Reihe von Einschränkungen für ein bestimmtes Konto festzulegen.