So bearbeiten Sie die Sudoers-Datei

Einführung

Die Trennung von Berechtigungen ist eines der grundlegenden Sicherheitsparadigmen, die in Linux- und Unix-ähnlichen Betriebssystemen implementiert sind. Normale Benutzer arbeiten mit eingeschränkten Berechtigungen, um den Umfang ihres Einflusses auf ihre eigene Umgebung und nicht auf das breitere Betriebssystem zu reduzieren.

Ein spezieller Benutzer namens root verfügt über Super-Benutzer-Berechtigungen. Dies ist ein Administratorkonto ohne die Einschränkungen, die für normale Benutzer gelten. Benutzer können Befehle mit Super-Benutzer- oder root-Berechtigungen auf verschiedene Arten ausführen.

In diesem Artikel wird erläutert, wie Sie root-Berechtigungen korrekt und sicher erhalten. Ein besonderer Schwerpunkt liegt dabei auf der Bearbeitung der Datei /etc/sudoers.

Wir werden diese Schritte auf einem Ubuntu 20.04-Server ausführen, aber die meisten modernen Linux-Distributionen wie Debian und CentOS sollten auf ähnliche Weise funktionieren.

In diesem Leitfaden wird davon ausgegangen, dass Sie die hier beschriebene Ersteinrichtung des Servers bereits abgeschlossen haben. Melden Sie sich als regulärer Benutzer ohne root-Berechtigung bei Ihrem Server an und fahren Sie unten fort.

Hinweis: Dieses Tutorial befasst sich ausführlich mit der Eskalation von Berechtigungen und der sudoers-Datei. Wenn Sie einem Benutzer nur sudo-Berechtigungen hinzufügen möchten, lesen Sie unsere Schnellstart-Tutorials zum Erstellen eines neuen Sudo-fähigen Benutzers für Ubuntu und CentOS.

So erhalten Sie root-Berechtigungen

Es gibt drei grundlegende Möglichkeiten, um root-Berechtigungen zu erhalten, die sich in ihrem Entwicklungsstand unterscheiden.

Anmelden als root-Benutzer

Die einfachste und unkomplizierteste Methode zum Abrufen von root-Berechtigungen besteht darin, sich direkt als root-Benutzer bei Ihrem Server anzumelden.

Wenn Sie sich bei einem lokalen Computer anmelden (oder eine Out-of-Band-Konsolenfunktion auf einem virtuellen Server verwenden), geben Sie an der Anmeldeaufforderung root als Benutzernamen ein und geben Sie das root-Passwort ein, wenn Sie dazu aufgefordert werden.

Wenn Sie sich über SSH anmelden, geben Sie den root-Benutzer vor der IP-Adresse oder dem Domänennamen in Ihrer SSH-Verbindungszeichenfolge an:

Wenn Sie keine SSH-Schlüssel für den root-Benutzer eingerichtet haben, geben Sie das root-Passwort ein, wenn Sie dazu aufgefordert werden.

Verwenden Sie su, um ein root-Benutzer zu werden

Die direkte Anmeldung als root-Benutzer wird normalerweise nicht empfohlen, da es einfach ist, das System für nicht administrative Aufgaben zu verwenden, was gefährlich ist.

Der nächste Weg, um Superuser-Berechtigungen zu erhalten, ermöglicht es Ihnen, jederzeit der root-Benutzer zu werden, wie Sie es benötigen.

Wir können dies tun, indem wir den Befehl su aufrufen, der für „Ersatzbenutzer“ steht. Geben Sie Folgendes ein, um root-Berechtigungen zu erhalten:

  • su

Sie werden aufgefordert, das Kennwort des root-Benutzers einzugeben. Anschließend werden Sie in eine root-Shell-Sitzung versetzt.

Wenn Sie die Aufgaben abgeschlossen haben, für die root-Berechtigungen erforderlich sind, kehren Sie zu Ihrer normalen Shell zurück, indem Sie Folgendes eingeben:

  • exit

Verwenden Sie sudo, um Befehle als root-Benutzer auszuführen

Der letzte Weg, um root-Berechtigungen zu erhalten, den wir diskutieren werden, ist mit dem Befehl sudo.

Mit dem Befehl sudo können Sie einmalige Befehle mit root-Berechtigungen ausführen, ohne eine neue Shell erstellen zu müssen. Es wird wie folgt ausgeführt:

  • sudo command_to_execute

