[[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)]] [[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 Programmaufrufen vorangestellt werden. Er ermöglicht berechtigten Benutzern, das Programm im Namen und mit den Rechten eines anderen Benutzers, auch [:root:] 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 bei der Installation angelegte erste Benutzer gehört standardmäßig zur Gruppe `sudo`. 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 GUI-Programm per [:PolicyKit:] 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. In dieses Situationen soll man nicht zusätzlich sudo verwenden. = Installation = Das Programm '''sudo''' ist essentieller Bestandteil jeder Ubuntu-Installation und sollte auf gar keinen Fall entfernt werden. Es ist im Paket {{{#!vorlage Paketinstallation sudo, Gewährt begrenzte Root-Privilegien für bestimmte Benutzer (main) }}} enthalten. = Root-Rechte 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 Sudo-Rechten (sudoedit) = Zum Bearbeiten von Textdateien im Rootverzeichnis (oder im Verzeichnis anderer Benutzer) steht der Befehl `sudoedit` (oder `sudo -e`) zur Verfügung. Dabei wird der voreingestellte [:Editor:] mit den [:Rechte:Rechten] und der Konfiguration des aktuellen Nutzers gestartet. Bei Aufruf von `sudoedit` wird eine temporäre Kopie der Datei mit den Rechten des aufrufenden Nutzers angelegt. Diese temporäre Datei wird dann mit dem Editor geöffnet. Die Änderung im Zielverzeichnis wird erst beim Beenden des Editors übernommen, dabei wird die originale Datei durch die temporäre Datei mit Rootrechten ersetzt und die temporäre Datei entfernt. Für die Anwendung dieses zunächst kompliziert erscheinenden Verfahrens sprechen diese Gründe: * Es ist dank `sudoedit` trivial anzuwenden. * Es vermeidet zuverlässig mögliche Fehlerzustände im Benutzerverzeichnis durch Dateien mit falschem Besitzer bzw. falschen Dateirechten. * Es kann auch gefahrlos ein GUI-Editor verwendet werden, weil der aufgerufene Editor keine Rootrechte beansprucht. Damit ist `sudoedit` ebenso sicher wie das oft verwendete `sudo nano`. * Durch entsprechende Einträge in der Datei '''/etc/sudoers''' können die Zugriffsrechte von einem Administrator genauer reguliert werden. So kann ein Nutzer einzelne Dateien im Rootverzeichnis bearbeiten, auch ohne Rootrechte erhalten zu müssen. == Anwendung == Die folgende drei Aufrufe bewirken dasselbe: {{{#!vorlage Befehl sudo -e DATEI sudo --edit DATEI sudoedit DATEI }}} {{{#!vorlage Hinweis Die Option `-e` ist von der Option `-E` zu unterscheiden. Mit der Option `-E` wird der angegebene Befehl unter Beibehaltung aller aktuellen [:Umgebungsvariable:Umgebungsvariablen] ausgeführt. }}} == Auswahl des Editors == Bei der Auswahl des Editors wertet `sudoedit` die Umgebungsvariablen `SUDO_EDITOR`, `VISUAL` oder `EDITOR` der Reihe nach aus. Sollte keine dieser Variablen deklariert sein, wird auf die Konfigurationsdatei '''/etc/sudoers''' zurückgegriffen. Ist auch dort kein Editor definiert, wird '''/usr/bin/editor''' aufgerufen, also bei Ubuntu standardmässig [:Nano:]. Da der Editor mit den normalen Nutzerrechten gestartet wird, kann auch problemlos ein graphischer Editor verwendet werden. Bei graphischen Editoren empfiehlt es sich, die Umgebungsvariable `VISUAL` mit dem gewünschten Editor zu belegen, zum Beispiel mit [:Mousepad:]: {{{#!vorlage Befehl VISUAL=mousepad sudoedit DATEI }}} Möchte man immer den gleichen Editor verwenden, kann man die [:Umgebungsvariable/#nderung-fuer-einen-Benutzer:Umgebungsvariable] auch dauerhaft setzen oder sich einen Alias anlegen. Einen Alias zur Verwendung in der Shell [:Bash:] definiert man in der Datei '''~/.bash_aliases''' im eigenen Benutzerverzeichnis, die man möglicherweise erst selbst anlegen muss. Für den Einsatz z.B. des Editors [:gedit:] zusammen mit `sudoedit` kann man in dieser Datei eine solche Zeile hinzufügen: {{{ alias rootedit='SUDO_EDITOR=gedit sudo -e ' }}} == Einschränkungen (ab Ubuntu 16.04) == Ist die angegebene Datei ein symbolischer Link, so kann die Datei aus Sicherheitsgründen nicht bearbeitet werden. Außerdem ist es nicht möglich eine Datei zu bearbeiten, wenn man als normaler Nutzer Schreibrechte im Verzeichnis hat, in dem sich die Datei befindet. Aber da man im Verzeichnis Schreibrechte hat, kann man die Datei auch (spätestens nach Löschen und erneuter Anlage) ganz normal bearbeiten. = 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 Umgebungsvariable '''$HOME''' auf das Home-Verzeichnis von `BENUTZERNAME` mit umzieht, jedoch das aktuelle Arbeitsverzeichnis beibehalten wird. Dies beseitigt einige, aber nicht Probleme beim Starten von grafischen Programme mit Root-Rechten. {{{#!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 das Programm '''su''' aus dem standardmäßig installierten Paket '''util-linux''' genutzt werden. Dieses Programm hat mit sudo nichts zu tun, sondern stellt eine alternative Methode dar, seine Benutzeridentität zu wechseln. Unter Ubuntu kann man mit `su` aber standardmäßig nicht zu `root` wechseln, weil dieser Benutzer kein Passwort hat. {{{#!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. }}} = Zusammenfassung = {{{#!vorlage Tabelle <-5 rowclass:"titel" :> Programme als anderer Benutzer ausführen +++ Kommandozeilenbefehl Wirkung `HOME` benutzbar von +++ `sudo BEFEHL` [#root-im-Terminal führt den Befehl `BEFEHL` als `root` aus] unverändert Gruppe `sudo` +++ `sudo -u BENUTZERNAME BEFEHL` [#Terminal-Ausfuehrung-durch-Benutzer-mit-Erlaubnis-in-etc-sudoers führt Befehl `BEFEHL` als Benutzer `BENUTZERNAME` aus] unverändert Gruppe `sudo` +++ `sudo -H BEFEHL` [#Terminal-Ausfuehrung-durch-Benutzer-mit-Erlaubnis-in-etc-sudoers führt Befehl BEFEHL als root mit angepasster Variablen `$HOME` aus] '''/root''' Gruppe `sudo` +++ `sudo -s` startet mittels Variable `SHELL` definierte [:Shell:] unverändert Gruppe `sudo` +++ `sudo -i BEFEHL` [#Rootshell startet Login-Shell] und setzt dabei sowohl Variable `HOME` und das aktuelle Arbeitsverzeichnis auf die Standardwerte für root (empfohlen). Ein angegebener Befehl BEFEHL wird ausgeführt; wenn man keinen angibt, landet man in einer interaktiven Login-Shell für root (sog. Rootshell). '''/root''' Gruppe `sudo` +++ `sudo -i -u BENUTZERNAME BEFEHL` [#Rootshell startet Login-Shell] und setzt dabei sowohl Variable `HOME` und das aktuelle Arbeitsverzeichnis auf die Standardwerte für den neuen Benutzer `BENUTZERNAME`. Ein angegebener Befehl BEFEHL wird ausgeführt; wenn man keinen angibt, landet man in einer interaktiven Login-Shell des angegebenen Benutzers `BENUTZERNAME`. '''/home/BENUTZERNAME''' Gruppe `sudo` +++ `su BENUTZERNAME` [#Terminal-Ausfuehrung-mit-Passwort-des-Zielbenutzers wechselt aktuellen Benutzer mit Passwort des Zielbenutzers] '''/home/BENUTZERNAME''' jedem }}} ## = Problembehebung = = Links = == Intern == * [:root:] - Erklärung des Begriffs "root" * [: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} * [https://kofler.info/ubuntu-merkwuerdiges-sudo-verhalten/ Ubuntu: Merkwürdiges sudo-Verhalten] {de} * [http://www.wingtiplabs.com/blog/posts/2013/03/13/sudoedit/ What's So Great About Sudoedit?] {en} # tag: Sicherheit, Einsteiger, Passwort, sudoers