sudo
Fehlende Vorlage
Das gewünschte Template „Wiki/Vorlagen/InArbeit“ existiert nicht.
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
xkcd.com (CC-BY-NC) |
Der Befehl sudo ermöglicht es, ein Programm im Namen und mit den Rechten eines anderen Benutzers auszuführen. In der Regel werden damit Programme gestartet, um Aufgaben auszuführen die dem Administrator des Systems vorbehalten sind. Beispiele:
Programme installieren
die Systemkonfiguration ändern
Achtung!
Nur wenn Aufgaben dies erfordern erledigt man sie per sudo, also mit Rootrechten. Änderungen an Systemdateien sollte man nur vornehmen, wenn man weiß was man tut.
Bei den großen Desktopumgebungen GNOME oder KDE werden je nach Aufgabe nur einem bestimmten Programm Rootrechte gewährt. So muss man z.B. bei einer Programminstallation sein Passwort eingeben wodurch APT Rootrechte erhält und das Programm installieren kann.
Der Benutzer root¶
Unter Linux wird ein Konto für root angelegt. Root ist der Benutzer, der administrative Rechte besitzt und deshalb vollen Zugriff auf alle Dateien und damit auch auf alle Einstellungen hat. Bei Ubuntu-Linux wird dem Benutzer root allerdings kein Passwort zugewiesen, d.h. man kann sich am Loginprompt nicht mit dem Namen root anmelden.
Das HOME-Verzeichnis von root¶
Jeder reale Benutzer bekommt ein eigenes Homeverzeichnis im Verzeichnis /home mit seinem Namen. Für root gilt dies nicht, dessen home-Verzeichnis ist /root.
Der Befehl sudo¶
Jeder Benutzer, der der Gruppe[1] admin
angehört, kann mit Hilfe des Befehls sudo vorübergehend Rootrechte erhalten und zum Benutzer root werden. Der bei der Installation angelegte Benutzer gehört immer dieser Gruppe an.
Hinweis:
Der Befehl sudo sollte nur für Terminalprogramme und Shellkommandos verwendet werden. Um grafische Programme mit Rootrechten zu starten sind eigene Programme vorgesehen. Siehe: Root bei grafischen Programmen
Die in der Hinweisbox gegebene Empfehlung soll zwei Probleme verhindern:
Zum einen ändert sudo die Umgebungsvariable HOME standardmäßig nicht auf den entsprechenden Wert des Zielaccounts (siehe auch Zusammenfassung). Werden Programme mit sudo gestartet, besteht dadurch die Gefahr, dass Konfigurationsdateien mit falschen Rechten im Heimatverzeichnis des ursprünglichen Anwenders erstellt werden. Startet dieser das betreffende Programm dann später unter seinem eigenen Kontext - also ohne sudo - so kann es die Konfiguration entweder nur noch lesend oder eventuell gar nicht mehr öffnen. Daher wird empfohlen, sudo immer in Verbindung mit der Option
-H
zu verwenden. Bei Systembefehlen kann diese Option entfallen, sie schadet aber auch nicht. Die grafischen Alternativen leiden nicht unter diesem Problem: Dort wird die Umgebungsvariable HOME immer korrekt gesetzt.Zum anderen lassen sich nicht unter allen Desktopumgebungen grafische Programme direkt per "sudo -H" aus einem Terminal starten. Bei KDE beispielsweise liegt dies daran, dass die Umgebungsvariable
XAUTHORITY
nicht gesetzt ist, was bei Gnome aber der Fall ist. Da "sudo -H" also nicht unter allen Desktopumgebungen geeignet ist, grafische Anwendungen zu starten, sind zu diesem Zweck die Alternativen gksudo/kdesudo grundsätzlich zu bevorzugen.
root im Terminal¶
Sind bei einem Terminal-Befehl Rootrechte erforderlich so wird dem auszuführenden Befehl das Kommando sudo voranstellt. Nach der Eingabe wird man nach seinem Passwort gefragt. Dieses ist "blind" einzugeben, das heißt, es erscheinen keine Sternchen oder ähnliches auf dem Bildschirm, sondern einfach gar nichts. 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" [...]
Nachdem das Passwort eingegeben wurde, ist dies für die nächsten 15 Minuten bei erneuter Verwendung von sudo in diesem Terminal nicht mehr notwendig. 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 Rootshell wechseln. Nach der Eingabe von
sudo -i
werden alle folgenden Befehle mit Rootrechten ausgeführt, bis man diese Rootshell mit
exit
verlässt. Innerhalb dieser Shell muss kein sudo
mehr verwendet werden. Die Dauer der Rootshell selbst ist nicht beschränkt. Es liegt in der Verantwortung des Anwenders, diese zu verlassen. Beispiel:
Benutzer@Desktop:~$ sudo -i [sudo] password for Benutzer: root@Desktop:~# mkdir /media/test root@Desktop:~# rmdir /media/test root@Desktop:~# exit Abgemeldet Benutzer@Desktop:~$
Den dauerhaften Wechsel kann man deutlich am veränderten Prompt "root@Desktop:~#" erkennen. Abschließend signalisiert das normale Prompt das Ende der Rootshell.
root bei grafischen Programmen¶
Möchte man grafische Programme (z.B. gedit oder Kate) als root ausführen, sind je nach Desktop eigene Befehle vorgesehen:
GNOME, Xfce: gksudo
KDE: kdesudo
Beispiel: Unter GNOME
gksudo gedit
Unter KDE
kdesudo kate
Programme im Kontext anderer Benutzer ausführen¶
Es ist möglich, ein Programm so zu starten, als sei es von einem anderen Benutzer gestartet worden. Wird ein Programm derart gestartet zeigt z.B. die Umgebungsvariable $HOME
auf das Verzeichnis des anderen Benutzers.
Terminalprogramme und Shellkommandos¶
Im Terminal kann ein Benutzerwechsel z.B. nützlich sein, um ein Skript in einer anderen Umgebung zu testen.
Terminal - Ausführung durch Benutzer mit administrativen Rechten¶
Sudo fragt immer nach dem Passwort des aufrufenden Benutzers. Ein Benutzerwechsel wird aber nur gestattet wenn dies in /etc/sudoers erlaubt wurde. Dies ist standardmäßig für die Gruppe admin
ohne Einschränkungen der Fall.
sudo -H -u BENUTZERNAME PROGRAMM
Terminal - Ausführung durch jeden¶
su BENUTZERNAME -c PROGRAMM
Für BENUTZERNAME den Login-Namen des anderen Benutzers eingeben. Man Beachte, dass bei diesem Befehl nach dem Passwort des anderen Benutzers gefragt wird.
Hinweis:
Rechteeinstellungen, die in der Datei /etc/sudoers vorgenommen wurden, haben bei su
keine Auswirkungen.
Grafische Programme¶
Bei grafischen Programmen kann ein Benutzerwechsel hilfreich sein, um z.B. die Konfiguration von Programmen eines anderen Benutzers zu überprüfen.
Grafisch - Ausführung durch Benutzer mit administrativen Rechten¶
Dieser Befehl kann nur von einem Benutzer ausgeführt werden, der der Gruppe admin
angehört.
Unter KDE:
kdesudo -u BENUTZERNAME PROGRAMM
Unter GNOME gibt es zur Zeit keinen analogen Befehl. Mit gksudo
ist es nur möglich zum Benutzer root zu wechseln, nicht zu einem anderen Benutzer. Siehe: Bugreport. Es muss also "gksu -w" (siehe Ausführung von jedem) verwendet werden, um zu regulären Benutzern zu wechseln.
Grafisch - Ausführung durch jeden¶
Bei diesen Befehlen muss der ausführende Benutzer nicht der Gruppe admin
angehören. Für BENUTZERNAME ist jeweils der Login-Name des anderen Benutzers einzugeben.
Unter GNOME bzw. Xfce:
gksu -w -u BENUTZERNAME PROGRAMM
Unter KDE:
/usr/lib/kde4/libexec/kdesu-distrib/kdesu -u BENUTZERNAME PROGRAMM
Hinweis:
Bei diesen Befehlen haben Rechteeinstellungen, die in der Datei /etc/sudoers vorgenommen wurden, keine Auswirkungen und es werden immer die Passwörter des Zielbenutzers abgefragt. Dabei ist folgendes zu beachten: gksu muss mit der Option "-w" verwendet werden. Unter KDE muss der exakte Pfad angegeben werden. Wird hier einfach nur kdesu verwendet, so wird - wie bei gksu ohne Option "-w" - auf sudo zurückgegriffen, und damit die Einstellungen in der Datei /etc/sudoers durchgesetzt.
Zusammenfassung¶
Programme als anderer Benutzer ausführen | |||||
Umgebung | Befehl | Verwendung für: | $HOME zeigt auf Verzeichnis von: | Kann benutzt werden von: | |
Terminalprogramme | sudo | Einzelne Befehle ausführen | "/eigenes HOME" | admin | |
sudo -i | Eine Rootshell starten | /root | admin | ||
sudo -H | Benutzerwechsel für admins | /root bzw. "/anderen Benutzer" | admin | ||
su | Benutzerwechsel für jedermann | "/anderen Benutzer" | admin/jedem | ||
grafische Programme | kdesudo und gksudo | Einzelnes Programm starten | /root | admin | |
gksu -w -u | GNOME/Xfce: Benutzerwechsel für jedermann | "/anderen Benutzer" | admin/jedem | ||
/usr/[...]/kdesu -u | KDE: Benutzerwechsel für jedermann | "/anderen Benutzer" | admin/jedem | ||
kdesudo -u | KDE: Benutzerwechsel für admins | "/anderen Benutzer" | admin |
Problembehebung¶
Sudo fragt nicht mehr nach dem Passwort¶
Oft liegt die Ursache darin, dass der Benutzer entweder manuell oder unbeabsichtigt durch ein Skript in die Gruppe "sudo" eingetragen wurde und so die Passwortabfrage umgangen wird. Um sich wieder aus der Gruppe zu löschen, gibt man in die Konsole folgendes ein:
sudo deluser BENUTZERNAME sudo
Für BENUTZERNAME den eigenen Login-Namen eingeben
Danach sollte die Passwortabfrage wieder funktionieren.
Artikel zu verwandten Themen¶
Benutzer und Gruppen - Wichtige Informationen
Konfiguration von sudo - Weitere Einstellungen zur Benutzung des sudo-Befehls und damit verbundene Rechte
PolicyKit - 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
Links¶
Ubuntu Wiki 🇬🇧 - Hinweise zu Sudo
http://www.sudo.ws 🇬🇧 - Sudo Homepage