sudo
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Hinweis:
Im Wikiartikel mit Root-Rechten arbeiten werden alle Wege, die es außer sudo
gibt, um mit Root-Rechten zu arbeiten, aufgeführt.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
xkcd.com 🇬🇧 (CC-BY-NC) |
⚓︎
Der Befehl sudo
erlaubt es primär, zum Benutzer root
zu werden und damit Rootrechte zu erhalten.
Genau gesagt ermöglicht er berechtigten Benutzern, einen Befehl bzw. ein Programm im Namen und mit den Rechten von root
oder eines anderen Benutzers auszuführen.
Beispielsweise um Aufgaben auszuführen, die eigentlich Administratoren vorbehalten sind:
Programme installieren (
sudo apt-get install ...
)Systemkonfigurationen ändern (
sudo nano /etc/fstab
)
Der Befehl sudo
muss dafür Programmaufrufen vorangestellt werden:
sudo PROGRAMM
sudo
fragt vor der Ausführung des Programms unter eines anderen Benutzers, z.B. root
, nach dem Passwort des aufrufenden Benutzers. Mit der frischen Authentifizierung wird sicherheitshalber überprüft, ob auch wirklich dieser Nutzer selber den Befehl eingegeben hat.
Ohne konkrete Angabe (-u Benutzer
) wird standardmäßig der Ziel-Benutzer root
angenommen.
sudo
arbeitet konfigurationsbasiert. Siehe sudo/Konfiguration. Der Kreis der berechtigten Benutzer und andere Regeln und Optionen sind grundsätzlich in der Datei /etc/sudoers festgelegt. In der Ubuntu-Konfiguration sind neben dem Benutzer root
selber standardmäßig nur Mitglieder der Gruppe [2] sudo
berechtigt, den Befehl sudo
zu nutzen. Der oder die bei der Installation angelegten Benutzer gehören standardmäßig der Gruppe sudo
an.
Achtung!
Erweiterte Rechte mittels der hier beschriebenen Verfahren bitte nur dann verwenden, wenn eine Aufgabe es wirklich erfordert. Z.B. wenn eine Programmausführung mit root-Rechten erfolgen muss.
Änderungen an Systemdateien sollte man mit Bedacht vornehmen und vorher eine Sicherungskopie anlegen.
Eine falsche oder unnötige Verwendung von sudo kann das System unbrauchbar machen.
⚓︎
In Desktopumgebungen wie GNOME und KDE werden Aufgaben mit erforderlichen Rootrechten für einige Programme durch eigene Mechanismen angefordert. So wird man z.B. für eine Programminstallation automatisch per Popup nach seinem Passwort gefragt, damit APT Rootrechte erhält und Programme installieren kann.
sudo
spielt in der grafischen Oberfläche eher nur in Terminals eine Rolle und brauch in vielen Fällen nicht mehr manuell aufgerufen zu werden.
Installation¶
sudo ist essentieller Bestandteil jeder Ubuntu-Installation und sollte auf gar keinen Fall entfernt werden. Es ist im gleichnamigen Paket
sudo
enthalten.
Root-Rechte im Terminal¶
Sind für einen Terminal-Befehl Root-Rechte erforderlich, so reicht es, dem auszuführenden Befehl das Kommando sudo
voranzustellen. Nach der Eingabe wird man je nach Konfiguration erneut nach seinem Passwort gefragt. Dieses ist wie bei den meisten Linux-Programmen "blind" einzugeben. Es erscheinen aus Sicherheitsgründen keine Sternchen oder Ähnliches auf dem Bildschirm, sondern einfach gar nichts. Dieses Verhalten kann allerdings geändert werden: Siehe Visuelles Feedback.
Beispiel:
Benutzer@Desktop:~$ sudo blkid [sudo] password for Benutzer: /dev/sda1: UUID="8688C7BE88C7AACF" LABEL="WinSystem" TYPE="ntfs" /dev/sda5: LABEL="DATEN" UUID="08A8-7B2C" TYPE="vfat" [...]
Nach dem Eingeben des Passworts ist dies für die nächsten 15 Minuten bei erneuter Verwendung von sudo
in diesem Terminal nicht mehr notwendig (kann ebenfalls angepasst werden, siehe Administrator auf Zeit). Die erneute Eingabe des Passwortes kann aber auch vorzeitig durch Angabe der Option -k
erzwungen werden. Beispiel:
Benutzer@Desktop:~$ sudo mkdir /media/test [sudo] password for Benutzer: #Passwort erforderlich Benutzer@Desktop:~$ sudo mkdir /media/test2 #Passwort nicht mehr erforderlich Benutzer@Desktop:~$ sudo rmdir /media/test2 #Passwort nicht mehr erforderlich Benutzer@Desktop:~$ sudo -k Benutzer@Desktop:~$ sudo rmdir /media/test [sudo] password for Benutzer: #Passwort erforderlich, selbst vor Ablauf der 15 Minuten
Diese Art der Verwendung bietet einige Vorteile: Rootrechte werden nur für die Dauer des jeweiligen Befehls angefordert. Bei mehreren Befehlen kann individuell festgelegt werden, welche davon mit erweiterten Rechten ablaufen.
Rootshell¶
Für größere administrative Aufgaben kann das ständige Voranstellen von sudo
auch hinderlich sein. Um länger als root
zu arbeiten - sprich mehrere Befehle hintereinander ausführen zu können, ohne immer wieder sudo
eingeben zu müssen - kann man in eine neue Shell wechseln, die direkt als root läuft. Nach der Eingabe [3] von:
sudo -i
werden alle folgenden Befehle mit Rootrechten ausgeführt, bis man diese Rootshell mit Strg + D oder per Befehl
exit
wieder beendet.
Achtung!
Die Dauer der Rootshell ist nicht beschränkt. Es liegt in der Verantwortung des Anwenders, diese wieder zu beenden. Fremde können an Ihrer Tastatur ganz ohne Passwort-Eingaben das System gefährden oder gar manipulieren.
Beispiel einer Rootshell:
Benutzer@Desktop:~$ sudo -i [sudo] password for Benutzer: root@Desktop:~# mkdir /media/test root@Desktop:~# rmdir /media/test root@Desktop:~# exit Abgemeldet Benutzer@Desktop:~$
Die aktive Rootshell kann man deutlich am veränderten Prompt "root@Desktop:~#
" erkennen. Abschließend signalisiert das normale Prompt das Ende der Rootshell.
Editieren von Dateien unter Sudo-Rechten (sudoedit)¶
Die Ausführung eines Texteditors erfordert prinzipiell keine root-Rechte. Lediglich das Lesen und/oder Schreiben der Dateien kann erweiterte Rechte benötigen. Ein besseres Sicherheitskonzept bietet daher sudoedit
oder sudo -e
.
Zum Bearbeiten fremder Textdateien, z.B. Konfigurationen des Systems oder Dateien im Verzeichnis anderer Benutzer startet sudoedit
den voreingestellten Editor weiterhin mit den Rechten und der Konfiguration des aktuellen Nutzers.
Es wird grundsätzlich immer eine temporäre Kopie der Datei angelegt und zur Bearbeitung im Editor geöffnet.
Erst nach dem Speichern wird mittels der root-Rechte am eigentlichen Pfad gespeichert und zuletzt die temporäre Datei entfernt.
Für die Anwendung dieses zunächst kompliziert erscheinenden Verfahrens sprechen neben der verbesserten Sicherheit auch diese Gründe:
Es ist dank
sudoedit
trivial anzuwenden.Es vermeidet das versehentliche Ändern der Datei-Attribute, wie Besitzer und Gruppe, was zu Problemen oder gar Sicherheitsproblemen führen kann.
Es kann auch gefahrlos ein GUI-Editor verwendet werden, weil der aufgerufene Editor keine Rootrechte beansprucht. Damit ist
sudoedit
ebenso sicher wie das oft verwendetesudo nano
.Durch entsprechende Einträge in der Datei /etc/sudoers können die Zugriffsrechte von einem Administrator genauer reguliert werden. So kann ein Nutzer einzelne Dateien im Rootverzeichnis bearbeiten, auch ohne Rootrechte erhalten zu müssen.
Anwendung¶
Die folgende drei Aufrufe bewirken dasselbe:
sudo -e DATEI sudo --edit DATEI sudoedit DATEI
Hinweis:
Die Option -e
ist von der Option -E
zu unterscheiden. Mit der Option -E
wird der angegebene Befehl unter Beibehaltung aller aktuellen Umgebungsvariablen ausgeführt.
Auswahl des Editors¶
Bei der Auswahl des Editors wertet sudoedit
die Umgebungsvariablen SUDO_EDITOR
, VISUAL
oder EDITOR
der Reihe nach aus. Sollte keine dieser Variablen deklariert sein, wird auf die Konfigurationsdatei /etc/sudoers zurückgegriffen. Ist auch dort kein Editor definiert, wird /usr/bin/editor aufgerufen, also bei Ubuntu standardmässig Nano.
Da der Editor mit den normalen Nutzerrechten gestartet wird, kann auch problemlos ein graphischer Editor verwendet werden. Bei graphischen Editoren empfiehlt es sich, die Umgebungsvariable VISUAL
mit dem gewünschten Editor zu belegen, zum Beispiel mit Mousepad:
VISUAL=mousepad sudoedit DATEI
Möchte man immer den gleichen Editor verwenden, kann man die Umgebungsvariable auch dauerhaft setzen oder sich einen Alias anlegen.
Einen Alias zur Verwendung in der Shell Bash definiert man in der Datei ~/.bash_aliases im eigenen Benutzerverzeichnis, die man möglicherweise erst selbst anlegen muss. Für den Einsatz z.B. des Editors gedit zusammen mit sudoedit
kann man in dieser Datei eine solche Zeile hinzufügen:
alias rootedit='SUDO_EDITOR=gedit sudo -e '
Einschränkungen (ab Ubuntu 16.04)¶
Ist die angegebene Datei ein symbolischer Link, so kann die Datei aus Sicherheitsgründen nicht bearbeitet werden. Außerdem ist es nicht möglich eine Datei zu bearbeiten, wenn man als normaler Nutzer Schreibrechte im Verzeichnis hat, in dem sich die Datei befindet. Aber da man im Verzeichnis Schreibrechte hat, kann man die Datei auch (spätestens nach Löschen und erneuter Anlage) ganz normal bearbeiten.
Programme im Kontext anderer Benutzer ausführen¶
Programme können auch über einen anderen Benutzer anstelle von root
gestartet werden, sofern man es sudo
auch mitteilt:
sudo -u BENUTZERNAME PROGRAMM
Terminalprogramme und Shellkommandos¶
Im Terminal kann ein Benutzerwechsel z.B. nützlich sein, um ein Skript in einer anderen Umgebung zu testen.
Sehr aufschlussreich kann es sein, wenn man Probleme mit Zugriffsrechten bei einem Webserver, PHP oder ähnlich hat. Aus Sicht des Webservers startet man einfach eine Shell über den Benutzer www-data
, um die Zugriffe auf Dateien und Verzeichnisse manuell testen zu können.
Terminal - Ausführung durch Benutzer mit Erlaubnis in /etc/sudoers¶
sudo
fragt nach dem Passwort des aufrufenden Benutzers und nicht nach dem vom gewünschten Benutzer.
Die Option -H
bewirkt, dass dann auch die Umgebungsvariable $HOME auf das Home-Verzeichnis von BENUTZERNAME
mit umzieht, jedoch das aktuelle Arbeitsverzeichnis beibehalten wird. Dies beseitigt einige, aber nicht Probleme beim Starten von grafischen Programme mit Root-Rechten.
sudo -H -u BENUTZERNAME PROGRAMM
Terminal - Ausführung mit Passwort des Zielbenutzers¶
su
ist eine Alternative zu sudo
mit ähnlicher Funktion, die in anderen Linux-Distributionen sogar eher verfügbar ist.
Der große Unterschied ist, es wird im Gegensatz zu sudo
direkt das Passwort des Zielbenutzers abgefragt. Das ist hilfreich, wenn man z.B. nicht zur Gruppe sudo
gehört aber das Passwort des anderen Benutzers bekannt ist.
su BENUTZERNAME -c PROGRAMM
Für BENUTZERNAME
den Anmeldenamen des anderen Benutzers eingeben. Man beachte, dass bei diesem Befehl nach dem Passwort des anderen Benutzers gefragt wird.
Hinweis:
su
hat keine eigenen Rechteeinstellungen und ist völlig unabhängig von der Datei /etc/sudoers. Dortige Regeln haben bei su
keine Wirkung.
Ähnlich wie bei sudo
kann auch eine Shell statt einem einzelnen Befehl über den Ziel-Benutzer gestartet werden:
su BENUTZERNAME
Hinweis:
su
erlaubt ohne Angabe eines Benutzernamens bzw. mit konkreter Angabe "root
" auch das Ausführen mit root-Rechten. Allerdings muss dafür natürlich das root-Passwort festgelegt und bekannt sein. Das Setzen eines Root-Passwortes findet bei der Installation nicht statt und wird aus Sicherheitsgründen auch nicht nachträglich empfohlen.
Zusammenfassung¶
Programme als anderer Benutzer ausführen | ||||
Kommandozeilenbefehl | Wirkung | HOME | benutzbar von | |
sudo BEFEHL | führt den Befehl BEFEHL als root aus | unverändert | Gruppe sudo | |
sudo -u BENUTZERNAME BEFEHL | führt Befehl BEFEHL als Benutzer BENUTZERNAME aus | unverändert | Gruppe sudo | |
sudo -H BEFEHL | führt Befehl BEFEHL als root mit angepasster Variablen $HOME aus | /root | Gruppe sudo | |
sudo -s | startet mittels Variable SHELL definierte Shell | unverändert | Gruppe sudo | |
sudo -i BEFEHL | startet Login-Shell und setzt dabei sowohl Variable HOME und das aktuelle Arbeitsverzeichnis auf die Standardwerte für root (empfohlen). Ein angegebener Befehl BEFEHL wird ausgeführt; wenn man keinen angibt, landet man in einer interaktiven Login-Shell für root (sog. Rootshell). | /root | Gruppe sudo | |
sudo -i -u BENUTZERNAME BEFEHL | startet Login-Shell und setzt dabei sowohl Variable HOME und das aktuelle Arbeitsverzeichnis auf die Standardwerte für den neuen Benutzer BENUTZERNAME . Ein angegebener Befehl BEFEHL wird ausgeführt; wenn man keinen angibt, landet man in einer interaktiven Login-Shell des angegebenen Benutzers BENUTZERNAME . | /home/BENUTZERNAME | Gruppe sudo | |
su BENUTZERNAME | wechselt aktuellen Benutzer mit Passwort des Zielbenutzers | /home/BENUTZERNAME | jedem |
Links¶
Intern¶
root - Erklärung des Begriffs "root"
Benutzer und Gruppen - Wichtige Informationen
Konfiguration von sudo - Weitere Einstellungen zur Benutzung des
sudo
-Befehls und damit verbundene RechtePolicyKit - verfeinerte Rechteverwaltung, wird zukünftig mehr und mehr in die Desktopumgebung eingebaut
chown - Eigentümer und Gruppen von Dateien und Verzeichnissen ändern
chmod - Zugriffsrechte von Dateien und Verzeichnissen ändern
Extern¶
Ubuntu Wiki 🇬🇧 - Hinweise zu Sudo