Ich möchte einen neuen Benutzer erstellen und ihm sudo-Zugriff gewähren. Um genau zu sein, möchte ich, dass er sudo vim
httpd.conf verwendet und bearbeitet. 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?
vim
, kann der Benutzer jede beliebige Datei öffnen und in diese schreiben./etc/httpd/confs/httpd.conf
. Verwenden Sie dannchgrp [OPTION] GROUPNAME FILE
, um die Gruppeneigentümerschaft von zu ändern/etc/httpd/confs/httpd.conf
. So etwas wiegroupadd vimportant
das Erstellen einer neuen Gruppe undchgrp -v vimportant /etc/httpd/confs/httpd.conf
das Ändern der Gruppeneigentümerschaft. yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.htmlsudoers
Manpage nach "Sichere Bearbeitung" .sudo
vim Zugriff gewähren , kann der Benutzer vim als root verwenden. In Vim können Sie UNIX - Befehle (run Wie laufen Unix - Befehle aus Vim? ) So ein Benutzer zu tun , wäre in der Lage , was wieuseradd <myuser>
,rm -rf /
oder viele andere Dinge.Antworten:
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: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 !user ALL=(ALL) NOPASSWD: ALL
: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
undunzip
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:Der Benutzer kann dann die
-e
Option in seiner sudo-Befehlszeile verwenden oder den folgendensudoedit
Befehl verwenden:Wie in der Manpage erklärt :
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
und
quelle
sudo tar
undsudo unzip
verursache auch Probleme. Vielen Dank.:!rm -rf /
, whoops!echo "user ALL=(ALL) NOPASSWD: ALL" > ~/sudoers; tar cv ~/sudoers | sudo tar xv -C /etc
Und boom. Root-Zugriff auf tar ist eine Sicherheitslücke.:sh
, dann Boom, WurzelschaleMit dieser Konfiguration kann der Benutzer diese Datei bearbeiten. Dazu startet er einen
vim
Editor mit Root-Rechten.Sobald der
vim
Befehl gestartet wurde, kann der Benutzer mit diesem Editor nach Belieben arbeiten. - Er kann eine andere Datei öffnen oder sogar eine Shell aus vim heraus starten.Daher kann der Benutzer jetzt beliebige Dateien anzeigen und bearbeiten und beliebige Befehle auf Ihrem System ausführen.
quelle
Sicherheitsschlösser
Einige Programme, wie zum Beispiel
less
,vi
,vim
undmore
, damit andere Programme von einem Shell - Befehl was laufen , wie Shell - Escape bekannt ist oder mit dem Kommandointerpreter entkommen. In diesen Fällen können Sie verwendenNOEXEC
, um zu verhindern, dass einige Programme die Ausführung anderer Programmberechtigungen zulassen. Beispiel:Dies würde es dem Benutzer ermöglichen, Dateien auf dem System, auf dem vim und mehr ausgeführt wird, zu bearbeiten oder zu privilegieren, deaktiviert jedoch die Möglichkeit, andere Programme mit Privilegien über den Escape-Befehlsinterpreter auszuführen
vim
.Wichtig
sudo
beinhaltet Sperren mehrere Sicherheits (Standard) , die gefährliche Aufgaben, wie Umleiten der Standardausgabe der Ausführung eines Programms ( verhindernSTDOUT
) auf Dateien außerhalb des Benutzers Home - Verzeichnis.Wenn in der Datei definiert,
/etc/sudoers
dass ein Benutzer mit Berechtigungen ausgeführt werden kann/usr/bin/vim
, z. B. wie folgt:sudo
Damit kann der definierte reguläre Benutzer/usr/bin/vim
auf folgende Arten ausgeführt werden:Es wird jedoch verhindert, dass vim folgendermaßen ausgeführt wird:
quelle
Die einfache Antwort:
Folgendes ist ein Vim-Befehl:
Sie haben jetzt eine Wurzelschale.
quelle
Eine mögliche inkrementelle Sicherheitsverbesserung besteht darin, Folgendes zu ersetzen:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
mit
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
und dann muss der Benutzer
sudo rvim /etc/httpd/confs/httpd.conf
stattdessen ausgeführt werden.Vim unterstützt einen eingeschränkten Modus, der mit der Befehlszeilenoption -Z oder durch Starten des Programms als rvim ausgelöst wird. Wenn der eingeschränkte Modus aktiviert ist, sind "alle Befehle, die eine externe Shell verwenden, deaktiviert". Dieser Ansatz würde den Benutzer nicht daran hindern, einen
:split file
ex-Befehl zum Öffnen anderer Dateien zu verwenden, sollte jedoch zumindest absichtlich böswillige Shell-Befehle wie verhindern:!rm -rf /
.quelle
Ich stimme HBruijns Antwort zu, dass das Ausführen von vim als root das System sehr weit öffnet und sudoedit eine sicherere Lösung wäre.
Aber selbst dann wäre Ihr System wahrscheinlich noch ziemlich offen. Zumindest unter der Annahme, dass ein Apache-Prozess mit Root-Rechten basierend auf dieser Konfiguration gestartet wird. Es gibt eine Million Möglichkeiten, Apache so zu konfigurieren, dass es externe Programme ausführt. Betrachten Sie als ein Beispiel das Pipe-Argument für die CustomLog- Direktive. Im Handbuch heißt es ausdrücklich:
Wenn Ihre Benutzer die Konfiguration schreiben können, können sie das Programm natürlich nach Belieben ändern, z. B. durch Ausführen eines Shell-Skripts, um ihnen weitere Berechtigungen zu erteilen.
Aus diesem Grund habe ich kürzlich eine Möglichkeit gehackt, die Funktionen so zu nutzen, dass Apache die besondere Fähigkeit erhält, sich an einen privilegierten Port zu binden, obwohl er ansonsten als normaler Benutzer ausgeführt wird. Auf diese Weise können Benutzer die Konfiguration bearbeiten und sogar den Server starten und sind dennoch größtenteils sicher. Das einzige Problem ist, dass sie jeden Prozess an jede IP binden können. Ein gewisses Maß an Vertrauen bleibt bestehen, da sie möglicherweise einen Weg finden, das System sshd zum Absturz zu bringen, und dann ihre eigene Version starten, um das root-Passwort zu erhalten.
quelle
Es sollte beachtet werden, dass auch
sudoedit {.../whatever.conf}
ein Sicherheitsrisiko sein kann.Erstellen Sie ein Shell-Skript
/tmp/make_me_root.sh
und rufen Sie dieses Skript in Ihrer Konfigurationsdatei auf. Ich kenne mehrere Beispiele, in denen dieser Ansatz funktioniert:
Befehl samba -> log nt token
syslog-ng -> Programm: Senden von Nachrichten an externe Anwendungen
Apache -> CustomLog
Ich nehme an, man kann diese Liste endlos erweitern.
Alles was Sie tun müssen, ist den Dienst neu zu starten. Sobald Sie root sind, werden Sie natürlich solche Konfigurationszeilen zurücksetzen, um Ihre Spuren zu verwischen.
quelle
Natürlich ist es überhaupt nicht sicherer. Wie bereits erwähnt, ist sudoedit der einfachste und geeignetste Weg, dies zu tun.
Was ich hinzufügen möchte, ist, dass vim das Starten einer Shell zulässt, so dass nicht nur alle Systemdateien bearbeitet werden können, sondern auch das Starten einer Shell und das Ausführen, wo immer er möchte.
Versuche einfach ein vim zu starten und tippe: sh
quelle