So bearbeiten Sie die Sudoers-Datei

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

A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.

In diesem Artikel werden wir diskutieren, wie man korrekt und sicher Root-Rechte erhält, wobei ein besonderer Schwerpunkt auf der Bearbeitung der Datei /etc/sudoers liegt.

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

Diese Anleitung geht davon aus, dass Sie das initiale Server-Setup durchgeführt haben, das hier diskutiert wird. Melden Sie sich als regulärer, nicht-Root-Benutzer auf Ihrem Server an und fahren Sie unten fort.Hinweis: Dieses Tutorial geht ausführlich auf die Privileg-Eskalation und die Datei sudoers ein. Wenn Sie nur einem Benutzer sudo-Rechte hinzufügen möchten, sehen Sie sich unsere Schnellstartanleitungen zum Erstellen eines neuen sudo-fähigen Benutzers für Ubuntu und CentOS an.

Hinweis: In diesem Tutorial wird tiefgründig auf die Themen Rechteerweiterung und die sudoers-Datei eingegangen. Wenn Sie nur sudo-Berechtigungen für einen Benutzer hinzufügen möchten, schauen Sie sich unsere Anleitung zum Erstellen eines neuen sudo-fähigen Benutzers in den Schnellstart-Tutorials für Ubuntu und CentOS an.

Wie man Root-Berechtigungen erhält

Es gibt drei grundlegende Möglichkeiten, root-Berechtigungen zu erhalten, die sich in ihrem Grad an Raffinesse unterscheiden.

Als Root einloggen

Die einfachste und direkteste Methode, root-Berechtigungen zu erhalten, besteht darin, sich direkt als root-Benutzer bei Ihrem Server anzumelden.

Wenn Sie sich bei einem lokalen Gerät anmelden (oder eine Konsole für virtuelle Server verwenden), geben Sie beim Anmeldebildschirm root als Benutzernamen ein und geben Sie das root-Passwort ein, wenn Sie dazu aufgefordert werden.

Wenn Sie über SSH einloggen, geben Sie den root Benutzer vor dem IP-Adresse oder dem Domainnamen in Ihrer SSH-Verbindungszeichenfolge an:

  1. ssh root@server_domain_or_ip

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

Mit su zum Root werden

Das direkte Einloggen als root wird in der Regel nicht empfohlen, da es leicht ist, das System für nicht-administrative Aufgaben zu verwenden, was gefährlich ist.

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

Wir können dies tun, indem wir den su Befehl aufrufen, der für „substitute user“ (Ersatzbenutzer) steht. Um root Rechte zu erhalten, geben Sie ein:

  1. su

Sie werden aufgefordert, das Passwort des root Benutzers einzugeben, nachdem Sie dies getan haben, werden Sie in einer root Shell-Sitzung landen.

Wenn Sie die Aufgaben abgeschlossen haben, die root Rechte erfordern, kehren Sie zu Ihrer normalen Shell zurück, indem Sie eingeben:

  1. exit

Mit sudo Befehle als Root ausführen

Die letzte Möglichkeit, Root-Berechtigungen zu erhalten, die wir diskutieren werden, ist mit dem sudo-Befehl.

Der sudo-Befehl ermöglicht es Ihnen, einzelne Befehle mit Root-Berechtigungen auszuführen, ohne eine neue Shell starten zu müssen. Es wird wie folgt ausgeführt:

  1. sudo command_to_execute

Im Gegensatz zu su fordert der sudo-Befehl das Passwort des aktuellen Benutzers und nicht das Root-Passwort.

Aufgrund seiner Sicherheitsaspekte wird sudo-Zugriff nicht standardmäßig Benutzern gewährt und muss vor der korrekten Funktion eingerichtet werden. Schauen Sie sich unsere Anleitung zum Erstellen eines neuen sudo-fähigen Benutzers für Ubuntu und CentOS an, um zu erfahren, wie Sie einen sudo-fähigen Benutzer einrichten können.

