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.sudoers
ein. Wenn Sie nur einem Benutzer sudo
-Rechte hinzufügen möchten, sehen Sie sich unsere Schnellstartanleitungen zum
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:
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:
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:
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:
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:
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 Nummer, die Ihrer Auswahl entspricht.
Auf CentOS können Sie diesen Wert ändern, indem Sie die folgende Zeile in Ihre ~/.bashrc
einfügen:
Quellen Sie die Datei, um die Änderungen umzusetzen:
Nachdem Sie visudo
konfiguriert haben, führen Sie den Befehl aus, um auf die Datei /etc/sudoers
zuzugreifen:
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.
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:
. . .
#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:
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:
Der gpasswd
-Befehl kann auch verwendet werden:
Diese beiden Methoden erreichen das gleiche Ziel.
Auf CentOS ist dies normalerweise die wheel
Gruppe anstelle der sudo
Gruppe:
Oder mit gpasswd
:
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:
. . .
%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:
. . .
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:
. . .
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:
. . .
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:
. . .
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:
. . .
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:
. . .
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:
. . .
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:
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:
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:
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:
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:
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:
. . .
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:
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