Im Gegensatz zu su fordert der Befehl sudo das Passwort des aktuellen Benutzers an, nicht das root-Passwort.

Aufgrund seiner Auswirkungen auf die Sicherheit wird Sudo-Zugriff Benutzern standardmäßig nicht gewährt und muss eingerichtet werden, bevor er ordnungsgemäß funktioniert. In unseren Schnellstart-Tutorials zum Erstellen eines neuen Sudo-fähigen Benutzers für Ubuntu und CentOS erfahren Sie, wie Sie einen Sudo-fähigen Benutzer einrichten.

Im folgenden Abschnitt werden wir ausführlicher erläutern, wie Sie die Sudo-Konfiguration ändern können.

Was ist Visudo?

Der Befehl sudo wird über eine Datei unter /etc/sudoers konfiguriert.

Warnung: Bearbeiten Sie diese Datei nie mit einem normalen Texteditor! Verwenden Sie stattdessen immer den Befehl visudo!

Da eine falsche Syntax in der Datei /etc/sudoers zu einem Systembruch führen kann, bei dem es nicht möglich ist, erhöhte Berechtigungen zu erhalten, ist es wichtig, den Befehl visudo zum Bearbeiten der Datei zu verwenden.

Der Befehl visudo öffnet wie gewohnt einen Texteditor, überprüft jedoch beim Speichern die Syntax der Datei. Dies verhindert, dass Konfigurationsfehler sudo-Vorgänge blockieren. Dies ist möglicherweise Ihre einzige Möglichkeit, root-Berechtigungen zu erhalten.

Traditionell öffnet visudo die Datei /etc/sudoers mit dem vi-Texteditor. Ubuntu hat visudo jedoch so konfiguriert, dass stattdessen der nano-Texteditor verwendet wird.

Wenn Sie ihn wieder in vi ändern möchten, geben Sie den folgenden Befehl ein:

  • sudo update-alternatives --config editor
OutputThere are 4 choices for the alternative editor (providing /usr/bin/editor).    Selection    Path                Priority   Status ------------------------------------------------------------ * 0            /bin/nano            40        auto mode   1            /bin/ed             -100       manual mode   2            /bin/nano            40        manual mode   3            /usr/bin/vim.basic   30        manual mode   4            /usr/bin/vim.tiny    10        manual mode  Press <enter> to keep the current choice[*], or type selection number: 

Wählen Sie die Zaus, die der Auswahl entspricht, die Sie treffen möchten.

Unter CentOS können Sie diesen Wert ändern, indem Sie Ihrem ~/.bashrc die folgende Zeile hinzufügen:

  • export EDITOR=`which name_of_editor`

Geben Sie die Datei ein, um die Änderungen zu implementieren:

  • . ~/.bashrc

Nachdem Sie visudo konfiguriert haben, führen Sie den Befehl aus, um auf die Datei /etc/sudoers zuzugreifen:

  • sudo visudo

So bearbeiten Sie die Sudoers-Datei

In Ihrem ausgewählten Texteditor wird die Datei /etc/sudoers angezeigt.

Ich habe die Datei von Ubuntu 18.04 kopiert und eingefügt, wobei Kommentare entfernt wurden. Die Datei CentOS /etc/sudoers enthält viele weitere Zeilen, von denen einige in diesem Leitfaden nicht behandelt werden.

/etc/sudoers

Defaults        env_reset Defaults        mail_badpass Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"  root    ALL=(ALL:ALL) ALL  %admin ALL=(ALL) ALL %sudo   ALL=(ALL:ALL) ALL  #includedir /etc/sudoers.d 

Werfen wir einen Blick darauf, was diese Zeilen bewirken.

Standardzeilen

In der ersten Zeile „Defaults env_reset“ wird die Terminalumgebung zurückgesetzt, um alle Benutzervariablen zu entfernen. Dies ist eine Sicherheitsmaßnahme, mit der potenziell schädliche Umgebungsvariablen aus der sudo-Sitzung entfernt werden.

In der zweiten Zeile, wird mit dem Befehl Defaults mail_badpass das System angewiesen, Benachrichtigungen über fehlerhafte sudo-Passwortversuche an den konfigurierten mailto-Benutzer zu senden. Standardmäßig ist dies das root-Konto.

