GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So lassen Sie Benutzer Dateien mit sudoedit unter Linux sicher bearbeiten

Angenommen, Sie sind Systemadministrator in einem Unternehmen, in dem Teams hauptsächlich mit eingeschränkten Rechten unter Linux 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, für die Superuser-Berechtigungen erforderlich sind. Was würden Sie tun?

Eine Möglichkeit besteht darin, ihnen den „sudo“-Zugriff zu gewähren, aber das wäre so, als würde man einem Fremden Zugriff auf Ihr gesamtes Zuhause gewähren, wenn er sich nur in einem Ihrer Räume aufhalten muss – was ich meine, ist der standardmäßige „sudo“-Zugriff Lassen Sie sie alles tun, was Root-Rechte erfordert, wenn alles, was erforderlich ist, die Fähigkeit ist, eine bestimmte Systemdatei zu bearbeiten.

Angesichts der Art von Flexibilität, die 'sudo' bietet, besteht die andere Möglichkeit darin, die 'sudo'-Richtlinie so zu optimieren, dass nur das Recht zum Bearbeiten der betreffenden Datei gewährt wird. Zum Beispiel so etwas:

%newsudo ALL = vim /path/to/file

Obwohl dies zweifellos eine viel bessere Lösung ist, als den vollständigen sudo-Zugriff bereitzustellen, gibt es immer noch eine Lücke, die jemand ausnutzen könnte.

Um zu verstehen, wovon ich spreche, stellen Sie sich ein Szenario vor, in dem der Gruppe der oben erwähnte eingeschränkte Zugriff gewährt wird und jemand die betreffende Datei mit dem Befehl "sudo" zum Bearbeiten öffnet.

Nun, ein kluger Kopf mit guten Kenntnissen über vim würde wissen, dass er eine neue Shell aus dem Editor heraus starten kann – er muss lediglich den folgenden vim-Befehl ausführen:

:shell

Dadurch werden Sie sofort in eine interaktive Shell versetzt. Wenn Sie diese Schritte auf Ihrem Computer ausprobieren, führen Sie einfach den Befehl „whoami“ aus und Sie werden verstehen, von welcher Lücke ich gesprochen habe – Ja, Sie befinden sich als Root in der Shell.

Hier ist ein Beispiel-Screenshot:

Unnötig zu erwähnen, dass der Zweck, Bearbeitungszugriff auf nur eine einzelne Datei zu gewähren, zunichte gemacht wurde und der Benutzer jetzt ALLES tun kann.

Mal sehen, ob es eine andere Möglichkeit gibt, die wir haben. Es gibt ein NOEXEC-Tag, das Sie in Ihrem Sudoers-Eintrag verwenden können:

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

Mit NOEXEC können Sie grundsätzlich verhindern, dass ein von sudo ausgeführtes Programm andere Programme ausführt. Ist das also die ultimative Lösung? Traurigerweise Nein. 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 hervorgehobenen Text sorgfältig lesen, werden Sie wissen, dass NOEXEC seine eigenen Einschränkungen hat.

Was ist dann die zuverlässigste Lösung? Nun, es ist sudoedit . Auch sudoers manual empfiehlt dieses Tool:

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

Sudoedit ist ein integrierter Befehl, mit dem Nutzer Dateien sicher bearbeiten können. Laut der sudo-Manpage entspricht „sudoedit“ der Ausführung von „sudo“ mit der Befehlszeilenoption „-e“.

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 Benutzer gezwungen sind, den Vim-Editor zu verwenden -, sodass sie ihre eigenen Anpassungen genießen können. Und der größte Grund von allen, mit „sudoedit“, bearbeitet der Benutzer die Datei als er selbst und nicht als „root“.

So funktioniert Sudoedit

Um sudoedit zu verwenden, sollte der Eintrag in den sudoers beispielsweise so lauten:

%newsudo ALL = sudoedit /path/to/file

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

sudoedit /path/to/file

Dieser Befehl erstellt also zunächst eine temporäre Kopie der Datei, die Sie bearbeiten möchten. Dann durchsucht der Befehl die 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 Nutzer die Änderungsarbeiten abgeschlossen hat, werden die Änderungen zurück in die Originaldatei kopiert.

Hier ist die detaillierte Erklärung von der Manpage des 'sudo'-Befehls:

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

Inzwischen sollten Sie eine grundlegende Vorstellung von „sudoedit“ haben, einschließlich dessen, wann Sie es verwenden und warum es besser ist als „sudo“, wenn Sie nur eine oder mehrere Dateien bearbeiten möchten. Natürlich hat 'sudoedit', wie jedes andere sicherheitsbezogene Tool, seinen Anteil an Exploits, aber es ist immer noch eine empfohlene Lösung in vielen Anwendungsfällen.


Linux
  1. So führen Sie einen zeilenweisen Vergleich von Dateien in Linux mit dem Befehl diff durch

  2. So verwalten Sie Protokolldateien mit Logrotate unter Linux

  3. So übertragen Sie Dateien sicher mit SCP

  4. So sortieren Sie Dateien in Linux mit dem Sortierbefehl

  5. So übertragen Sie Dateien sicher mit dem SCP-Befehl unter Linux

So bearbeiten Sie mehrere Dateien mit dem Vim-Editor

So sichern Sie Dateien und Verzeichnisse mit Rsync unter Linux

So blockieren Sie einen Port mit einer Firewall in Linux

So synchronisieren Sie Dateien in zwei Richtungen mit Osync-Skript in Linux

So löschen Sie Dateien und Verzeichnisse mit der Linux-Befehlszeile

So löschen Sie Dateien sicher mit dem Shred-Befehl in Debian 11