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.
Es gibt drei grundlegende Möglichkeiten, um root-Berechtigungen zu erhalten, die sich in ihrem Entwicklungsstand unterscheiden.
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:
- 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.
su
, um ein root-Benutzer zu werdenDie 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
sudo
, um Befehle als root-Benutzer auszuführenDer 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.
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
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.
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.
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.
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.
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.
Die letzte Zeile könnte auf den ersten Blick wie ein Kommentar aussehen:
. . .
#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
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
. . .
%wheel ALL=(ALL) ALL
. . .
Nachdem wir uns mit der allgemeinen Syntax der Datei vertraut gemacht haben, erstellen wir einige neue Regeln.
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:
. . .
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:
. . .
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:
. . .
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:
. . .
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.
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:
. . .
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:
. . .
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:
. . .
username ALL = NOEXEC: /usr/bin/less
. . .
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
. . .
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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!