Die dritte Zeile, die mit „Defaults Secure_path=…“ beginnt, gibt den Pfad an (die Stellen im Dateisystem, nach denen das Betriebssystem nach Anwendungen sucht), die für sudo-Operationen verwendet werden. Dies verhindert, dass Benutzerpfade verwendet werden, was schädlich sein kann.

Benutzerberechtigungszeilen

Die vierte Zeile, die die sudo-Berechtigungen des root-Benutzers vorschreibt, unterscheidet sich von den vorhergehenden Zeilen. Schauen wir uns an, was die verschiedenen Felder bedeuten:

  • root ALL=(ALL:ALL) ALL Das erste Feld gibt den Benutzernamen an, für den die Regel gilt (root).

  • root ALL=(ALL:ALL) ALL Das erste „ALL“ gibt an, dass diese Regel für alle Hosts gilt.

  • root ALL=(ALL:ALL) ALL Dieses „ALL“ gibt an, dass der root-Benutzer Befehle wie alle Benutzer ausführen kann.

  • root ALL=(ALL:ALL) ALL Dieses „ALL“ gibt an, dass der root-Benutzer Befehle wie alle Gruppen ausführen kann.

  • root ALL=(ALL:ALL) ALL Das letzte „ALL“ gibt an, dass diese Regeln für alle Befehle gelten.

Dies bedeutet, dass unser root-Benutzer jeden Befehl mit sudo ausführen kann, solange er sein Passwort angibt.

Gruppenberechtigungszeilen

Die nächsten beiden Zeilen ähneln den Benutzerberechtigungszeilen, geben jedoch sudo-Regeln für Gruppen an.

Namen, die mit % beginnen, geben Gruppennamen an.

Hier sehen wir, dass die Administratorgruppe jeden Befehl als jeder Benutzer auf jedem Host ausführen kann. Ebenso hat die sudo-Gruppe die gleichen Berechtigungen, kann aber auch wie jede andere Gruppe ausgeführt werden.

Inklusive Zeile /etc/sudoers.d

Die letzte Zeile könnte auf den ersten Blick wie ein Kommentar aussehen:

/etc/sudoers

. . .  #includedir /etc/sudoers.d 

Sie **beginnt mit einem #, das normalerweise einen Kommentar anzeigt. Diese Zeile zeigt jedoch tatsächlich an, dass Dateien im Verzeichnis /etc/sudoers.d ebenfalls bezogen und angewendet werden.

Dateien in diesem Verzeichnis folgen denselben Regeln wie die Datei /etc/sudoers. Jede Datei, die nicht mit ~ endet und keinen . enthält, wird gelesen und an die sudo-Konfiguration angehängt.

Dies ist hauptsächlich für Anwendungen gedacht, die die sudo-Berechtigungen bei der Installation ändern möchten. Wenn Sie alle zugehörigen Regeln in einer einzigen Datei im Verzeichnis /etc/sudoers.d ablegen, können Sie leicht erkennen, welche Berechtigungen welchen Konten zugeordnet sind, und Anmeldeinformationen einfach umkehren, ohne die Datei /etc/sudoers direkt bearbeiten zu müssen.

Wie bei der Datei /etc/sudoers selbst sollten Sie Dateien im Verzeichnis /etc/sudoers.d immer mit visudo bearbeiten. Die Syntax zum Bearbeiten dieser Dateien lautet:

  • sudo visudo -f /etc/sudoers.d/file_to_edit

So geben Sie einem Benutzer Sudo-Berechtigungen

Die häufigste Operation, die Benutzer beim Verwalten von sudo-Berechtigungen ausführen möchten, besteht darin, einem neuen Benutzer allgemeinen sudo-Zugriff zu gewähren. Dies ist nützlich, wenn Sie einem Konto vollen Administratorzugriff auf das System gewähren möchten.

Der einfachste Weg, dies auf einem System zu tun, das mit einer Allzweck-Verwaltungsgruppe wie dem Ubuntu-System in diesem Leitfaden eingerichtet ist, besteht darin, den betreffenden Benutzer zu dieser Gruppe hinzuzufügen.

Unter Ubuntu 20.04 verfügt die sudo-Gruppe beispielsweise über vollständige Administratorrechte. Wir können einem Benutzer dieselben Berechtigungen gewähren, indem wir ihn der Gruppe wie folgt hinzufügen:

  • sudo usermod -aG sudo username

