sudo

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Hinweis:

Im Wikiartikel mit Root-Rechten arbeiten werden alle Wege, die es außer sudo gibt, um mit Root-Rechten zu arbeiten, aufgeführt.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Rechte von Benutzern und Gruppen

  3. Ein Terminal öffnen, optional

Inhaltsverzeichnis
  1. Installation
  2. root im Terminal
  3. Editieren von Dateien unter Sudo-Rechten (...
  4. Programme im Kontext anderer Benutzer ausf...
  5. Zusammenfassung
  6. Links

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:

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.

Achtung!

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, 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

enthalten.

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"
[...]

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

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.

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 Rechten und der Konfiguration des aktuellen Nutzers gestartet. Die Änderung im Zielverzeichnis wird erst beim Beenden des Editors übernommen.

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. Deshalb, und weil der aufgerufene Editor keine Rootrechte beansprucht, wird dieser Befehl gegenüber dem oft verwendeten sudo nano bevorzugt.

Anwendung

Die folgende drei Aufrufe bewirken dasselbe:

sudo -e DATEI
sudo --edit DATEI
sudoedit DATEI 

Hinweis:

Die Option -e ist von der Option -E zu unterscheiden. Diese führt einen beliebigen Befehl unter Beibehaltung der aktuellen Umgebungsvariablen aus.

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. Nach der Bearbeitung wird die originale Datei durch die temporäre Datei mit Rootrechten ersetzt und die temporäre Datei entfernt.

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:

VISUAL=mousepad sudoedit DATEI  

Möchte man immer den gleichen Editor verwenden, kann man die Umgebungsvariable auch dauerhaft setzen.

Einschränkungen (ab Ubuntu 16.04)

Ist die angegebene Datei ein symbolischer Link, so kann die Datei aus Sicherheitsgründen nicht bearbeitet werden. Ausserdem 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 ganz normal bearbeiten.

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

sudo -H -u BENUTZERNAME PROGRAMM  

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.

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.

Hinweis:

Rechteeinstellungen, die in der Datei /etc/sudoers vorgenommen wurden, haben bei su keine Wirkung.

Zusammenfassung

Programme als anderer Benutzer ausführen
Bei Befehl Zweck $HOME zeigt auf Verzeichnis von: Kann standardmäßig benutzt werden:
Kommandozeilen-Befehl/Programm 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 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 startet interaktive shell /root bzw. "/anderen Benutzer" von Gruppe sudo
su wechselt aktuellen Benutzer mit Passwort des Zielbenutzers /root bzw. "/anderen Benutzer" immer

Intern

Extern