Linux-Sicherheit · 5 min read · Nov 14, 2025
Wie man Benutzern sicheres Bearbeiten von Dateien mit sudoedit unter Linux ermöglicht
Angenommen, Sie sind ein Systemadministrator in einem Unternehmen, in dem die Teams hauptsächlich mit Linux und eingeschränkten Rechten arbeiten. Stellen Sie sich nun eine Situation vor, in der Mitglieder eines der Teams - im Rahmen einer neuen Arbeit - häufig eine Datei bearbeiten müssen, die Superuser-Rechte erfordert. Was würden Sie tun?
Eine Möglichkeit besteht darin, ihnen den ‘sudo’-Zugriff zu gewähren, aber das wäre, als würde man einem Fremden Zugang zu Ihrem gesamten Zuhause gewähren, wenn er nur in einem Ihrer Räume sein möchte - was ich meine, ist, dass der Standard-‘sudo’-Zugriff ihnen erlaubt, alles zu tun, was Root-Rechte erfordert, während nur die Fähigkeit erforderlich ist, eine bestimmte Systemdatei zu bearbeiten.
Angesichts der Flexibilität, die ‘sudo’ bietet, haben Sie die andere Möglichkeit, die ‘sudo’-Richtlinie so anzupassen, dass nur das Recht zum Bearbeiten der betreffenden Datei gewährt wird. Zum Beispiel etwas wie dies:
%newsudo ALL = vim /path/to/fileObwohl das zweifellos eine viel bessere Lösung ist, als den vollständigen sudo-Zugriff zu gewähren, gibt es immer noch eine Lücke, die jemand ausnutzen könnte.
Um zu verstehen, wovon ich spreche, betrachten Sie ein Szenario, in dem der oben genannte eingeschränkte Zugriff der Gruppe gewährt wird und jemand die betreffende Datei mit dem ‘sudo’-Befehl zum Bearbeiten öffnet.
Jetzt würde ein cleverer Kopf mit gutem Wissen über vim wissen, dass er eine neue Shell aus dem Editor heraus starten kann - alles, was er tun muss, ist, den folgenden vim-Befehl auszuführen:
:shellDies wird Sie sofort in eine interaktive Shell versetzen. Wenn Sie diese Schritte auf Ihrem Rechner ausprobieren, führen Sie einfach den Befehl ‘whoami’ aus und Sie werden verstehen, welche Lücke ich meinte - Ja, Sie sind in der Shell als root.
Hier ist ein Beispiel-Screenshot:

Es versteht sich von selbst, dass der Zweck, den Bearbeitungszugriff nur auf eine einzige Datei zu gewähren, vereitelt wurde, und der Benutzer kann jetzt ALLES tun.
Lassen Sie uns sehen, ob es eine andere Option gibt, die wir haben. Es gibt ein NOEXEC-Tag, das Sie in Ihrem sudoers-Eintrag verwenden können:
%newsudo ALL = NOEXEC: vim /path/to/fileNOEXEC ermöglicht es Ihnen grundsätzlich, zu verhindern, dass ein von sudo ausgeführtes Programm andere Programme ausführt. Ist das also die ultimative Lösung? Leider nein. Was die Gründe betrifft, so erklärt das sudoers-Handbuch dieses Tag wie folgt:
noexec
Viele Systeme, die Shared Libraries unterstützen, haben die Fähigkeit, Standardbibliotheksfunktionen zu überschreiben, indem sie eine Umgebungsvariable (normalerweise LD_PRELOAD) auf eine alternative Shared Library 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. Beachten Sie jedoch, dass dies nur für native dynamisch verlinkte ausführbare Dateien gilt. Statisch verlinkte ausführbare Dateien und ausländische ausführbare Dateien, die unter binärer Emulation ausgeführt werden, sind nicht betroffen.
Die noexec-Funktion ist bekannt dafür, auf SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x und AIX 5.3 und höher zu funktionieren.
...
...
...
Um noexec für einen Befehl zu aktivieren, verwenden Sie das NOEXEC-Tag, wie im Abschnitt zur Benutzerspezifikation oben dokumentiert. Hier ist dieses Beispiel erneut:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Dies erlaubt dem Benutzer aaron, /usr/bin/more und /usr/bin/vi mit aktiviertem noexec auszuführen. Dies verhindert, dass diese beiden Befehle andere Befehle (wie eine Shell) ausführen. Wenn Sie sich nicht sicher sind, ob Ihr System in der Lage ist, noexec zu unterstützen, können Sie es immer einfach ausprobieren und überprüfen, ob Shell-Escape funktioniert, wenn noexec aktiviert ist.
Beachten Sie, dass die Einschränkung von Shell-Escape kein Allheilmittel ist. Programme, die als root ausgeführt werden, sind weiterhin in der Lage, viele potenziell gefährliche Operationen (wie das Ändern oder Überschreiben von Dateien) durchzuführen, die zu unbeabsichtigter Privilegieneskalation führen könnten.
...
...
...Wenn Sie den Text, der fett hervorgehoben ist, sorgfältig lesen, wissen Sie, dass NOEXEC seine eigenen Einschränkungen hat.
Was ist also die zuverlässigste Lösung? Nun, es ist sudoedit. Selbst das sudoers-Handbuch empfiehlt dieses Tool:
Im spezifischen Fall eines Editors ist ein sicherer Ansatz, dem Benutzer die Berechtigung zu erteilen, sudoedit auszuführen.Sudoedit ist ein integrierter Befehl, der es Benutzern ermöglicht, Dateien sicher zu bearbeiten. Laut der sudo-Man-Seite ist ‘sudoedit’ gleichbedeutend mit der Ausführung von ‘sudo’ mit der ‘-e’-Befehlszeilenoption.
Warum ist es besser
Mit ‘sudoedit’ haben Benutzer die Wahl, ihren bevorzugten Editor zu verwenden - was im Gegensatz zu der Lösung steht, die wir zu Beginn dieses Tutorials besprochen haben, bei der die Benutzer gezwungen sind, den Vim-Editor zu verwenden - und ihnen ermöglicht, ihre eigenen Anpassungen zu genießen. Und der größte Grund von allen ist, dass der Benutzer die Datei als sich selbst und nicht als ‘root’ bearbeitet.
Wie Sudoedit funktioniert
Um sudoedit zu verwenden, sollte der Eintrag in den sudoers beispielsweise so aussehen:
%newsudo ALL = sudoedit /path/to/fileUnd Benutzer, die Teil der Gruppe ‘newsudo’ sind, können die Datei mit dem folgenden Befehl bearbeiten:
sudoedit /path/to/fileWas dieser Befehl tun wird, ist, dass er zuerst eine temporäre Kopie der Datei erstellt, die Sie bearbeiten möchten. Dann sucht der Befehl in den Umgebungsvariablen SUDO_EDITOR, VISUAL und EDITOR (in dieser Reihenfolge), um zu bestimmen, welcher Editor aufgerufen werden soll, um die gerade erstellte temporäre Kopie zu öffnen. Nachdem der Benutzer mit der Bearbeitung fertig ist, werden die Änderungen zurück in die Originaldatei kopiert.
Hier ist die detaillierte Erklärung aus der Man-Seite des ‘sudo’-Befehls:
-e, --edit
Bearbeiten Sie eine oder mehrere Dateien, anstatt einen Befehl auszuführen. Anstelle eines Pfadnamens wird der String "sudoedit" verwendet, wenn die Sicherheitsrichtlinie konsultiert wird. Wenn der Benutzer durch die Richtlinie autorisiert ist, werden die folgenden Schritte unternommen:
1. Temporäre Kopien der zu bearbeitenden Dateien werden erstellt,
deren Eigentümer auf den aufrufenden Benutzer gesetzt wird.
2. Der durch die 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 keine der Umgebungsvariablen SUDO_EDITOR, VISUAL oder EDITOR
gesetzt ist, wird das erste Programm verwendet, das in der
sudoers(5)-Option für den Editor aufgeführt ist.
3. Wenn sie geändert wurden, werden die temporären Dateien
zurück an ihren ursprünglichen Ort kopiert und die temporären
Versionen werden entfernt.
Wenn die angegebene Datei nicht existiert, wird sie erstellt. Beachten Sie, dass der Editor im Gegensatz zu den meisten von sudo ausgeführten Befehlen mit der unmodifizierten Umgebung des aufrufenden Benutzers ausgeführt wird. Wenn sudo aus irgendeinem Grund nicht in der Lage ist, eine Datei mit ihrer bearbeiteten Version zu aktualisieren, erhält der Benutzer eine Warnung und die bearbeitete Kopie bleibt in einer temporären Datei.Bis jetzt sollten Sie eine grundlegende Vorstellung von ‘sudoedit’ haben, einschließlich wann man es verwenden sollte und warum es besser ist als die Verwendung von ‘sudo’, wenn Sie nur eine Datei oder einige Dateien bearbeiten möchten. Natürlich hat ‘sudoedit’, wie jedes andere sicherheitsrelevante Tool, seine eigenen Ausnutzungen gehabt, aber es ist immer noch eine empfohlene Lösung in vielen Anwendungsfällen.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.