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).