ubuntuusers.de

ubuntuusers.deWikisudo

sudo

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:

./sandwich.png
xkcd.com {en} (CC-BY-NC)

Der Befehl sudo kann Programmaufrufen vorangestellt werden. Er ermöglicht berechtigten Benutzern, das Programm im Namen und mit den Rechten eines anderen Benutzers auszuführen. Beispielsweise um Aufgaben auszuführen, die Administratoren vorbehalten sind:

  • Programme installieren (sudo apt-get install ...)

  • Systemkonfigurationen ändern (sudo nano /etc/fstab)

Sudo fragt vor der Ausführung des Programms unter einem anderem Namen nach dem Passwort des aufrufenden Benutzers. Damit wird überprüft, ob dieser den Befehl selbst eingegeben hat. Der Kreis der berechtigten Benutzer ist in der Datei /etc/sudoers festgelegt. Standardmäßig wird als Ziel-Benutzer root angenommen.

Hinweis:

Erweiterte Rechte mittels der hier beschriebenen Verfahren bitte nur verwenden, wenn eine Aufgabe dies wirklich erfordert, die Programmausführung also zum Beispiel mit Root-Rechten erfolgen muss. Änderungen an Systemdateien sollte man mit Bedacht vornehmen und vorher eine Sicherungskopie anlegen. Eine falsche Verwendung von sudo kann das System unbrauchbar machen.

Unter Ubuntu wird in der /etc/sudoers standardmäßig allen Mitgliedern der Gruppe [2] sudo erlaubt (vor Ubuntu 12.04 admin), zum Benutzer root zu werden und damit Rootrechte zu erhalten. Der oder die bei der Installation angelegten Benutzer gehört standardmäßig der Gruppe sudo an. Näheres zur Konfigurationsdatei /etc/sudoers unter sudo/Konfiguration.

In Desktopumgebungen wie GNOME oder KDE werden für bestimmte Aufgaben teilweise automatisch Rootrechte für ein bestimmtes Programm angefordert. So wird man z.B. für eine Programminstallation automatisch nach seinem Passwort gefragt, damit APT Rootrechte erhält und das Programm installieren kann. Sudo braucht dann vielfach gar 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 Paket

  • sudo