Im folgenden Abschnitt werden wir ausführlicher darüber diskutieren, wie die sudo-Konfiguration geändert wird.

Was ist Visudo?

Der sudo-Befehl wird über eine Datei konfiguriert, die sich unter /etc/sudoers befindet.

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

Da unsauberes Schreiben in der Datei /etc/sudoers zu einem fehlerhaften System führen kann, bei dem es unmöglich ist, erhöhte Privilegien zu erhalten, ist es wichtig, den visudo Befehl zum Bearbeiten der Datei zu verwenden.

Der visudo Befehl öffnet wie gewohnt einen Texteditor, aber er überprüft die Syntax der Datei beim Speichern. Dies verhindert Konfigurationsfehler, die sudo Operationen blockieren könnten, was möglicherweise der einzige Weg ist, um root Privilegien zu erhalten.

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

Wenn Sie es zurück zu vi ändern möchten, geben Sie den folgenden Befehl ein:

  1. sudo update-alternatives --config editor
Output
There 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 Nummer, die Ihrer Auswahl entspricht.

Auf CentOS können Sie diesen Wert ändern, indem Sie die folgende Zeile in Ihre ~/.bashrc einfügen:

  1. export EDITOR=`which name_of_editor`

Quellen Sie die Datei, um die Änderungen umzusetzen:

  1. . ~/.bashrc

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

  1. sudo visudo

So ändern Sie die Sudoers-Datei

Sie werden mit der Datei /etc/sudoers in Ihrem ausgewählten Texteditor konfrontiert.

I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers file has many more lines, some of which we will not discuss in this guide.

/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

Schauen wir uns an, was diese Zeilen tun.

Standardzeilen

Die erste Zeile, Defaults env_reset, setzt die Terminalumgebung zurück, um alle Benutzervariablen zu entfernen. Dies ist eine Sicherheitsmaßnahme, um möglicherweise schädliche Umgebungsvariablen aus der sudo-Sitzung zu entfernen.

Die zweite Zeile, Defaults mail_badpass, weist das System an, Benachrichtigungen über schlechte 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, legt den PATH (die Orte im Dateisystem, in denen das Betriebssystem Anwendungen sucht) fest, der für sudo-Operationen verwendet wird. Dies verhindert die Verwendung von Benutzerpfaden, die möglicherweise schädlich sind.

Benutzerrechtezeilen

Die vierte Zeile, die die root-Benutzerrechte für sudo festlegt, unterscheidet sich von den vorherigen Zeilen. Schauen wir uns an, was die verschiedenen Felder bedeuten:

  • root ALL=(ALL:ALL) ALL
    Das erste Feld gibt den Benutzernamen an, auf den die Regel angewendet wird (root).

  • root ALL=(ALL:ALL) ALL
    Das erste „ALL“ gibt an, dass diese Regel auf alle Hosts angewendet wird.

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

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

  • root ALL=(ALL:ALL) ALL
    Das letzte „ALL“ gibt an, dass diese Regeln auf alle Befehle angewendet werden.

Dies bedeutet, dass unser root Benutzer jede beliebige Befehle mit sudo ausführen kann, solange sie ihr Passwort angeben.

Gruppenberechtigungslinien

Die nächsten beiden Zeilen ähneln den Benutzerberechtigungslinien, aber sie legen sudo Regeln für Gruppen fest.

Namen, die mit einem % beginnen, bezeichnen Gruppennamen.

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

Eingeschlossene /etc/sudoers.d Zeile

Die letzte Zeile sieht auf den ersten Blick wie ein Kommentar aus:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

Sie tut mit einem # beginnen, was normalerweise ein Kommentar anzeigt. Diese Zeile gibt jedoch tatsächlich an, dass Dateien im /etc/sudoers.d Verzeichnis eingebunden und ebenfalls angewendet werden.

Dateien innerhalb dieses Verzeichnisses folgen den gleichen Regeln wie die /etc/sudoers Datei selbst. Jede Datei, die nicht auf ~ endet und in der kein . vorkommt, wird gelesen und an die sudo Konfiguration angehängt.

