[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Benutzer_und_Gruppen: Rechte von Benutzern und Gruppen] [:Terminal: Ein Terminal öffnen] (optional) }}} [[Inhaltsverzeichnis(1)]] [[Vorlage(Bildunterschrift, ./sandwich.png, 250, "[http://xkcd.com/149/ xkcd.com] {en} (CC-BY-NC)", right)]] [[Anker(Sudo-Der-Standard-unter-Ubuntu)]] Der Befehl '''sudo''' kann anderen Befehlen vorangestellt werden und erlaubt es Benutzern (entsprechend den Einstellungen in der Datei '''/etc/sudoers''') den Befehl bzw. das Programm im Namen und mit den Rechten eines anderen Benutzers auszuführen. (Standardmäßig als Benutzer `root`.) Beispielsweise um Aufgaben auszuführen, die dem Administrator des Systems vorbehalten sind, wie z.B.: * Programme installieren (sudo apt-get install ...) * Systemkonfigurationen ändern (sudo nano /etc/fstab) Sudo fragt vor der Ausführung des Befehls unter einem anderem Namen nach dem Passwort des aufrufenden Benutzers. Damit soll überprüft werden ob dieser den Befehl auch wirklich selbst eingegeben hat. {{{#!vorlage Warnung Sudo nur verwenden, wenn eine Aufgabe dies wirklich erfordert. (Die Programmausführung also z.B. mit Rootrechten erfolgen muss.) Änderungen an Systemdateien sollte man nur vornehmen, wenn man weiß was man tut. }}} Unter Ubuntu wird in der '''/etc/sudoers''' standardmäßig allen Mitgliedern der [:Benutzer_und_Gruppen: Gruppe][1] `admin` erlaubt zum Benutzer root zu werden und Rootrechte zu erhalten. Und der bei der Installation angelegte Benutzer gehört standardmäßig der Gruppe `admin` 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 [:Paketverwaltung:APT] Rootrechte erhält und das Programm installieren kann. Sudo braucht dann vielfach gar nicht mehr manuell aufgerufen zu werden. {{{#!vorlage Hinweis Der Befehl '''sudo''' sollte nur für Terminalprogramme und Shellkommandos verwendet werden! Um grafische Programme mit Rootrechten zu starten gibt es separate Befehle. Siehe: [#root-bei-grafischen-Programmen Root bei grafischen Programmen] }}} Zwei Eigenheiten von '''sudo''' können zu Problemen führen: 1. Sudo ändert die Umgebungsvariable $HOME standardmäßig nicht auf den entsprechenden Wert des Zielaccounts (siehe auch [#Zusammenfassung 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 Namen - also ohne sudo - so kann er 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, die keine Konfigurationsdateien unter $HOME ablegen 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.) 1. Grafische Programme lassen sich in manchen Desktopumgebungen auch mit '''sudo -H''' nicht immer korrekt aus einem Terminal starten. Dies liegt daran das die Grafikausgabe von '''sudo''' nicht vollständig konfiguriert wird (`XAUTHORITY`). Da "sudo -H" also nicht immer funktioniert, und '''sudo''' auch keine grafische Passwortabfrage macht, wird empfohlen zum Starten von grafischen Anwendungen (unter anderem Namen) besser grundsätzlich immer die graphischen Alternativen (wie [#root-bei-grafischen-Programmen gksudo/kdesudo]) zu bevorzugen. [[Anker(root-der-Standard-bei-Linux)]] = 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-Linux wird dem Benutzer root allerdings kein Passwort zugewiesen, dadurch werden alle Versuche sich am Loginprompt unter dem bekannten Namen "root" anzumelden abgeblockt. [[Anker(root-HOME)]] == Das HOME-Verzeichnis von root == Jeder reale Benutzer bekommt ein eigenes [:Homeverzeichnis: Homeverzeichnis] im Verzeichnis '''/home''' mit seinem Namen. Das home-Verzeichnis 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 Rootrechte 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, 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 einmal 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 {{{#!vorlage Befehl sudo -i }}} werden alle folgenden Befehle mit Rootrechten ausgeführt, bis man diese Rootshell mit {{{#!vorlage Befehl 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 {{{#!vorlage Befehl gksudo gedit }}} Unter KDE {{{#!vorlage Befehl kdesudo kate }}} = Programme im Kontext anderer Benutzer ausführen = Programme können auch unter dem Namen eines anderen 'regulären' Benutzers gestartet werden. [[Anker(Terminal-sudo)]] == 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 `admin` ohne Einschränkungen der Fall. {{{#!vorlage Befehl sudo -H -u BENUTZERNAME PROGRAMM }}} [[Anker(su)]] === Terminal - Ausführung mit Passwort des Zielbenutzers === Wenn das Password des Zielbenutzers bekannt ist, aber man z.B. nicht zur Gruppe `admin` gehört, kann der Befehl '''su''' genutzt werden. {{{#!vorlage Befehl 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. {{{#!vorlage Hinweis Rechteeinstellungen, die in der Datei '''/etc/sudoers''' vorgenommen wurden, haben bei '''su''' keine Wirkung. }}} == Grafische Programme == {{{#!vorlage Hinweis '''TIPP:''' Ein Terminalfenster das unter einem anderen Namen läuft und in dem auch grafische Programme gestartet werden können, kann von Benutzern in der Gruppe `admin` per ''Alt-F2 -> "gksudo 'gksu -u ZIELBENUTZER -w gnome-terminal'"'' geöffnet werden. Wer nicht in der `admin` 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 Emailprogramm oder den Webbrowser in einer separaten Umgebung laufen zu lassen. [[Anker(Grafische-Programme-kdesudo)]] === Grafisch - Ausführung durch Benutzer mit Erlaubnis in '''/etc/sudoers''' === Unter KDE: {{{#!vorlage Befehl kdesudo -u BENUTZERNAME PROGRAMM }}} {{{#!vorlage 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. Mit '''gksudo''' ist es nur möglich zum Benutzer root zu wechseln, nicht zu einem anderen Benutzer. Siehe: [bug:275304: Bugreport]. Es muss also "gksu -w" (siehe [#Grafische-Programme-gksu-kdesu]) verwendet werden, um zu regulären Benutzern zu wechseln. [[Anker(Grafische-Programme-gksu-kdesu)]] === Grafisch - Ausführung mit Passwort des Zielbenutzers === 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: {{{#!vorlage Befehl gksu -w -u BENUTZERNAME PROGRAMM }}} Unter KDE: {{{#!vorlage Befehl /usr/lib/kde4/libexec/kdesu-distrib/kdesu -u BENUTZERNAME PROGRAMM }}} {{{#!vorlage 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. }}} = Zusammenfassung = ||<-6 rowclass:"titel" :> Programme als anderer Benutzer ausführen || || Bei || Befehl || Zweck || $HOME zeigt auf Verzeichnis von: || Kann standardmäßig benutzt werden: || ||<|5> Terminalprogramm || `sudo` || [#root-im-Terminal führt einzelne Befehle als root aus] || "/eigenes HOME" || von Gruppe `admin` || || `sudo -H` || [#Terminal-sudo führt Befehl mit angepasstem $HOME aus (empfohlen)] || '''/root''' bzw. "/anderen Benutzer" || von Gruppe `admin` || || `sudo -u BENUTZER` || [#Programme-im-Kontext-anderer-Benutzer-ausführen startet Befehl als angegebenen BENUTZER] || "/eigenes HOME" || von Gruppe `admin` || || `sudo -i` || [#Rootshell startet interaktive shell] || '''/root''' bzw. "/anderen Benutzer" || von Gruppe `admin` || || `su` || [#su wechselt aktuellen Benutzer mit Passwort des Zielbenutzers] || '''/root''' bzw. "/anderen Benutzer" || bei Kenntnis des Passworts || ||<|4> grafisches Programm || `kdesudo` und `gksudo` || [#Grafische-Programme-kdesudo führt grafisches Programm als root aus] || '''/root''' ||von Gruppe `admin` || || `kdesudo -u` || [#Grafische-Programme-kdesudo führt grafisches Programm unter anderem Benutzer aus] || "/anderen Benutzer" || von Gruppe `admin` || || `gksu -w -u` || [#Grafische-Programme-gksu-kdesu wechselt aktuellen Benutzer mit Passwort des Zielbenutzers (Gnome/GTK)] || "/anderen Benutzer" || bei Kenntnis des Passworts || || `/usr/[...]/kdesu -u` || [#Grafische-Programme-gksu-kdesu 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 entweder manuell oder unbeabsichtigt durch ein Skript in die [:Benutzer_und_Gruppen: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: {{{#!vorlage Befehl 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 * [:sudo/Konfiguration: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 = * [https://help.ubuntu.com/community/RootSudo Ubuntu Wiki] {en} - Hinweise zu Sudo * [http://www.sudo.ws http://www.sudo.ws] {en} - Sudo Homepage # tag: Sicherheit, Einsteiger, root, superuser, admin, su, sudo, passwort