GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist es riskant, normalen Benutzern Sudo Vim Zugriff zu gewähren?

Ich möchte einen neuen Benutzer erstellen und ihm sudo-Zugriff gewähren. Genauer gesagt möchte ich, dass er sudo vim verwendet und bearbeiten Sie httpd.conf. Ich habe das in sudoers geschrieben:

user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Ich habe jedoch gehört, dass dies riskant sein könnte. Warum ist das problematisch? Wie ernst ist das Problem?

Akzeptierte Antwort:

Obwohl Sie die Befehlszeilenargumente einschränken, hindert nichts den Benutzer daran, vim zum Öffnen, Bearbeiten und Überschreiben beliebiger Dateien zu verwenden sobald es als root ausgeführt wird.

Der Benutzer kann sudo vim /etc/httpd/conf/httpd.conf ausführen und dann

  • den gesamten Text aus dem Bearbeitungspuffer löschen
  • dann der Einfachheit halber eine vorhandene Datei als Quelle verwenden (obwohl das nicht einmal erforderlich ist):zum Beispiel die sudo-Konfiguration
    :r /etc/sudoers HINWEIS:Sofern nicht durch SELinux eingeschränkt, kann der Benutzer alle lesen Datei auf diese Weise!
  • sich mehr sudo-Privilegien erteilen user ALL=(ALL) NOPASSWD: ALL
  • überschreiben Sie die alte Konfiguration :w /etc/sudoers

Ich kann mir Dutzende ähnlicher Möglichkeiten vorstellen, wie Ihr Benutzer jetzt auf Ihr System zugreifen, es ändern oder zerstören kann.

Sie haben nicht einmal einen Audit-Trail, welche Dateien auf diese Weise geändert wurden, da Sie ihn nur in den sudo-Protokollmeldungen sehen werden, wie er Ihre Apache-Konfiguration bearbeitet. Dies ist ein Sicherheitsrisiko bei der Gewährung von sudo Privilegien für jeden Editor.

Dies ist mehr oder weniger derselbe Grund, warum sudo Root-Level-Rechte für Befehle wie tar gewährt werden und unzip oft unsicher ist, hindert Sie nichts daran, Ersatz für Systembinärdateien oder Systemkonfigurationsdateien in das Archiv aufzunehmen.

Ein zweites Risiko besteht, wie viele andere Kommentatoren bereits betont haben, darin, dass vim ermöglicht Shell-Escapes , wo Sie innerhalb von vim eine Sub-Shell starten können, mit der Sie jeden beliebigen Befehl ausführen können . Innerhalb Ihrer sudo vim-Sitzung werden diese als root ausgeführt, zum Beispiel das Shell-Escape:

  • :!/bin/bash gibt Ihnen eine interaktive Root-Shell
  • :!/bin/rm -rf / wird für gute Geschichten in der Kneipe sorgen.

Was stattdessen tun?

Sie können immer noch sudo verwenden Benutzern zu ermöglichen, Dateien, die ihnen nicht gehören, auf sichere Weise zu bearbeiten.

In Ihrer Sudoers-Konfiguration können Sie einen speziellen reservierten Befehl sudoedit festlegen gefolgt vom vollständigen (Platzhalter-)Pfadnamen zu den Dateien, die ein Benutzer bearbeiten darf:

user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

Der Benutzer kann dann das -e verwenden wechseln Sie in ihrer sudo-Befehlszeile oder verwenden Sie sudoedit Befehl:

sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf

Wie in der Manpage erklärt:

Das -e (edit) Option gibt an, dass der Benutzer, anstatt einen Befehl auszuführen, eine oder mehrere Dateien bearbeiten möchte. Anstelle eines Befehls wird die Zeichenfolge „sudoedit“ verwendet, wenn die Sicherheitsrichtlinie konsultiert wird.
Wenn der Benutzer durch die Richtlinie autorisiert ist, werden die folgenden Schritte unternommen:

  • Temporäre Kopien werden von den zu bearbeitenden Dateien erstellt, wobei der Besitzer auf den aufrufenden Benutzer gesetzt wird.
  • Der von der Richtlinie angegebene Editor wird ausgeführt, um die temporären Dateien zu bearbeiten. Die sudoers-Richtlinie verwendet die Umgebungsvariablen SUDO_EDITOR, VISUAL und EDITOR (in dieser Reihenfolge). Wenn keiner von SUDO_EDITOR, VISUAL oder EDITOR gesetzt ist, wird das erste im Editor aufgeführte Programm sudoers (5) Option wird verwendet.
  • Falls sie geändert wurden, werden die temporären Dateien an ihren ursprünglichen Speicherort zurückkopiert und die temporären Versionen entfernt.
    Wenn die angegebene Datei nicht existiert, wird sie erstellt.
    Beachten Sie, dass das anders ist Bei den meisten Befehlen, die von sudo ausgeführt werden, wird der Editor mit der unveränderten Umgebung des aufrufenden Benutzers ausgeführt. Wenn sudo aus irgendeinem Grund eine Datei nicht mit ihrer bearbeiteten Version aktualisieren kann, erhält der Benutzer eine Warnung und die bearbeitete Kopie verbleibt in einer temporären Datei.

Die sudoers Das Handbuch hat auch einen ganzen Abschnitt darüber, wie es begrenzten Schutz gegen Shell-Escapes bieten kann mit dem RESRICT und NOEXEC Optionen.

restrict Vermeiden Sie es, Benutzern Zugriff auf Befehle zu gewähren, die es dem Benutzer ermöglichen, beliebige Befehle auszuführen. Viele Editoren haben einen eingeschränkten Modus, in dem Shell-Escapes deaktiviert sind, obwohl sudoedit eine bessere Lösung zum Ausführen von Editoren über sudo ist. Aufgrund der großen Anzahl von Programmen, die Shell-Escapes anbieten, ist es oft nicht praktikabel, Benutzer auf die Gruppe von Programmen zu beschränken, die dies nicht tun.

und

noexec
Viele Systeme, die gemeinsam genutzte Bibliotheken unterstützen, haben die Möglichkeit, Standardbibliotheksfunktionen zu überschreiben, indem sie eine Umgebungsvariable (normalerweise LD_PRELOAD) auf eine alternative gemeinsam genutzte Bibliothek verweisen. Auf solchen Systemen kann die noexec-Funktionalität von sudo verwendet werden, um zu verhindern, dass ein von sudo ausgeführtes Programm andere Programme ausführt. Hinweis, ... ...
Um noexec für einen Befehl zu aktivieren, verwenden Sie NOEXEC -Tag, wie im Abschnitt Benutzerspezifikation oben dokumentiert. Hier ist noch einmal das Beispiel:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Dies erlaubt dem Benutzer aaron, /usr/bin/more auszuführen und /usr/bin/vi mit aktiviertem noexec. Dadurch wird verhindert, dass diese beiden Befehle andere Befehle ausführen (z. B. eine Shell).


Linux
  1. Steuerung des Zugriffs auf rootless Podman für Benutzer

  2. Warum benötigt der Root-Benutzer eine Sudo-Berechtigung?

  3. So gewähren Sie einem Benutzer in Ubuntu ssh-Zugriff

  4. Warum benötigt der 'bin'-Benutzer eine Login-Shell?

  5. su - Benutzer Vs sudo su - Benutzer

So fügen Sie Benutzer unter Ubuntu 18.04 hinzu und löschen sie

So fügen Sie Benutzer unter CentOS 8 hinzu und löschen sie

Hinzufügen, Löschen und Gewähren von Sudo-Berechtigungen für Benutzer in Alpine Linux

So beschränken Sie den SSH-Zugriff auf bestimmte Benutzer in Linux

So erteilen Sie Benutzern unter Ubuntu Linux die Sudo-Berechtigung [Anfängertipp]

Webmin-Benutzer