Dies bezieht sich hauptsächlich auf Anwendungen, die sudo-Berechtigungen bei der Installation ändern. Das Einbetten aller zugehörigen Regeln in eine einzige Datei im /etc/sudoers.d-Verzeichnis kann es erleichtern, zu sehen, welche Berechtigungen mit welchen Konten verbunden sind und Anmeldeinformationen leicht umzukehren, ohne direkt die /etc/sudoers-Datei manipulieren zu müssen.

Wie bei der /etc/sudoers-Datei selbst sollten Dateien innerhalb des /etc/sudoers.d-Verzeichnisses immer mit visudo bearbeitet werden. Die Syntax für das Bearbeiten dieser Dateien wäre:

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

So geben Sie einem Benutzer Sudo-Berechtigungen

Die häufigste Operation, die Benutzer bei der Verwaltung von sudo-Berechtigungen erreichen möchten, ist es, einem neuen Benutzer allgemeine sudo-Zugriff zu gewähren. Dies ist nützlich, wenn Sie einem Konto volle administrative Zugriff auf das System gewähren möchten.

Der einfachste Weg, dies auf einem System mit einer allgemeinen Verwaltungsgruppe, wie dem Ubuntu-System in dieser Anleitung, zu tun, besteht tatsächlich darin, den Benutzer, um den es geht, dieser Gruppe hinzuzufügen.

Zum Beispiel hat die sudo-Gruppe in Ubuntu 20.04 volle Admin-Berechtigungen. Wir können einem Benutzer dieselben Berechtigungen gewähren, indem wir sie dieser Gruppe hinzufügen:

  1. sudo usermod -aG sudo username

Der gpasswd-Befehl kann auch verwendet werden:

  1. sudo gpasswd -a username sudo

Diese beiden Methoden erreichen das gleiche Ziel.

Auf CentOS ist dies normalerweise die wheel Gruppe anstelle der sudo Gruppe:

  1. sudo usermod -aG wheel username

Oder mit gpasswd:

  1. sudo gpasswd -a username wheel

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

  1. sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

So richten Sie benutzerdefinierte Regeln ein

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

So erstellen Sie Aliase

Die sudoers Datei kann durch Gruppieren von Dingen mit verschiedenen Arten von “Aliases” leichter organisiert werden.

Zum Beispiel können wir drei verschiedene Benutzergruppen mit sich überschneidender 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 diese erstellen:

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

Wenn wir keinen Benutzer/eine Gruppe angeben, um als dieser/diese auszuführen, wie oben, wird sudo standardmäßig auf den root Benutzer gesetzt.

Wir können Mitgliedern von GROUPTHREE das Herunterfahren und Neustarten der Maschine erlauben, indem wir ein “Befehlsalias” erstellen und dieses 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 Befehlssynonym namens POWER, das Befehle zum Herunterfahren und Neustarten der Maschine enthält. Wir erlauben dann den Mitgliedern von GROUPTHREE die Ausführung dieser Befehle.

Wir können auch „Run as“-Aliasse erstellen, die den Teil der Regel ersetzen, der den Benutzer angibt, der den Befehl auszuführen hat:

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

Dies erlaubt jedem, der Mitglied von GROUPONE ist, Befehle als www-data-Benutzer oder apache-Benutzer auszuführen.

Denken Sie nur daran, dass spätere Regeln frühere Regeln überschreiben, wenn es einen Konflikt zwischen den beiden gibt.

So sperren Sie Regeln

Es gibt verschiedene Möglichkeiten, wie Sie mehr Kontrolle darüber erreichen können, wie sudo auf einen Anruf reagiert.

Der mit dem mlocate-Paket verknüpfte updatedb-Befehl ist auf einem Ein-Benutzer-System relativ harmlos. Wenn wir Benutzern erlauben möchten, diesen Befehl mit root-Rechten ohne Passworteingabe auszuführen, können wir eine Regel wie diese erstellen:

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