Der Befehl gpasswd kann auch verwendet werden:

  • sudo gpasswd -a username sudo

Beides wird dasselbe bewirken.

Unter CentOS ist dies normalerweise die wheel-Gruppe anstelle der sudo-Gruppe:

  • sudo usermod -aG wheel username

Oder unter Verwendung von gpasswd:

  • sudo gpasswd -a username wheel

Wenn das Hinzufügen des Benutzers zur Gruppe unter CentOS nicht sofort funktioniert, müssen Sie möglicherweise die Datei /etc/sudoers bearbeiten, um den Gruppennamen zu kommentieren:

  • sudo visudo

/etc/sudoers

. . . %wheel ALL=(ALL) ALL . . . 

So richten Sie benutzerdefinierte Regeln ein

Nachdem wir uns mit der allgemeinen Syntax der Datei vertraut gemacht haben, erstellen wir einige neue Regeln.

So erstellen Sie Alias-Dateien

Die sudoers-Datei kann einfacher organisiert werden, indem Dinge mit verschiedenen Arten von „Aliases“ gruppiert werden.

Zum Beispiel können wir drei verschiedene Benutzergruppen mit überlappender Mitgliedschaft erstellen:

/etc/sudoers

. . . User_Alias      GROUPONE = abby, brent, carl User_Alias      GROUPTWO = brent, doris, eric, User_Alias      GROUPTHREE = doris, felicia, grant . . . 

Gruppennamen müssen mit einem Großbuchstaben beginnen. Wir können dann Mitgliedern von GROUPTWO erlauben, die apt-Datenbank zu aktualisieren, indem wir eine Regel wie die folgende erstellen:

/etc/sudoers

. . . GROUPTWO    ALL = /usr/bin/apt-get update . . . 

Wenn Sie keinen Benutzer/keine Gruppe angeben, die wie oben ausgeführt werden soll, ist sudo standardmäßig der root-Benutzer.

Wir können Mitgliedern von GROUPTHREE erlauben, den Computer herunterzufahren und neu zu starten, indem wir einen „Befehls-Alias“ erstellen und diesen in einer Regel für GROUPTHREE verwenden:

/etc/sudoers

. . . Cmnd_Alias      POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE  ALL = POWER . . . 

Wir erstellen einen Befehls-Alias namens POWER, der Befehle zum Ausschalten und Neustarten des Computers enthält. Wir erlauben dann den Mitgliedern von GROUPTHREE, diese Befehle auszuführen.

Wir können auch Aliase „Ausführen als“ erstellen, die den Teil der Regel ersetzen können, der den Benutzer angibt, der den Befehl ausführen soll:

/etc/sudoers

. . . Runas_Alias     WEB = www-data, apache GROUPONE    ALL = (WEB) ALL . . . 

Auf diese Weise kann jeder, der Mitglied von GROUPONE ist, Befehle als www-Datenbenutzer oder Apache-Benutzer ausführen.

Denken Sie daran, dass spätere Regeln frühere Regeln überschreiben, wenn ein Konflikt zwischen beiden besteht.

So sperren Sie Regeln

Es gibt eine Reihe von Möglichkeiten, wie Sie mehr Kontrolle darüber erlangen können, wie sudo auf einen Anruf reagiert.

Der dem mlocate-Paket zugeordnete Befehl updateb ist auf einem Einzelbenutzersystem relativ harmlos. Wenn wir Benutzern erlauben möchten, es mit root-Berechtigungen auszuführen, ohne ein Passwort eingeben zu müssen, können wir eine Regel wie die folgende festlegen:

/etc/sudoers

. . . GROUPONE    ALL = NOPASSWD: /usr/bin/updatedb . . . 

NOPASSWD ist ein „Tag“, das bedeutet, dass kein Passwort angefordert wird. Es hat einen Begleitbefehl namens PASSWD, der das Standardverhalten ist. Ein Tag ist für den Rest der Regel relevant, es sei denn, es wird später von seinem „Twin“ -Tag außer Kraft gesetzt.

Zum Beispiel können wir eine Zeile wie diese haben:

/etc/sudoers

. . . GROUPTWO    ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill . . . 

