[[Vorlage(Überarbeitung, 23.6.2018, sudo, noisefloor)]] [[Vorlage(Getestet,general)]] {{{#!vorlage Hinweis Im Wikiartikel [:mit Root-Rechten arbeiten:] werden alle Wege, die es außer `sudo` gibt, um mit Root-Rechten zu arbeiten, aufgeführt. }}} {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Benutzer_und_Gruppen: Rechte von Benutzern und Gruppen] [:Terminal: Ein Terminal öffnen] (optional) }}} [[Inhaltsverzeichnis(1)]] [[Anker(Sudo-Der-Standard-unter-Ubuntu)]] 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 [:Administrator: 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. {{{#!vorlage Warnung 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 [:Benutzer_und_Gruppen: Gruppe] [2] `sudo` erlaubt, 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:]. [[Anker(sudo-Eigenheiten)]] 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(Bildunterschrift, ./sandwich.png, 350, "[https://xkcd.com/149/ xkcd.com] {en} (CC-BY-NC 2.5)", right)]] = Installation = sudo ist essentieller Bestandteil jeder Ubuntu-Installation und sollte auf gar keinen Fall entfernt werden. Es ist im Paket * '''sudo''' enthalten. [[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 Systemkonto 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. [[Anker(root-HOME)]] == 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 [:sudo/Konfiguration#Visuelles-Feedback-bei-Passworteingabe: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 [:sudo/Konfiguration#Administrator-auf-Zeit: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 Rootshell wechseln. Nach der Eingabe [3] 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. == Editieren von Dateien unter Rootrechten == Zum sicheren Editieren von Dateien wird statt `sudo nano Datei` besser {{{#!vorlage Befehl sudoedit DATEI }}} verwendet. `sudoedit` ist Teil des Pakets '''sudo''' und ist somit auch immer installiert. Der gewünschte Editor kann vorher über die Umgebungsvariable `EDITOR` festgelegt werden. Wird dadurch ein grafischer Editor festgelegt, ist zusätzlich der Home-Ordner des Zielnutzers zu setzen ([#Grafische-Programme-kdesudo siehe]): {{{#!vorlage Befehl sudoedit -H DATEI }}} = 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 `sudo` ohne Einschränkungen der Fall. Die Option `-H` bewirkt, dass dann auch die Umgebungsvariabele '''$HOME''' auf das Home-Verzeichnis von `BENUTZERNAME` mit umzieht, was beim Starten von grafische Programme wichtig ist. {{{#!vorlage Befehl sudo -H -u BENUTZERNAME PROGRAMM }}} [[Anker(su)]] === Terminal - Ausführung mit Passwort des Zielbenutzers === Wenn das Passwort des Zielbenutzers bekannt ist, aber man z.B. nicht zur Gruppe `sudo` gehört, kann der Befehl `su` genutzt werden. {{{#!vorlage Befehl 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. {{{#!vorlage Hinweis Rechteeinstellungen, die in der Datei '''/etc/sudoers''' vorgenommen wurden, haben bei `su` keine Wirkung. }}} = 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 mitgegeben werden. {{{#!code bash #! /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#Visuelles-Feedback-bei-Passworteingabe:]. = Zusammenfassung = ||<-6 rowclass:"titel" :> Programme als anderer Benutzer ausführen || || Bei || Befehl || Zweck || `$HOME` zeigt auf Verzeichnis von: || Kann standardmäßig benutzt werden: || ||<|6> Kommandozeilen-Befehl/Programm || `sudo` || [#root-im-Terminal führt einzelne Befehle als `root` aus] || "/eigenes HOME" || von Gruppe `sudo` || || `sudo -H` || [#Terminal-Ausfuehrung-durch-Benutzer-mit-Erlaubnis-in-etc-sudoers führt Befehl mit angepasstem `$HOME` aus] (empfohlen) || '''/root''' bzw. "/anderen Benutzer" || von Gruppe `sudo` || || `sudo -u BENUTZER` || [#Terminal-Ausfuehrung-durch-Benutzer-mit-Erlaubnis-in-etc-sudoers führt Befehl als anderer `BENUTZER` aus] || "/eigenes HOME" || von Gruppe `sudo` || || `sudo -s` || startet mittels Variable `SHELL` definierte [:Shell:] || "/eigenes HOME" || von Gruppe `sudo` || || `sudo -i` || [#Rootshell startet interaktive shell] || '''/root''' bzw. "/anderen Benutzer" || von Gruppe `sudo` || || `su` || [#Terminal-Ausfuehrung-mit-Passwort-des-Zielbenutzers wechselt aktuellen Benutzer mit Passwort des Zielbenutzers] || '''/root''' bzw. "/anderen Benutzer" || bei Kenntnis des Passworts || ## = Problembehebung = = Links = == Intern == * [: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 == Extern == * [ubuntu_doc:community/RootSudo: Ubuntu Wiki] {en} - Hinweise zu Sudo * [https://www.sudo.ws Sudo Homepage] {en} # tag: Sicherheit, Einsteiger, root, superuser, su, sudo, passwort, sudoers