NOPASSWD ist ein „Tag“, das bedeutet, dass kein Passwort angefordert wird. Es gibt einen Begleitbefehl namens PASSWD, das ist das Standardverhalten. Ein Tag ist für den Rest der Regel relevant, es sei denn, es wird später durch sein „Zwilling“-Tag überschrieben.

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, das verwendet werden kann, um gefährliches Verhalten in bestimmten Programmen zu verhindern.

Zum Beispiel können einige Programme, wie less, andere Befehle starten, indem man dies von innerhalb ihrer Schnittstelle eingibt:

!command_to_run

Dies führt im Grunde jeden vom Benutzer gegebenen Befehl mit den gleichen Berechtigungen aus, unter denen less läuft, was ziemlich gefährlich sein kann.

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

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

Verschiedenes

Es gibt noch einige weitere Informationen, die nützlich sein könnten, wenn man mit sudo arbeitet.

Wenn Sie in der Konfigurationsdatei einen Benutzer oder eine Gruppe als „ausführen als“ angegeben haben, können Sie Befehle als diese Benutzer ausführen, indem Sie die -u und -g Flags verwenden, entsprechend:

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

Zur Bequemlichkeit speichert sudo standardmäßig Ihre Authentifizierungsdetails für eine bestimmte Zeitspanne in einem Terminal. Das bedeutet, dass Sie Ihr Passwort nicht erneut eingeben müssen, bis die Uhr abgelaufen ist.

Aus Sicherheitsgründen können Sie diese Uhr, wenn Sie mit dem Ausführen von administrativen Befehlen fertig sind, löschen:

  1. sudo -k

Wenn Sie andererseits „vorbereiten“ möchten, dass der sudo Befehl Sie später nicht nachfragen wird, oder um Ihre sudo Leasing zu erneuern, können Sie immer eingeben:

  1. sudo -v

Sie werden zur Eingabe Ihres Kennworts aufgefordert, das für nachfolgende sudo-Verwendungen zwischengespeichert wird, bis die sudo-Zeitspanne abläuft.

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

  1. sudo -l

Dies listet alle Regeln im /etc/sudoers Datei auf, die für Ihren Benutzer gelten. Dies gibt Ihnen einen guten Überblick darüber, was Sie mit sudo als Benutzer erlaubt ist oder nicht.

Es gibt viele Situationen, in denen Sie einen Befehl ausführen und er fehlschlägt, weil Sie ihn nicht mit sudo eingeleitet haben. Um nicht den Befehl erneut eingeben zu müssen, können Sie eine bash-Funktionalität nutzen, die „letzten Befehl wiederholen“ bedeutet:

  1. sudo !!

Das Doppel-Ausrufezeichen wiederholt den letzten Befehl. Wir haben es mit sudo vorangeleitet, um schnell den unberechtigten Befehl in einen befugten Befehl zu ändern.

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

  1. sudo visudo
/etc/sudoers
. . .
Defaults	insults
. . .

Dies bewirkt, dass sudo einen albernen Vorwurf zurückgibt, wenn ein Benutzer ein falsches Kennwort für sudo eingibt. Wir können sudo -k verwenden, um das zuvor zwischengespeicherte sudo Kennwort zu löschen, um es auszuprobieren:

  1. sudo -k
  2. 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.

Schlussfolgerung

Sie sollten nun ein grundlegendes Verständnis dafür haben, wie man die sudoers Datei liest und ändert, und ein Verständnis dafür, wie man verschiedene Methoden verwendet, um root Berechtigungen zu erhalten.

Denken Sie daran, dass Super-User-Rechte aus gutem Grund nicht regulären Benutzern gewährt werden. Es ist unerlässlich, dass Sie verstehen, was jeder Befehl tut, den Sie mit root -Rechten ausführen. Nehmen Sie diese Verantwortung nicht leichtfertig. Informieren Sie sich über die besten Methoden zur Verwendung dieser Tools für Ihren Anwendungsfall und sperren Sie alle Funktionalitäten, die nicht benötigt werden.

Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file