Obwohl Sie die Befehlszeilenargumente einschränken, hindert nichts den Benutzer daran, vim zu verwenden , um beliebige Dateien zu öffnen, zu bearbeiten und zu überschreiben, sobald sie als root ausgeführt werden.
Der Benutzer kann sudo vim /etc/httpd/conf/httpd.conf
und dann ausführen
- Löschen Sie den gesamten Text aus dem Bearbeitungspuffer
- dann aus
:r /etc/sudoers
Gründen der Benutzerfreundlichkeit eine vorhandene Datei (obwohl dies nicht einmal erforderlich ist): zum Beispiel die sudo-Konfiguration HINWEIS: Sofern SELinux keine Einschränkungen vorsieht, kann der Benutzer jede Datei auf diese Weise lesen !
- Gewähren Sie sich mehr Sudo-Privilegien
user ALL=(ALL) NOPASSWD: ALL
- überschreibe 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 es zerstören kann.
Sie haben nicht einmal einen Audit-Trail, welche Dateien auf diese Weise geändert wurden, da Sie nur sehen, wie er Ihre Apache-Konfiguration in den Sudo-Protokollmeldungen bearbeitet. Dies ist ein Sicherheitsrisiko bei der Vergabe von sudo
Berechtigungen an einen Editor.
Dies ist mehr oder weniger derselbe Grund, warum das Gewähren von Rechten auf Sudo-Root-Ebene für Befehle wie tar
und unzip
häufig unsicher ist. Nichts hindert Sie daran, Ersetzungen für Systembinärdateien oder Systemkonfigurationsdateien in das Archiv aufzunehmen.
Ein zweites Risiko, auf das viele andere Kommentatoren hingewiesen haben, besteht darin, vim
dass Shell-Escapes möglich sind , bei denen Sie eine Sub-Shell aus vim heraus starten können, mit der Sie beliebige Befehle ausführen können . In Ihrer sudo vim-Sitzung werden diese als root ausgeführt, zum Beispiel als Shell-Escape:
:!/bin/bash
gibt Ihnen eine interaktive Root-Shell
:!/bin/rm -rf /
wird für gute Geschichten in der Kneipe sorgen.
Was ist stattdessen zu tun?
Sie können weiterhin verwenden sudo
, um Benutzern das Bearbeiten von Dateien, die sie nicht besitzen, auf sichere Weise zu ermöglichen.
In Ihrer sudoers-Konfiguration können Sie einen speziellen reservierten Befehl festlegen, sudoedit
gefolgt vom vollständigen Pfadnamen (Platzhalter) 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 die -e
Option in seiner sudo-Befehlszeile verwenden oder den folgenden sudoedit
Befehl verwenden:
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
Wie in der Manpage erklärt :
Die -e (edit)
Option gibt an, dass der Benutzer eine oder mehrere Dateien bearbeiten möchte, anstatt einen Befehl auszuführen. Anstelle eines Befehls wird bei der Abfrage der Sicherheitsrichtlinie die Zeichenfolge "sudoedit" verwendet.
Wenn der Benutzer durch die Richtlinie autorisiert ist, werden die folgenden Schritte ausgeführt:
- Temporäre Kopien der zu bearbeitenden Dateien werden erstellt, wobei der Eigentümer auf den aufrufenden Benutzer festgelegt ist.
- Der in 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 SUDO_EDITOR, VISUAL oder EDITOR nicht gesetzt sind, wird das erste in der
sudoers
Option editor (5) aufgeführte Programm verwendet.
- Wenn sie geändert wurden, werden die temporären Dateien an ihren ursprünglichen Speicherort zurückkopiert und die temporären Versionen werden entfernt.
Wenn die angegebene Datei nicht existiert, wird sie erstellt.
Beachten Sie, dass im Gegensatz zu den meisten von sudo ausgeführten Befehlen der Editor mit unveränderter Umgebung des aufrufenden Benutzers ausgeführt wird. Wenn sudo aus irgendeinem Grund eine Datei nicht mit der bearbeiteten Version aktualisieren kann, erhält der Benutzer eine Warnung und die bearbeitete Kopie verbleibt in einer temporären Datei.
Das sudoers
Handbuch enthält auch einen ganzen Abschnitt, wie es mit den Optionen und einen begrenzten Schutz gegen Shell-Flucht bieten kann.RESRICT
NOEXEC
restrict
Vermeiden Sie es, Benutzern Zugriff auf Befehle zu gewähren, mit denen der Benutzer beliebige Befehle ausführen kann. Viele Editoren haben einen eingeschränkten Modus, in dem Shell-Escape-Befehle deaktiviert sind, obwohl sudoedit eine bessere Lösung ist, um Editoren über sudo auszuführen. Aufgrund der großen Anzahl von Programmen, die Shell-Escape-Funktionen anbieten, ist es oft nicht praktikabel, Benutzer auf Programme zu beschränken, die nicht funktionieren.
und
noexec
Viele Systeme, die gemeinsam genutzte Bibliotheken unterstützen, können Standardbibliotheksfunktionen ü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 das NOEXEC
im Abschnitt Benutzerspezifikation oben beschriebene Tag. Hier noch einmal das Beispiel:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Dies ermöglicht es dem Benutzer Aaron auszuführen /usr/bin/more
und /usr/bin/vi
noexec zu aktivieren. Dadurch wird verhindert, dass diese beiden Befehle andere Befehle (z. B. eine Shell) ausführen.
vim
, kann der Benutzer jede beliebige Datei öffnen und in diese schreiben.