Einführung
Fragen Sie sich manchmal, warum Sie „sudo“ eingeben müssen, wenn Sie versuchen, bestimmte Befehle in einer Linux- oder Unix-Betriebssystemumgebung auszuführen? Sudo ist eigentlich eine Abkürzung und steht für „super-user do“. Wenn Sie den sudo-Befehl verwenden, können Sie Programme ausführen und Befehle mit den Sicherheitsberechtigungen eines anderen Benutzers ausführen.
Standardmäßig erlaubt der sudo-Befehl Systembenutzern, Befehle mit den Rechten des Super-Users auszuführen. Eine Neuinstallation eines Linux/Unix-Betriebssystems erstellt ein Root-Konto, das über Super-User-Rechte verfügt. Bei der Ersteinrichtung eines Linux/Unix-Systems melden sich Systemadministratoren mit dem Root-Konto an und weisen anderen Systembenutzern Systemrechte zu. Diese Einstellungen werden in einer Datei namens sudoers gespeichert. Ein Konto mit Root-Rechten kann die sudoers-Datei bearbeiten und die Rechte anderer Benutzer ändern.
In diesem Tutorial besprechen wir, wie Sie Root-Rechte erhalten und Änderungen an der sudoers-Datei vornehmen können.
Voraussetzungen
Dies ist ein praktisches Tutorial, und Sie müssen die Befehle ausprobieren, um das Tutorial vollständig zu verstehen. Wir werden in diesem Tutorial einen Ubuntu 20.04-Server verwenden, Sie können den Schritten jedoch auch folgen, wenn Sie eine der modernen Linux-Distributionen wie Debian und CentOS verwenden. Sie können diesem Link folgen, um Ihren eigenen Ubuntu-Cloud-Server auf CloudSigma einzurichten.
Root-Rechte erlangen
Sie können Root-Rechte auf drei Arten erhalten, die wir im Folgenden besprechen werden:
Als Root anmelden
Die einfachste Methode, die die meisten Menschen verwenden, um Root-Rechte zu erhalten, besteht darin, sich mit den Anmeldedaten des Root-Benutzers an einem System anzumelden. Wenn Sie auf Ihren lokalen Computer zugreifen, können Sie einfach einen Benutzernamen eingeben und werden nach einem Passwort gefragt.
Eine andere Methode, mit der Sie sich als Root anmelden können, ist die Verwendung von SSH – einem Befehlszeilentool zum Anmelden und Ausführen von Aufgaben auf einem Server. Es erfordert einen Benutzernamen und die IP-Adresse Ihres Servers. Die Syntax für die Anmeldung als Root lautet wie folgt, ersetzen Sie die IP-Adresse Ihres Servers:
|
1 |
ssh root@your_server_ip_or_domain_name |
Wenn Sie den obigen Befehl in Ihr Terminal eingeben, werden Sie entweder aufgefordert, Ihr Passwort einzugeben, wenn Sie die SSH-Schlüssel nicht eingerichtet haben, oder Sie werden aufgefordert, die Passphrase für Ihren SSH-Schlüssel einzugeben, wenn Sie diese eingerichtet haben. Sobald Sie die korrekten Anmeldedaten eingegeben haben, werden Sie angemeldet. Folgen Sie dieser Anleitung für eine Schritt-für-Schritt-Anleitung zur Verwendung von SSH zur Verbindung mit einem Remote-Server in Ubuntu.
Verwendung von su, um Root zu werden
Sie können sich mit jedem anderen Konto, das nicht Root ist, bei einem Linux-System anmelden, was normalerweise der empfohlene Weg bei der Durchführung nicht-administrativer Aufgaben ist. Wann immer Sie Root-Rechte erhalten möchten, können Sie einfach su in Ihr Terminal eingeben:
|
1 |
su |
Das System fragt Sie nach dem Root-Passwort, woraufhin Sie Zugriff auf eine Root-Shell-Sitzung erhalten. Während dieser Shell-Sitzung können Sie alle administrativen Aufgaben ausführen, und wann immer Sie zur normalen Shell zurückkehren möchten, drücken Sie einfach Strg + D. Optional können Sie exit in das Terminal eingeben und die Eingabetaste drücken.
Verwendung von sudo zur Ausführung von Befehlen mit Root-Rechten
Der sudo-Befehl, der zu Beginn dieses Tutorials kurz vorgestellt wurde, ermöglicht es Ihnen, einzeilige Befehle auszuführen, ohne dass eine Shell mit Root-Rechten erforderlich ist. Sie geben einfach sudo gefolgt von dem auszuführenden Befehl ein:
|
1 |
sudo execute_this_command |
Um beispielsweise Ihr System zu aktualisieren, können Sie Folgendes eingeben:
|
1 |
sudo apt-get update |
Sie werden nach einem Passwort gefragt. Der Unterschied zwischen dem Befehl su und dem Befehl sudo besteht darin, dass su nach dem Root-Passwort fragt, während sudo nach dem Passwort des aktuellen Benutzers fragt. Der Sudo-Zugriff wird Benutzern standardmäßig nicht gewährt, da er erhebliche Sicherheitsauswirkungen auf das System hat. Wir werden in den folgenden Abschnitten näher darauf eingehen.
Verwendung von Visudo zur Bearbeitung der sudoers-Datei
Sudo-Rechte werden in der sudoers-Datei konfiguriert, die sich unter /etc/sudoers befindet.. Diese Privilegien sind für jeden Benutzer erforderlich, um Zugriff auf das Linux-System zu erhalten. Jeder Syntaxfehler verhindert, dass sich Benutzer am System anmelden können, wodurch das System unbrauchbar wird.
Visudo-Befehl öffnet die Datei mit einem speziellen Editor, der beim Speichern die Syntax der Datei überprüft. Es ist daher wichtig, dass Sie nur den visudo-Befehl verwenden, um die Datei zu öffnen, um zu verhindern, dass Sie Ihr Serversystem unbrauchbar machen. Standardmäßig war visudo so eingestellt, dass der Texteditor mit (vi) vim geöffnet wird. Ubuntu hat visudo jedoch so konfiguriert, dass der Texteditor nano verwendet wird. Unter Debian oder Ubuntu können Sie zu einem anderen Editor wechseln, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo update-alternatives --config editor |
Es wird eine Liste von Editoren angezeigt, aus der Sie einen Standard-Editor auswählen können, wie im Screenshot gezeigt. Wählen Sie die Nummer vor dem von Ihnen bevorzugten Editor:

