Standardlösungen für sehr eingeschränkte Remote-Linux-Shells

Standardlösungen für sehr eingeschränkte Remote-Linux-Shells

Ich habe einen Benutzer, der eine Verbindung zu einem Remotecomputer herstellen M(über SSH) und einen festen Satz von Befehlen ausführen muss (sagen wir Ninsgesamt).

Diese Befehle basieren auf Python, entsprechenden Bibliotheken und privilegiertem Zugriff auf das Netzwerk (über den der Computer Mverfügt).

Gibt es Standardstrategien, um die Linux-Benutzer-Shell nur auf die Ausführung dieser NBefehle zu beschränken, ohne dass Folgendes möglich ist:

  • Weiterer Zugang zum fs
  • Lesen des Inhalts der Befehle selbst
  • privilegierten Zugriff auf das Netzwerk erhalten
  • und gleichermaßen

Mit anderen Worten: Was sind Standardstrategien, um dem Benutzer nach der Anmeldung eine eingeschränkte Konsole anzuzeigen, die beispielsweise nur Zahlen zwischen 1und Nals Eingabe zulässt?

Antwort1

Es gibt einen netten Trick in der Datei authorized_keys: Sie können die Befehlsoption verwenden, um einen Befehl zu definieren, der beim Anmelden ausgeführt werden soll und durch einen Schlüssel identifiziert wird. Wenn Ihre N Befehle also statisch sind, können Sie sie auf dem Server definieren und voilà. Dadurch wird das Netzwerk nicht eingeschränkt, sondern nur der Befehl gestartet. In der Datei authorized_keys sieht es ungefähr so ​​aus:

command = "date" ssh-rsa AAAA

Weitere Informationen hierzu finden SieLernprogramm

Um den Benutzer am Netzwerkzugriff zu hindern, können Sie SELinux oder eine ähnliche Software verwenden. Sie können auch einen eBPF-Hook schreiben, um genau das zuzulassen, was Sie möchten.

Antwort2

Nehmen wir an, dass es sich hierbei nicht um ein kleines Chroot oder einen Container handelt, der nur das enthält, was sie benötigen, sondern um ein allgemeines Mehrbenutzer-Betriebssystem.

Bei ausreichender Automatisierung ist eine Anmeldung beim Host möglicherweise nicht erforderlich. Stellen Sie diese eingeschränkten Optionen, die die Automatisierung übernimmt, möglicherweise über ein Selbstbedienungssystem bereit.

Damit sie die Arbeit auf dem Host erledigen können, versuchen Sie es mit etwas, das ich als gebundenes Textmenü bezeichnen würde. Das ist ein Skript, das Sie möglicherweise schreiben müssen.

Um die Person strikt von anderen Aktivitäten abzuhalten, sind verschiedene Tricks erforderlich.

  • Melden Sie sich als nicht privilegierter, idealerweise eindeutiger Benutzer an. Erhöhen Sie die Berechtigungen für privilegierte Dinge mit Tools wie doas oder sudo.
  • Dieses Menü muss mit OpenSSH- ForceCommandBlöcken ausgeführt werden.
  • Führen Sie es auch aus Shell-Profilen aus. exec, damit es den Shell-Prozess ersetzt und beim Beenden des Menüs auch die Sitzung beendet wird.
  • Trap-Signale im Menüskript.
  • Hüten Sie sich vor Programmen, die beliebige Befehle ausführen können. Das Ausgeben ist trivialin vim lautet der Befehl:shell
  • Schreiben und verwenden Sie Wrapper-Skripte für Menüelemente für komplexere Vorgänge oder mehr Kontrolle über die Ausgabe.

Wählen Sie eine Skriptsprache aus, in der Sie das Menü schreiben möchten. Erwägen Sie die Verwendung einer vorhandenen Textmenübibliothek. Eine Eingabeschleife an sich ist nicht schwierig, aber was Sie in der Produktion eigentlich wollen, ist, sie robust, leicht zu ändern und mit einer guten UX zu versehen.

verwandte Informationen