Wie man Dateien mit sudoedit unter Linux sicher bearbeiten kann

Angenommen, Sie sind Systemadministrator in einem Unternehmen, in dem Teams meist an Linux mit eingeschränkten Rechten arbeiten. Stellen Sie sich nun eine Situation vor, in der Mitglieder eines der Teams – als Teil einer neuen Arbeit – häufig eine Datei bearbeiten müssen, die Superuser-Rechte erfordert. Was würdest du tun?

Eine Möglichkeit ist, ihnen den ’sudo‘-Zugang zu geben, aber das wäre wie der Zugang eines Fremden zu Ihrem kompletten Zuhause, wenn sie nur in einem Ihrer Räume sein müssen – was ich meine, der standardmäßige ’sudo‘-Zugang lässt sie alles tun, was Root-Rechte erfordert, wenn alles, was benötigt wird, die Möglichkeit ist, eine bestimmte Systemdatei zu bearbeiten.

Angesichts der Art von Flexibilität, die ’sudo‘ bietet, besteht die andere Möglichkeit, die ’sudo‘-Politik so zu optimieren, dass nur das Recht zur Bearbeitung der betreffenden Datei gewährt wird. Zum Beispiel so etwas wie das hier:

%newsudo ALL = vim /path/to/file

Das ist zwar zweifellos eine weitaus bessere Lösung als die Bereitstellung des vollständigen Sudo-Zugriffs, aber es gibt immer noch eine Lücke, die jemand ausnutzen könnte.

Um zu verstehen, wovon ich spreche, betrachten Sie ein Szenario, in dem – in dem oben genannten begrenzten Zugang – der Gruppe zur Verfügung gestellt wird und jemand die betreffende Datei mit dem Befehl’sudo‘ zur Bearbeitung öffnet.

Nun, ein kluger Verstand mit guten Kenntnissen über vim würde wissen, dass er eine neue Shell aus dem Editor heraus starten kann – alles, was er tun muss, ist, den folgenden Befehl vim auszuführen:

:shell

Dadurch befinden Sie sich sofort in einer interaktiven Shell. Wenn Sie diese Schritte auf Ihrer Maschine ausprobieren, führen Sie einfach den Befehl ‚whoami‘ aus und Sie werden verstehen, von welcher Lücke ich gesprochen habe – Ja, Sie befinden sich in der Shell als root.

Hier ist ein Beispiel-Screenshot:

Unnötig zu sagen, dass der Zweck, den Bearbeitungszugriff auf nur eine einzige Datei zu ermöglichen, abgelehnt wurde und der Benutzer jetzt ALLES tun kann.

Mal sehen, ob es noch eine andere Möglichkeit gibt, die wir haben. Es gibt einen NOEXEC-Tag, den du in deinem Sudoers-Eintrag verwenden kannst:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC erlaubt es Ihnen grundsätzlich zu verhindern, dass ein von sudo ausgeführtes Programm andere Programme ausführt. Also, ist das die ultimative Lösung? Leider nicht. Was die Gründe betrifft, so erklärt das sudoers Handbuch dieses Tag:

noexec

Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually LD_PRELOAD) to an alternate shared library. On such systems, sudo’s noexec functionality can be used to prevent a program run by sudo from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected.

The noexec feature is known to work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.



To enable noexec for a command, use the NOEXEC tag as documented in the User Specification section above. Here is that example again:

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

This allows user aaron to run /usr/bin/more and /usr/bin/vi with noexec enabled. This will prevent those two commands from executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting noexec you can always just try it out and check whether shell escapes work when noexec is enabled.

Note that restricting shell escapes is not a panacea. Programs running as root are still capable ofmany potentially hazardous operations (such as changing or overwriting files) that could lead to unintended privilege escalation.


Wenn Sie den fett gedruckten Text sorgfältig lesen, wissen Sie, dass NOEXEC seine eigenen Einschränkungen hat.

Also, was ist dann die zuverlässigste Lösung? Nun, es ist die sudoedit. Auch das Handbuch des Ruders empfiehlt dieses Tool:

In the specific case of an editor, a safer approach is to give the user permission to run sudoedit.

Sudoedit

Sudoedit ist ein integrierter Befehl, der es Benutzern ermöglicht, Dateien sicher zu bearbeiten. Laut der sudo man page entspricht ’sudoedit‘ der Ausführung von ’sudo‘ mit der Kommandozeilenoption ‚-e‘.

Warum ist es besser.

Mit ’sudoedit‘ haben Benutzer die Wahl, ihren bevorzugten Editor zu verwenden – was im Gegensatz zu der Lösung, die wir am Anfang dieses Tutorials besprochen haben, bei der die Benutzer gezwungen sind, den Vim-Editor zu verwenden, so dass sie ihre eigenen Anpassungen genießen können.

So funktioniert Sudoedit

Um sudoedit zu verwenden, sollte der Eintrag in den sudoers z.B. so ähnlich sein:

%newsudo ALL = sudoedit /path/to/file

Und Benutzer, die Teil der Gruppe „newsudo“ sind, können die Datei bearbeiten, indem sie den folgenden Befehl ausführen:

sudoedit /path/to/file

Was dieser Befehl also tun wird, ist, zuerst eine temporäre Kopie der Datei zu erstellen, die Sie bearbeiten möchten. Anschließend durchsucht der Befehl die Umgebungsvariablen SUDO_EDITOR, VISUAL und EDITOR (in dieser Reihenfolge), um festzustellen, welcher Editor aufgerufen werden soll, um die gerade erstellte temporäre Kopie zu öffnen. Nachdem der Benutzer mit der Änderungsarbeit fertig ist, werden die Änderungen wieder in die Originaldatei kopiert.

Hier ist die detaillierte Erklärung von der Man Page’sudo‘ command:

-e, --edit 
Edit one or more files instead of running a command. In lieu of a path name, the string "sudoedit" is used when consulting the security policy. If the user is authorized by the policy, the followingsteps are taken:

1. Temporary copies are made of the files to be edited with
the owner set to the invoking user.

2. The editor specified by the policy is run to edit the
temporary files. The sudoers policy uses the
SUDO_EDITOR, VISUAL and EDITOR environment variables (in
that order). If none of SUDO_EDITOR, VISUAL or EDITOR
are set, the first program listed in the editor
sudoers(5) option is used.

3. If they have been modified, the temporary files are
copied back to their original location and the temporary
versions are removed.

If the specified file does not exist, it will be created. Note that unlike most commands run by sudo, the editor is run with the invoking user’s environment unmodified. If, for some reason, sudo is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file.

Fazit

Inzwischen sollten Sie eine grundlegende Idee über’sudoedit‘ haben, einschließlich wann Sie es verwenden sollten, und warum es besser ist, als ’sudo‘ zu verwenden, wenn Sie nur eine Datei oder ein paar Dateien bearbeiten möchten. Natürlich hat ’sudoedit‘, wie jedes andere sicherheitsrelevante Tool, seinen Anteil an Exploits, aber es ist immer noch eine empfohlene Lösung in vielen Anwendungsfällen.

Das könnte dich auch interessieren …