enthalten. Dagegen fehlt ab Ubuntu 13.10 das Programm gksudo und muss zuerst installiert [1] werden:

  • gksu (ab Ubuntu 13.10 in universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install gksu 

sudo aptitude install gksu 

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:

normale Verwendung
Distribution Befehl Beispiel Anmerkung
Unity, GNOME, Xfce, LXDE gksudo BEFEHL gksudo gedit Durch Druck von Alt + F2 wird eine Eingabezeile geöffnet, in die der Befehl getippt werden kann. Alternativ kann auch ein grafisches Terminal verwendet werden.
Kubuntu kdesudo BEFEHL kdesudo kate Durch Druck von Alt + F2 wird KRunner geöffnet, in dessen Eingabezeile der Befehl getippt werden kann. Alternativ kann auch ein grafisches Terminal verwendet werden.
alle sudo -H BEFEHL sudo -H pico Diese Form eignet sich insbesondere für Terminalbefehle. In Fällen, in denen keine grafische Oberfläche verfügbar ist, ist sie sogar unumgänglich.

Zwei Eigenheiten von sudo können zu Problemen führen:

  1. Der Befehl sudo ändert die Umgebungsvariable $HOME standardmäßig nicht auf den entsprechenden Pfad zum Ziel-Benutzer (siehe auch Zusammenfassung). Startet man Programme mit sudo besteht die Gefahr, dass Konfigurationsdateien mit falschen Rechten im Heimatverzeichnis des ursprünglichen Benutzers erstellt werden. Startet dieser das Programm später unter seinem eigenen Namen - also ohne sudo - so kann er die Konfiguration nur noch lesend oder eventuell gar nicht mehr öffnen. Daher sollte sudo immer mit der Option -H verwendet werden. Dies gilt auch bei Systembefehlen, die keine Konfigurationsdateien unter $HOME ablegen. Die grafischen sudo-Alternativen leiden nicht unter diesem Problem: Dort wird die Umgebungsvariable $HOME umgestellt.

  2. Grafische Programme lassen sich in manchen Desktopumgebungen mit sudo -H nicht aus einem Terminal starten. Dies liegt daran, dass die Grafikumleitung nicht vollständig konfiguriert wird (Xauthority). Da "sudo -H" also nicht immer funktioniert und auch keine grafische Passwortabfrage erfolgt, sollten grafischen Anwendungen (unter anderem Namen) grundsätzlich über die grafischen Alternativen (wie gksudo/kdesudo) gestartet werden.

Der Benutzer root

Standardmäßig existiert unter Linux immer ein Konto für den Benutzer "root" mit der User-ID 0. Dies ist ein Systemaccount mit vollem Zugriff auf das gesamte System, und damit auch auf alle Dateien und Einstellungen aller Benutzer.

Bei Ubuntu wird dem Benutzer root allerdings kein Passwort zugewiesen. Dadurch kann sich niemand unter dem Namen "root" anmelden.

Das HOME-Verzeichnis von root

Jeder reale Benutzer bekommt ein eigenes Homeverzeichnis unter dem Verzeichnis /home mit seinem Benutzernamen. Das Homeverzeichnis von root ist jedoch /root, damit es auch zur Verfügung steht, falls /home in einem separaten Dateisystem liegt und dieses nicht eingebunden ist.

root 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 nach seinem Passwort gefragt. Dieses ist "blind" einzugeben. Es erscheinen keine Sternchen oder ähnliches auf dem Bildschirm, sondern einfach gar nichts (das kann aber 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"
[...]

Nachdem das Passwort einmal eingegeben wurde, 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 Adminstrator 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 Rootshell wechseln. Nach der Eingabe [3] 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.

Programme im Kontext anderer Benutzer ausführen

Programme können auch unter dem Namen eines anderen 'regulären' Benutzers gestartet werden.

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 Erlaubnis in /etc/sudoers

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 nur für die Gruppe sudo ohne Einschränkungen der Fall.

sudo -H -u BENUTZERNAME PROGRAMM  

Terminal - Ausführung mit Passwort des Zielbenutzers

Wenn das Password des Zielbenutzers bekannt ist, aber man z.B. nicht zur Gruppe sudo gehört, kann der Befehl su genutzt werden.

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 Wirkung.

Grafische Programme

Hinweis:

TIPP: Ein Terminalfenster das unter einem anderen Namen läuft und in dem auch grafische Programme gestartet werden können, kann von Benutzern aus der Gruppe sudo per "Alt-F2" und Eingabe von "gksudo 'gksu -u ZIELBENUTZER -w gnome-terminal'" geöffnet werden. Wer nicht in der sudo-Gruppe ist, benötigt das Passwort des Zielbenutzers und muss das vorangestellte gksudo weglassen.

Für grafische Programme kann ein Benutzerwechsel nützlich sein, um z.B. die Konfiguration von Programmen eines anderen Benutzers zu überprüfen, oder das eigene E-Mailprogramm oder den Webbrowser in einer separaten Umgebung laufen zu lassen.

Grafisch – Ausführung durch Benutzer mit Erlaubnis in /etc/sudoers

Unter KDE:

kdesudo -u BENUTZERNAME PROGRAMM 

Hinweis:

kdesudo fragt in diesem Fall nach dem Passwort des Zielbenutzers, man muss aber das eigene Passwort eingeben.

Unter GNOME gibt es zur Zeit keinen funktionierenden analogen Befehl. Bei grafischen Anwendungen ist es mit gksudo nur möglich, diese als Root zu starten. Ein Start im Kontext anderer Benutzer ist nicht möglich. Siehe: Bugreport. Es muss also gksu -w (siehe #Grafische-Programme-gksu-kdesu) verwendet werden, um zu regulären Benutzern zu wechseln.

Grafisch - Ausführung mit Passwort des Zielbenutzers

Bei diesen Befehlen muss der ausführende Benutzer nicht der Gruppe sudo 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 den Befehlen, die den su Mechanismus nutzen, haben Rechteeinstellungen, die in der Datei /etc/sudoers vorgenommen wurden, keine Auswirkungen und es werden immer die Passwörter des Zielbenutzers abgefragt. Dabei ist zu beachten, das gksu nur mit der Option -w tatsächlich su nutzt, da es in Ubuntu standardmäßig sudo verwendet. Das KDE Programm kdesu (sofern vorhanden) besitzt keine Option um auf den su Mechanismus umzuschalten, es muss stattdessen der vollständige Pfad zum Originalbefehl angegeben werden. Wird einfach nur kdesu aufgerufen, so wird das in Ubuntu veränderte /usr/bin/kdesu verwendet, das (wie gksu ohne Option -w) auf sudo zurückgreift.

Sudo in einem Skript verwenden

Das Passwort an sudo übergeben

Möchte man sudo in einem Skript benutzen und das Passwort über eine grafische Abfrage eingeben lassen, kann dies folgendermaßen geschehen. Der Befehl gksu öffnet die grafische Abfrage für das Passwort und durch die Option -p wird das Passwort in stdout geschrieben. Die Option -S hinter dem sudo Befehl liest das Passwort, welches per Pipe an sudo übergeben wird, von stdin wieder ein. Die Option -- beendet das Einlesen von weiteren Argumenten. Dadurch können dem auszuführenden Befehl eigene Optionsschalter mit gegeben werden.

1
2
#! /bin/bash
gksu -p -m "Bitte Passwort eingeben:" | sudo -S -s -- apt-get update

Alternativen zu gksu bieten beispielsweise die Programme ssh-askpass, Zenity unter Gnome und KDialog unter KDE.

Außerdem kann sudo noch auf andere Weise konfiguriert werden, um ein externes Programm zur Passworteingabe zu benutzen, siehe dazu sudo/Konfiguration.

Zusammenfassung

Programme als anderer Benutzer ausführen
Bei Befehl Zweck $HOME zeigt auf Verzeichnis von: Kann standardmäßig benutzt werden:
Terminalprogramm sudo führt einzelne Befehle als root aus "/eigenes HOME" von Gruppe sudo
sudo -H führt Befehl mit angepasstem $HOME aus (empfohlen) /root bzw. "/anderen Benutzer" von Gruppe sudo
sudo -u BENUTZER startet Befehl als angegebenen BENUTZER "/eigenes HOME" von Gruppe sudo
sudo -i startet interaktive shell /root bzw. "/anderen Benutzer" von Gruppe sudo
su wechselt aktuellen Benutzer mit Passwort des Zielbenutzers /root bzw. "/anderen Benutzer" bei Kenntnis des Passworts
grafisches Programm kdesudo und gksudo führt grafisches Programm als root aus /root von Gruppe sudo
kdesudo -u führt grafisches Programm unter anderem Benutzer aus "/anderen Benutzer" von Gruppe sudo
gksu -w -u wechselt aktuellen Benutzer mit Passwort des Zielbenutzers (Gnome/GTK) "/anderen Benutzer" bei Kenntnis des Passworts
/usr/[...]/kdesu -u wechselt aktuellen Benutzer mit Passwort des Zielbenutzers (KDE) "/anderen Benutzer" bei Kenntnis des Passworts

Problembehebung

Sudo fragt nicht mehr nach dem Passwort

Oft liegt die Ursache darin, dass der Benutzer 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:

Achtung!

Ab Precise Pangolin 12.04 führt dieser Befehl dazu, dass sudo von diesem Benutzer nicht mehr ausführbar ist.

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

Diese Revision wurde am 24. Juni 2014 19:22 von nemene erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: su, Sicherheit, sudo, root, passwort, admin, Einsteiger, superuser, sudoers