[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Benutzer_und_Gruppen: Rechte von Benutzern und Gruppen] [:Terminal: Ein Terminal öffnen] (optional) }}} [[Inhaltsverzeichnis(1)]] ||[[Bild(http://imgs.xkcd.com/comics/sandwich.png, 250)]]|| || [http://xkcd.com/149/ 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 {{{#!vorlage Warnung 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 [:Paketverwaltung:APT] Rootrechte erhält und das Programm installieren kann. [[Anker(root-der-Standard-bei-Linux)]] = 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. [[Anker(root-HOME)]] == Das HOME-Verzeichnis von root == Jeder reale Benutzer bekommt ein eigenes [:Homeverzeichnis: Homeverzeichnis] im Verzeichnis '''/home''' mit seinem Namen. Für root gilt dies nicht, dessen home-Verzeichnis ist '''/root'''. [[Anker(Sudo-Der-Standard-unter-Ubuntu)]] = Der Befehl sudo = Jeder Benutzer, der der [:Benutzer_und_Gruppen: 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. {{{#!vorlage 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 Root bei grafischen Programmen] }}} Die in der Hinweisbox gegebene Empfehlung soll zwei Probleme verhindern: 1. Zum einen ändert sudo 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 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. 1. 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 [#Root-bei-grafischen-Programmen 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 {{{#!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 }}} [[Anker(su)]] = 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. [[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 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. {{{#!vorlage Befehl sudo -H -u BENUTZERNAME PROGRAMM }}} === Terminal - Ausführung durch jeden === {{{#!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 Auswirkungen. }}} == Grafische Programme == Bei grafischen Programmen kann ein Benutzerwechsel hilfreich sein, um z.B. die Konfiguration von Programmen eines anderen Benutzers zu überprüfen. [[Anker(Grafische-Programme-kdesudo)]] === 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: {{{#!vorlage Befehl 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: [bug:275304: Bugreport]. Es muss also "gksu -w" (siehe [#Grafisch-Ausfuehrung-von-jedem Ausführung von jedem]) verwendet werden, um zu regulären Benutzern zu wechseln. [[Anker(Grafische-Programme-gksu-kdesu)]] === 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: {{{#!vorlage Befehl gksu -w -u BENUTZERNAME PROGRAMM }}} Unter KDE: {{{#!vorlage Befehl /usr/lib/kde4/libexec/kdesu-distrib/kdesu -u BENUTZERNAME PROGRAMM }}} {{{#!vorlage 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 = ||<-6 rowclass:"titel" :> Programme als anderer Benutzer ausführen || || Umgebung || Befehl || Verwendung für: || $HOME zeigt auf Verzeichnis von: || Kann benutzt werden von: || ||<|4> Terminalprogramme || `sudo` || [#root-im-Terminal Einzelne Befehle ausführen] || "/eigenes HOME" || admin || || `sudo -i` || [#Rootshell Eine Rootshell starten] || '''/root''' || admin || || `sudo -H` || [#Terminal-Ausfuehrung-durch-Benutzer-mit-administrativen-Rechten Benutzerwechsel für admins] || '''/root''' bzw. "/anderen Benutzer" || admin || || `su` || [#Terminal-Ausfuehrung-durch-jeden Benutzerwechsel für jedermann] || "/anderen Benutzer" || admin/jedem || ||<|4> grafische Programme || `kdesudo` und `gksudo` || [#root-bei-grafischen-Programmen Einzelnes Programm starten] || '''/root''' || admin || || `gksu -w -u` || [#Grafisch-Ausfuehrung-durch-jeden GNOME/Xfce: Benutzerwechsel für jedermann] || "/anderen Benutzer" || admin/jedem || || `/usr/[...]/kdesu -u` || [#Grafisch-Ausfuehrung-durch-jeden KDE: Benutzerwechsel für jedermann] || "/anderen Benutzer" || admin/jedem || || `kdesudo -u` || [#Grafisch-Ausfuehrung-durch-Benutzer-mit-administrativen-Rechten 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 [: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