Auf einer CentOS-Linux-Distribution bearbeiten Sie /etc/sudoers und fügen die folgenden Zeilen hinzu:
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Geben Sie den folgenden Befehl ein. Denken Sie daran, den Namen von your_editor_of_choice zu ersetzen:
|
1 |
export EDITOR=`which your_editor_of_choice` |
Der Befehl fügt die Zeile zur Datei ~/.bashrc hinzu. Geben Sie Folgendes in Ihrem Terminal ein, um die Änderungen zu übernehmen:
|
1 |
. ~/.bashrc |
Da Ihr visudo nun konfiguriert ist, können Sie die Datei unter /etc/sudoers öffnen, indem Sie folgenden Befehl eingeben:
|
1 |
sudo visudo |
Bearbeiten der Sudoers-Datei
Wenn Sie den vorherigen Befehl ausführen, öffnet sich die Datei in Ihrem primären Editor, wie Sie ihn konfiguriert haben. Unten sehen Sie den Inhalt der Datei:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Diese Datei MUSS mit dem Befehl 'visudo' als root bearbeitet werden. # # Bitte erwägen Sie, lokalen Inhalt in /etc/sudoers.d/ hinzuzufügen, anstatt # diese Datei direkt zu ändern. # # Siehe die Manpage für Details zum Schreiben einer Sudoers-Datei. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host-Alias-Spezifikation # Benutzer-Alias-Spezifikation # Befehls-Alias-Spezifikation # Benutzer-Privilegien-Spezifikation root ALL=(ALL:ALL) ALL # Mitglieder der admin-Gruppe können Root-Rechte erhalten %admin ALL=(ALL) NOPASSWD:ALL # Erlaube Mitgliedern der Gruppe sudo, jeden Befehl auszuführen %sudo ALL=(ALL) NOPASSWD:ALL # Siehe sudoers(5) für weitere Informationen zu "#include"-Direktiven: #includedir /etc/sudoers.d |
Die Kommentare sind ziemlich aussagekräftig, aber wir werden im Folgenden besprechen, was die Zeilen bedeuten.
Standardzeilen
- Defaults env_reset – Setzt die Umgebungsvariablen des Terminals zurück, um alle Benutzervariablen zu entfernen. Dadurch werden potenziell schädliche Variablen aus einer Sudo-Sitzung gelöscht.
- Defaults mail_badpass – Weist das System an, Benachrichtigungen über fehlgeschlagene Sudo-Passwortversuche per E-Mail an den konfigurierten mailto-Benutzer zu senden, normalerweise das Root-Konto.
- Defaults secure_path – Enthält die verschiedenen Pfade im Dateisystem, in denen eine Sudo-Operation nach Anwendungen sucht, die bei der Ausführung verwendet werden sollen, um die Verwendung anderer benutzerdefinierter Pfade zu verhindern, die für das System gefährlich sein könnten.
Zeilen zur Spezifikation von Benutzerprivilegien
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – Das erste Feld gibt den Benutzernamen an, für den die Regel gilt. In diesem Fall ist es der root Benutzer.
- root ALL=(ALL:ALL) ALL – Das erste ALL gibt an, dass die Regel für alle Hosts gilt.
- root ALL=(ALL:ALL) ALL – Das zweite ALL gibt an, dass der Benutzer, für den diese Regel gilt (d. h. root) Befehle als alle Benutzer ausführen kann.
- root ALL=(ALL:ALL) ALL – Das dritte ALL gibt an, dass der Benutzer, für den diese Regel gilt (d. h. root) Befehle als alle Gruppen ausführen kann.
- root ALL=(ALL:ALL) ALL – Das letzte ALL gibt an, dass diese Regeln für alle Befehle gelten.
Wie diese Regel zeigt, kann ein Root-Benutzer jeden Befehl mit sudo ausführen, sobald er das richtige Passwort eingibt.
Zeilen zur Spezifikation von Gruppenprivilegien
Diese Zeilen legen die Sudo-Privilegienregeln fest, die für Gruppen gelten. Die Felder weisen auf dieselben Aktionen hin wie die Zeilen für Benutzerprivilegien, mit einem kleinen Unterschied. Sie beginnen mit einem %, um Gruppennamen anzuzeigen.
Wie Sie sehen können, kann die admin-Gruppe jeden Befehl als beliebiger Benutzer auf jedem Host ausführen. Die sudo-Gruppe hat dieselben Privilegien mit dem zusätzlichen Privileg, Befehle als beliebige Gruppe auszuführen.
Zeile zum Einbinden von /etc/sudoers.d
Die Zeile #includedir /etc/sudoers.d mag aufgrund des # am Anfang der Zeile wie ein Kommentar aussehen. Dies ist jedoch eine Include-Direktive, die angibt, dass die Dateien im Verzeichnis /etc/sudoers.d eingelesen und als Teil der sudoers-Datei verwendet werden sollen. Dateien in diesem Verzeichnis folgen denselben Regeln wie die sudoers-Datei.
Jede Datei in dem Verzeichnis, die keinen Punkt (.) enthält und nicht auf ~ endet, wird gelesen und an die Konfiguration der sudoers-Datei angehängt. Das Verzeichnis ermöglicht es Anwendungen, Sudo-Privilegien bei der Installation zu ändern, indem sie alle zugehörigen Regeln in einer einzigen dedizierten Datei im Verzeichnis /etc/sudoers.d ablegen, ohne die Standard-sudoers-Datei zu ändern. Wenn Sie außerdem die Privilegien für eine Anwendung überprüfen oder rückgängig machen möchten, können Sie die Dateien im Verzeichnis /etc/sudoers.d einfach überprüfen oder ändern, ohne die Datei /etc/sudoers direkt zu bearbeiten.
Als Faustregel gilt, dass alle Dateien im Verzeichnis /etc/sudoers.d immer mit dem Befehl visudo bearbeitet werden sollten. Unten finden Sie die Syntax. Denken Sie daran, den Namen der Datei, die Sie bearbeiten möchten, im Befehl zu ersetzen:
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Zuweisen von Sudo-Privilegien an einen Benutzer
Wenn Sie einem neuen Benutzer allgemeinen Sudo-Zugriff gewähren, bedeutet dies, dass Sie dem Benutzerkonto vollen administrativen Zugriff auf das System gegeben haben. Dies ist eine häufige Aufgabe, die Systemadministratoren ausführen, wenn sie andere Nicht-Root-Benutzer mit Sudo-Privilegien erstellen.
In Systemen wie Ubuntu 20.04, die bereits über die allgemeine Administrationsgruppe verfügen, können wir einem Benutzer ganz einfach Sudo-Privilegien zuweisen, indem wir den Benutzer zu dieser Gruppe hinzufügen. Die Sudo-Gruppe, wie sie in der Datei /etc/sudoers definiert ist, verfügt über volle administrative Privilegien, und wir können der Gruppe einen Benutzernamen hinzufügen, indem wir den folgenden Befehl eingeben:
|
1 |
sudo usermod -aG sudo username |
Optional können Sie den Befehl gpasswd verwenden, um dasselbe zu erreichen:
|
1 |
sudo gpasswd -a username sudo |
Unter CentOS, heißt die Standardgruppe mit Sudo-Privilegien wheel, sodass Sie die Privilegien mit dem folgenden Befehl zuweisen können:
|
1 |
sudo usermod -aG wheel username |
Optional können Sie mit dem Befehl gpasswd dasselbe mit folgendem Befehl erreichen:
|
1 |
sudo gpasswd -a username wheel |
In einigen Fällen wird die wheel Gruppe unter CentOS ist möglicherweise in der Datei /etc/sudoers auskommentiert. Um sie zu aktivieren, öffnen Sie die Datei mit visudo und entfernen Sie das Auskommentierungszeichen vor der Zeile mit dem Gruppennamen. Sie können dies tun, indem Sie das # am Anfang der Zeile entfernen: %wheel ALL=(ALL) ALL.
Eigene Regeln erstellen
Mit dem Wissen über die allgemeine Syntax der Sudoers, das Sie bis zu diesem Zeitpunkt erworben haben, ist es an der Zeit, einige Regeln einzurichten.
Aliase erstellen
Aliase ermöglichen es Ihnen, Ihre Sudoers-Datei zu organisieren, indem Sie Elemente unter verschiedenen „Aliasen“ gruppieren. Wir haben drei Direktiven, die wir in diesem Abschnitt besprechen werden: User_Alias zum Erstellen von Benutzer-/Gruppen-Aliasen, Cmnd_Alias zum Erstellen von Befehls-Aliasen und Runas_Alias um einem anderen Benutzer zu erlauben, als ein anderer Benutzer ausgeführt zu werden.
Beispielsweise können Sie unter Verwendung von User_Alias, in Ihrer /etc/sudoers-Datei das folgende Snippet hinzufügen, um drei verschiedene Benutzergruppen zu erstellen. Einige Benutzer können mehr als einer Gruppe angehören:
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Beachten Sie, dass alle Gruppennamen mit einem Großbuchstaben beginnen. Wenn die oben genannten Gruppen-Aliase in der Datei /etc/sudoers hinzugefügt wurden, können Sie ein Privileg zur Aktualisierung der apt-Datenbank an GROUPTWO vergeben, indem Sie die folgende Regel in der Datei /etc/sudoers hinzufügen:
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Beachten Sie, dass ohne Angabe des Benutzers/der Gruppe, als die der Befehl ausgeführt werden soll, der Befehl sudo standardmäßig immer als Benutzer root ausgeführt wird.
Hier ist ein Beispiel für Cmnd_Alias, bei dem wir einen Befehls-Alias zum Herunterfahren und Neustarten des Systems erstellen. Die Regel wird dann GROUPTHREE zugewiesen. Dies wird durch Hinzufügen der folgenden Zeilen in der Datei /etc/sudoers erreicht:
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
Im obigen Snippet erstellt die erste Zeile einen Befehls-Alias namens POWER, der Befehle zum Ausschalten und Neustarten enthält. Die zweite Zeile erlaubt es Mitgliedern von GROUPTHREE, diesen Befehl auszuführen.
Hier ist ein Beispiel für den Runas_Alias, bei dem wir einen Alias erstellen, der es einer Gruppe von Benutzern ermöglicht, als ein anderer Benutzer ausgeführt zu werden:
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
Im obigen Snippet erstellt die erste Zeile einen Alias namens WEB, und legt fest, dass der Alias als Benutzer apache oder als Benutzer www-data ausgeführt wird. Die zweite Zeile weist den Alias GROUPONE zu. Jetzt können Mitglieder der ersten Gruppe Befehle entweder als Benutzer apache oder www-data ausführen.
Regeln zur Absicherung
In diesem Abschnitt erfahren Sie, wie Sie auf verschiedene Weise steuern können, wie sudo auf einen Aufruf reagiert. Einige Befehle sind auf Einzelsystemen relativ harmlos. In solchen Fällen können Sie Benutzern erlauben, sie mit root-Privilegien auszuführen, ohne das root-Passwort eingeben zu müssen. Sie können beispielsweise eine Regel erstellen, die es Benutzern in GROUPONE erlaubt, den Befehl updatedb ohne Passworteingabe auszuführen, indem Sie Folgendes in der Datei /etc/sudoers hinzufügen:
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
Das Tag NOPASSWD bedeutet, dass kein Passwort angefordert wird. Das Gegenstück zum Tag NOPASSWD ist PASSWD, was dem Standardverhalten entspricht. Dies bedeutet, dass bei der Eingabeaufforderung ein Passwort eingegeben werden muss.
Ein Tag gilt für eine Regel, es sei denn, es wird durch sein Gegenstück außer Kraft gesetzt, zum Beispiel:
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
In dieser Regel können Benutzer in GROUPTWO den Befehl updatedb -Befehl ohne Eingabe eines Passworts ausführen. Sie müssen jedoch ein Passwort angeben, bevor sie den kill-Befehl ausführen.
In einigen Fällen möchten Sie Benutzer möglicherweise daran hindern, bestimmte Befehle auszuführen, um gefährliche Ausführungen zu verhindern. Hier kommt das NOEXEC-Tag ins Spiel. Einige Programme können andere Befehle aus ihrer Benutzeroberfläche heraus ausführen. Ein Beispiel für ein solches Programm ist less. Wenn Sie einen Befehl mit der folgenden Syntax innerhalb der less-Benutzeroberfläche eingeben, wird er ausgeführt, was zu unerwartetem Verhalten führen kann.
|
1 |
!name_of_command_to_run |
Um ein solches Verhalten zu verhindern, können Sie der Datei /etc/sudoers die folgende Regel hinzufügen, um einen bestimmten Benutzer zu beschränken, der identifiziert wird mit username:
|
1 |
username ALL = NOEXEC: /usr/bin/less |
Zusätzliche Informationen
In diesem Abschnitt finden Sie einige zusätzliche Informationen, Richtlinien und Befehle, die Sie bei der Arbeit mit sudo als nützlich erachten könnten.
Wenn Sie den Runas_Alias in der Konfiguration verwendet haben, der angibt, dass ein Benutzer oder eine Gruppe als ein anderer Benutzer ausgeführt werden kann, können Sie Befehle als diese Benutzer ausführen, indem Sie das Flag -u für den Benutzer und das Flag -g für Gruppen verwenden. Hier ist die Syntax:
|
1 2 |
sudo -u run_as_user command sudo -g run_as_group command |
Jeder der Befehle fordert Sie auf, das zugehörige Passwort einzugeben. Aus Bequemlichkeitsgründen speichert sudo das Passwort für einige Zeit, sodass Sie es nicht jedes Mal neu eingeben müssen, wenn Sie einen Befehl mit sudo ausführen. Sie können diese Zeitspanne löschen, sobald Sie mit den sudo-privilegierten Befehlen fertig sind, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo -k |
Falls Sie weitere Aufgaben mit sudo-Privilegien ausführen müssen und die Zeit bis zur Passwortabfrage verlängern möchten oder verhindern wollen, dass der sudo-Befehl später nach einem Passwort fragt, können Sie die Zeit durch Eingabe des folgenden Befehls verlängern:
|
1 |
sudo -v |
Der Befehl fordert Sie zur Eingabe eines Passworts auf und speichert es für spätere sudo-Verwendungen im Cache.
Um die für Ihren Namen definierten sudo-Privilegien aufzulisten, können Sie den folgenden Befehl eingeben:
|
1 |
sudo -l |
Der Befehl listet alle in der Datei /etc/sudoers konfigurierten Regeln auf, die für Ihren Benutzernamen gelten. Anhand der Regeln können Sie sich ein Bild davon machen, welche Aufgaben Ihr Benutzername auf dem System ausführen kann. Hier ist ein Beispiel-Screenshot:

In einigen Fällen führen Sie Befehle aus, die fehlschlagen, weil Sie vergessen haben, sudo voranzustellen. In solchen Szenarien müssen Sie den Befehl möglicherweise beginnend mit sudo neu eingeben. Um die Neueingabe des Befehls zu vermeiden, können Sie die Bash-Funktionalität zum „Wiederholen des letzten Befehls“ nutzen. Die Syntax besteht aus zwei Ausrufezeichen. Sie können den letzten Befehl, den Sie in Ihrem Terminal ausgeführt haben, ausführen, indem Sie Folgendes eingeben:
|
1 |
sudo !! |
Schließlich ist es wichtig zu wissen, dass sudo den auszuführenden Befehl lediglich mit sudo-Privilegien ausstattet. Für weitere Informationen können Sie den Anweisungen auf diesem Link folgen, um etwas Spaß mit Ihren Benutzern zu haben.
Fazit
Wenn Sie mit mehreren Benutzern arbeiten, ist es entscheidend, sich mit dem sudo-Befehl und der sudoers-Datei auszukennen. In diesem Tutorial haben wir die Grundlagen des Lesens und Änderns der sudoers-Datei sowie die verschiedenen Methoden vorgestellt, mit denen Sie Root-Rechte erlangen können.
Denken Sie immer daran, dass die Trennung von Privilegien Linux-Systeme sicher macht. Daher sollten normalen Benutzern keine Superuser-Rechte gewährt werden. Weisen Sie nur Privilegien zu, die für einen bestimmten Benutzer absolut notwendig sind, um seine spezifischen Aufgaben im System auszuführen, und nicht alle Privilegien.
Viel Spaß beim Computing!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.