Ein weiteres hilfreiches Tag ist NOEXEC, mit dem in bestimmten Programmen gefährliches Verhalten verhindert werden kann.

Beispielsweise können einige Programme, wie z. B. less, andere Befehle erzeugen, indem man dies über seine Benutzeroberfläche eingibt:

!command_to_run 

Dies führt grundsätzlich jeden Befehl aus, den der Benutzer mit denselben Berechtigungen erteilt, unter denen less ausgeführt wird, was sehr gefährlich sein kann.

Um dies einzuschränken, könnten wir eine Zeile wie die folgende verwenden:

/etc/sudoers

. . . username  ALL = NOEXEC: /usr/bin/less . . . 

Verschiedene Informationen

Es gibt einige weitere Informationen, die beim Umgang mit sudo nützlich sein können.

Wenn Sie in der Konfigurationsdatei einen Benutzer oder eine Gruppe als „Ausführen als“ angegeben haben, können Sie Befehle als diese Benutzer mithilfe der Flags -u bzw. -g ausführen:

  • sudo -u run_as_user command
  • sudo -g run_as_group command

Praktischerweise speichert sudo Ihre Authentifizierungsdaten standardmäßig für einen bestimmten Zeitraum in einem Terminal. Dies bedeutet, dass Sie Ihr Passwort erst erneut eingeben müssen, wenn dieser Timer abgelaufen ist.

Wenn Sie diesen Timer aus Sicherheitsgründen löschen möchten, wenn Sie mit dem Ausführen von Verwaltungsbefehlen fertig sind, können Sie Folgendes ausführen:

  • sudo -k

Wenn Sie andererseits den Befehl sudo „vorbereiten“ möchten, damit Sie später nicht dazu aufgefordert werden, oder Ihren sudo-Mietvertrag erneuern möchten, können Sie jederzeit Folgendes eingeben:

  • sudo -v

Sie werden aufgefordert, Ihr Passwort einzugeben, das für spätere sudo-Verwendungen zwischengespeichert wird, bis der sudo-Zeitrahmen abläuft.

Wenn Sie sich nur fragen, welche Berechtigungen für Ihren Benutzernamen definiert sind, können Sie Folgendes eingeben:

  • sudo -l

Dadurch werden alle Regeln in der Datei /etc/sudoers aufgelistet, die für Ihren Benutzer gelten. Dies gibt Ihnen eine gute Vorstellung davon, was Sie mit sudo als Benutzer tun dürfen oder nicht.

Es gibt viele Fälle, in denen Sie einen Befehl ausführen und dieser fehlschlägt, weil Sie vergessen haben, ihm sudo voranzustellen. Um zu vermeiden, dass Sie den Befehl erneut eingeben müssen, können Sie eine Bash-Funktion nutzen, die „letzten Befehl wiederholen“ bedeutet:

  • sudo !!

Das doppelte Ausrufezeichen wiederholt den letzten Befehl. Wir haben sudo vorangestellt, um den nicht privilegierten Befehl schnell in einen privilegierten Befehl umzuwandeln.

Für ein bisschen Spaß können Sie Ihrer /etc/sudoers-Datei mit visudo die folgende Zeile hinzufügen:

  • sudo visudo

/etc/sudoers

. . . Defaults    insults . . . 

Dies führt dazu, dass sudo eine dumme Beleidigung zurückgibt, wenn ein Benutzer ein falsches Passwort für sudo eingibt. Wir können sudo -k verwenden, um das vorherige zwischengespeicherte sudo-Passwort zu löschen und es auszuprobieren:

  • sudo -k
  • sudo ls
Output[sudo] password for demo:    # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it. 

Zusammenfassung

Sie sollten nun ein grundlegendes Verständnis für das Lesen und Ändern der sudoers-Datei und einen Überblick über die verschiedenen Methoden haben, mit denen Sie root-Berechtigungen erhalten können.

Denken Sie daran, dass Superuser-Berechtigungen regulären Benutzern aus einem bestimmten Grund nicht gewährt werden. Es ist wichtig, dass Sie verstehen, was jeder Befehl tut, den Sie mit root-Berechtigungen ausführen. Übernehmen Sie die Verantwortung nicht leichtfertig. Erfahren Sie, wie Sie diese Tools am besten für Ihren Anwendungsfall verwenden und nicht benötigte Funktionen sperren können.