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:
- 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.
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 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.
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
sudo
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. 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.
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
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.
Programme im Kontext anderer Benutzer ausführen
Programme können auch unter dem Namen eines anderen 'regulären' Benutzers gestartet werden.
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.
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
Zusammenfassung
Kommandozeilenbefehl | Wirkung | HOME | benutzbar von |
sudo BEFEHL | führt den Befehl BEFEHL als root aus | unverändert | Gruppe sudo |
sudo -u BENUTZERNAME BEFEHL | führt Befehl BEFEHL als Benutzer BENUTZERNAME aus | unverändert | Gruppe sudo |
sudo -H BEFEHL | 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 | 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 | 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 | wechselt aktuellen Benutzer mit Passwort des Zielbenutzers | /home/BENUTZERNAME | jedem |