Mit Su und Sudo erhalten Sie in der Shell Root-Rechte – das Netz wimmelt von entsprechenden Beispielen. In der Praxis zeigt sich jedoch schnell, dass der Einsatz der Kommandos von der verwendeten Distribution abhängt.
Sie installieren ein System unter Linux neu. Der Installer fragt die gewünschten Systemeigenschaften ab und konfiguriert das System. Dazu legt er unter anderem ein Benutzerkonto an und fragt die zu installierende Software sowie einige grundlegende Systemeinstellungen ab. Viele Distributionen erfordern zudem das Anlegen eines Kontos für den administrativen User root.
Nach der Installation startet das System neu, ein nachgelagerter Prozess führt durch weitere Einstellungen. Anschließend steht der Rechner zur Alltagsarbeit bereit. Ab jetzt gelingen Konfigurationsänderungen sowie das Hinzufügen oder Löschen von Anwendungen nur noch mit Root-Rechten.
Prinzipiell gibt es zwei Wege, diese Rechte zu erhalten. Wir haben uns das am Beispiel der Distributionen Debian 9.2, Fedora 26 und Ubuntu LTS 16.04 einmal genauer angesehen. Die Tabelle “Konten nach der Installation” fasst die Unterschiede in Bezug auf das Anlegen von Benutzerkonten zusammen.
|
Distribution |
Benutzer |
Root |
Admin-Gruppe |
Besonderheiten |
|---|---|---|---|---|
|
Debian 9.2 |
ja |
ja |
sudo |
|
|
Fedora 26 |
ja |
ja |
wheel |
Benutzer in Admin-Gruppe optional |
|
Ubuntu LTS 16.04 |
ja |
nein |
sudo |
Benutzer in Admin-Gruppe |
Zu den Grundlagen für die hohe Sicherheit des Betriebssystems Linux zählt, dass die tägliche Arbeit mit eingeschränkten Rechten erfolgt, den sogenannten User- oder Benutzerrechten. Dagegen gelingen systemrelevante Änderungen, wie beispielsweise das Verwalten von Softwarepaketen, die Konfiguration von Diensten oder grundlegende Systemeinstellungen, nur mit Root-Rechten (siehe Kasten “Linux-Benutzer”).
Linux-Benutzer
Linux unterscheidet streng zwischen dem administrativen Benutzer root und normalen Benutzerkonten. Typischerweise legt die Installationsroutine ein Konto für root an. Dieser Benutzer unterliegt keinerlei Einschränkungen, die dem Konto zugeordneten Rechte erlauben den uneingeschränkten Zugriff auf das System. Deswegen bezeichnet man root häufig auch als Superuser. Normale Benutzer arbeiten hingegen mit eingeschränkten Rechten: Sie dürfen ausschließlich auf ihre eigenen Dateien zugreifen und keinerlei administrative Aufgaben erledigen.
Die Installer der betrachteten Distributionen erfragen die Daten für das Anlegen des Benutzerkontos, nicht jedoch zwangsläufig auch solche für das Konto root. So legt beispielsweise Ubuntu ein Root-Konto ohne Passwort an, das sich deswegen erst einmal nicht nutzen lässt. Damit er auch administrative Aufgaben erledigen kann, fügt Ubuntu den angelegten Benutzer stattdessen der Gruppe der Administratoren hinzu, die sudo heißt. Über das gleichlautende Kommando sudo kann der Benutzer dann Root-Rechte erlangen und administrative Aufgaben ausführen. Fedora erlaubt ebenfalls eine solche Gruppenzuordnung, richtet sie aber bei der Installation nur auf ausdrücklichen Wunsch ein.
Der einfachste Weg, sich Root-Rechte zu verschaffen, führt über die Anmeldung als root. Schafft es in diesem Zustand aber ein Schadprogramm, sich einzuklinken, erhält es damit den entsprechenden Rechtekontext und damit vollen Zugriff auf das gesamte System. Daher sollte man nur in Extremfällen als root arbeiten, etwa bei einer Systemwiederherstellung. Ubuntu geht hier sogar so weit, eine versehentliche Anmeldung als Root a priori zu unterbinden, indem das Konto in der Vorgabe kein Passwort erhält.
Ein normaler Benutzer nutzt die Kommandos su und sudo, um Befehle mit administrativen Rechten auszuführen. Nach Erledigung des jeweiligen Befehls kehrt der User automatisch wieder in den eingeschränkten Rechtekontext zurück, sodass potenzielle Malware keine Gelegenheit mehr hat, wichtige Systemeinstellungen zu manipulieren.
Die in der Vergangenheit häufiger verwendeten grafischen Ableger der Kommandos, wie etwa gksu und gksudo, verlieren zunehmend an Bedeutung, weswegen wir sie im Folgenden ausklammern.
Das Kommando <C>su<C>
Manche meinen, der Name des Kommandos su leite sich von “substitute user identity” ab (ersetze Benutzeridentität); andere halten es für eine Abkürzung des Begriffs “switch user”. Letzteres fällt nicht nur kurz und prägnant aus, sondern beschreibt den Einsatz auch perfekt; die grundlegende Syntax lautet
$ su [<i>Optionen<i>] [<i>Benutzer<i>]
Sie können also mit Su in den Rechtekontext jedes beliebigen Benutzers umschalten, müssen sich dazu aber mit dessen Passwort authentifizieren. Die Angabe der Parameter Optionen und Benutzer sind optional. Als Standardwert für Ersteres dient der Start einer interaktiven Shell; geben Sie kein Benutzerkonto an, nimmt Su an, dass Sie root werden möchten.
Alle Distributionen bringen das Kommando Su mit, bei Ubuntu lässt es sich aufgrund des nicht initialisierten Root-Passworts allerdings zunächst nicht für administrative Zugriffe verwenden.
Dem mit Root-Rechten auszuführenden Befehl stellen Sie ein -c voran. Erfordert dieser weitere Parameter oder möchten Sie mehrere Befehle übergeben, schließen Sie diese in Hochkommas ein (Listing 1). Sogar die Übergabe von Skripten ist möglich, aber aus Sicherheitsgründen nicht zu empfehlen. Die Tabelle “Anwendungsbeispiele von Su” zeigt einige typische Einsatzfälle.
Listing 1
$ su -c 'echo whoami - $(whoami); echo HOME - $HOME'
Passwort:
whoami - root
HOME - /root
|
Kommando |
Funktion |
|---|---|
|
|
Verzeichnis |
|
|
Name des Home-Verzeichnisses ausgeben ( |
|
|
Name des Benutzers ausgeben (root) |
|
|
Benutzer otto der Gruppe sudo hinzufügen(1) |
|
|
Benutzer otto aus der Gruppe sudo entfernen(1) |
|
|
Paket sudo installieren (fehlt bei Debian) |
|
(1) Änderung der Gruppenzuordnung greift erst bei Neuanmelden des Benutzers |
|
Das System notiert jede Verwendung von Su mit Benutzernamen und Zeitstempel. Bei Debian finden Sie die entsprechenden Einträge beispielsweise in der Textdatei /var/log/auth.log (Abbildung 1).
Bei Debian und Fedora bietet Su in der Vorgabe den einzigen Weg, um administrative Aufgaben als Benutzer zu erledigen. Zugehörige Hilfeseiten erhalten Sie mit der Eingabe von man su. Eine ausführlichere Dokumentation [1] gibt es nur in Englisch.
Der große Nachteil von Su: Zum Erledigen administrativer Aufgaben muss der Benutzer das Root-Passwort kennen. Auf Desktop-Systemen, wo es sich bei Root und Benutzer oft um dieselbe Person handelt, lässt sich das noch vertreten, in größeren Installationen sicherlich nicht.
Das Kommando <C>sudo<C>
An dieser Stelle setzt das Kommando sudo (“superuser do”) an. Die Vergabe der Root-Berechtigung erfolgt dabei auf Basis der Gruppenzugehörigkeit: Ist der aufrufende Benutzer Mitglied der administrativen Gruppe und kennt zudem sein eigenes Passwort, darf er Kommandos mit administrativen Rechten ausführen.
Alle Distributionen legen bei der Installation eine solche Admin-Gruppe an. Entsprechende Einträge in der Sudo-Konfigurationsdatei /etc/sudoers ermöglichen den uneingeschränkten Systemzugriff für die Mitglieder dieser Gruppe. Ubuntu und dessen Derivate ordnen den Benutzer bereits bei der Installation der Admin-Gruppe zu, bei vielen anderen Distributionen müssen Sie das manuell erledigen. Die Tabelle “Anwendungsbeispiele von Su” zeigt dies am Beispiel des Benutzers otto.
Beim Aufruf stellen Sie das Kommando sudo dem auszuführenden Befehl voran und hängen eventuelle Parameter direkt an. In der Tabelle “Anwendungsbeispiele von Sudo” finden Sie einige typische Beispiele.
|
Kommando |
Funktion |
|---|---|
|
|
Home-Verzeichnis des Benutzers Root anzeigen |
|
|
Benutzer otto der Gruppe sudo hinzufügen |
|
|
Benutzer otto aus der Gruppe sudo entfernen |
|
|
Root-Passwort setzen |
|
|
Programmpaket mc installieren |
In der Standardeinstellung verlangt Sudo beim ersten Aufruf die Eingabe Ihres Benutzerpassworts. Mit dem erfolgreichen Aufruf startet ein Timer. Bis er abläuft, erfolgt bei weiteren Sudo-Aufrufen keine weitere Passwortabfrage; jeder erneute Aufruf von Sudo setzt den Timer zurück. Der Timer bleibt mit dem Terminal verknüpft, in dem Sie Sudo gestartet haben.
Wie Su unterstützt auch Sudo die Eingabe mehrerer Befehle und – mit einigen Einschränkungen – auch das Ausführen direkt eingegebener Shell-Skripte. So darf das erste Kommando beispielsweise keine Variablenzuweisung sein. Auch bei Sudo sollten Sie jedoch pro Aufruf nur ein Kommando übergeben und aus Sicherheitsgründen auf die direkte Angabe von Skripten verzichten.
Aus offensichtlichen Gründen bleibt es Mitgliedern der Admin-Gruppe vorbehalten, dieser neue Benutzer hinzuzufügen. Versucht ein Benutzer ohne entsprechende Rechte, Sudo zu verwenden, erfolgt eine entsprechende Fehlermeldung. Gleichzeitig erhält Root eine E-Mail mit einer Warnung (Listing 2), die das System unter /var/mail/root/ ablegt. Außerdem protokolliert das System jeden Aufruf von Sudo, bei Debian und Ubuntu etwa in /var/log/auth.log (Abbildung 2).
Listing 2
$ sudo ls
[sudo] Passwort für otto:
otto ist nicht in der sudoers-Datei. Dieser Vorfall wird gemeldet.
Bei Mitgliedern der Admin-Gruppe fragt auch die grafische Oberfläche gegebenenfalls nach dem Passwort des Benutzers, anderenfalls nach dem Root-Passwort. Wie Abbildung 3 zeigt, verweist das System klar darauf, wessen Passwort Sie im konkreten Fall eingeben müssen.
Neben dem Erlangen von Root-Rechten bietet Sudo übrigens noch viele weitere Funktionen, die ein Aufruf von man sudo verrät.
Sudo anpassen
Die globale Sudo-Konfigurationsdatei finden Sie unter /etc/sudoers. Alle betrachteten Distributionen verfügen zudem über das Verzeichnis /etc/sudoers.d. Hier landen für gewöhnlich weitere Konfigurationsdateien, zumindest dann, wenn die globale Konfigurationsdatei den Eintrag #includedir /etc/sudoers.d enthält. Das Einlesen der Dateien erfolgt in alphabetischer Reihenfolge, der Aufruf man sudoers liefert weitere Informationen.
TIPP
Eine ausführliche und sehr nützliche Anleitung zur Konfiguration von Sudo über /etc/sudoers in englischer Sprache finden Sie auf den Webseiten des bolivianischen Elektroingenieurs und Linux-Enthusiasten Guillermo Garron [2]. Eine nicht ganz so ausführliche, dafür aber deutschsprachige Einführung rund um Sudo liefert Ubuntuusers.de [3].
Beachten Sie beim Bearbeiten der Sudo-Konfigurationsdateien die im Kasten “Sudo: Konfigurationsdateien” angegebenen Hinweise. Sperrt ein Syntaxfehler in der Konfiguration den Sudo-Zugang, dann kann nur noch root aus der Patsche helfen, ansonsten ist das System ein Servicefall.
Sudo: Konfigurationsdateien
Fehler in einer der Sudo-Konfigurationsdateien sperren den Sudo-Zugang. Beachten Sie daher beim Bearbeiten der Konfigurationsdateien unbedingt die folgenden Hinweise.
Stellen Sie sicher, dass Sie sich als root anmelden können – nur der administrative Benutzer kann einen gesperrten Sudo-Zugang wieder freischalten. Öffnen Sie als Test beispielsweise mit su eine interaktive Root-Shell. Bei Ubuntu müssen Sie vorab mittels sudo passwd root zunächst ein Root-Passwort vergeben.
Legen Sie mit administrativen Rechten eine Sicherungskopie der zu bearbeitenden Datei an, sodass Sie gegebenenfalls das Original wiederherstellen können.
Bearbeiten Sie die Konfigurationsdateien ausschließlich mit Visudo. Das Programm prüft vor dem Verlassen die bearbeitete Datei auf Unstimmigkeiten und erlaubt so Korrekturen. Verlassen Sie den Editor nur, wenn er keine Fehler meldet und Sie sich wirklich absolut sicher sind.
Bearbeiten Sie die Konfigurationsdateien in einem Ihnen vertrauten Editor. Setzen Sie diesen gegebenenfalls vor oder beim Aufruf von Visudo über die Systemvariable EDITOR. Möchten Sie etwa Vim verwenden, tippen Sie sudo EDITOR=vim visudo.
Vermeiden Sie das Bearbeiten der globalen Konfigurationsdatei /etc/sudoers, und nehmen Sie Änderungen stattdessen in separaten Dateien im Verzeichnis /etc/sudoers.d vor.
Das Einbinden externer Konfigurationsdateien erspart das Bearbeiten der teilweise recht komplexen globalen Konfigurationsdatei /etc/sudoers und ermöglicht, die gewünschten Änderungen strukturiert auf mehrere Dateien zu verteilen. Tritt dabei ein Fehler auf, sodass das System den Sudo-Zugang sperrt, löschen Sie einfach als root die fehlerhafte Konfigurationsdatei.
Sudo-Konfigurationsdateien bearbeiten Sie grundsätzlich und ausschließlich mit dem Programm Visudo (Listing 3). Rufen Sie es ohne Parameter auf, startet es den in der Systemvariablen $EDITOR eingetragenen Texteditor. Ist die Variable nicht gesetzt, verwendet Visudo den Standardeditor, typischerweise also Vim oder Nano.
Listing 3
$ sudo visudo -f /etc/sudoers.d/01_meine_konfig
Visudo überprüft beim Beenden des Editors die bearbeitete Datei auf Syntaxfehler. Treten Unstimmigkeiten auf, liefert es eine Warnung und gibt Ihnen die Möglichkeit, das Bearbeiten der Datei fortzusetzen. Wie Abbildung 4 zeigt, führt das Ignorieren dieser Warnung meist zu einem gesperrten Sudo-Zugang. Im Beispiel erfolgten die Änderungen in einer eigenen Konfigurationsdatei; nach deren Löschen durch root klappte der Zugang wieder.
Im Folgenden soll ein Beispiel demonstrieren, wie Sie die Konfiguration von Sudo anpassen. Erstellen Sie mit Visudo mit der Option -f die Datei /etc/sudoers.d/01_meine_konfig, und fügen Sie dort die in Listing 4 gezeigten Zeilen ein. Die Tabelle “Bedeutung der Konfigurationswerte (Debian)” zeigt die Bedeutung der einzelnen Einträge. Die Einstellungen greifen bereits nach dem Verlassen des Editors (Abbildung 5).
Listing 4
Defaults pwfeedback Defaults lecture=always Defaults passwd_tries=5 Defaults passwd_timeout=1 Defaults timestamp_timeout=1 Defaults insults
|
Wert |
Bedeutung |
Standardeinstellung |
|---|---|---|
|
|
Anzeige von Sternchen bei der Passworteingabe |
keine Rückmeldung der Tastatureingabe |
|
|
Verwendungshinweis vor jeder Passworteingabe |
nur bei der ersten Verwendung von Sudo |
|
|
maximal 5 Versuche zur Passworteingabe |
3 Versuche |
|
|
Timeout bei Passworteingabe 1 Minute |
kein Timeout |
|
|
Timeout für erneute Passworteingabe 1 Minute |
15 Minuten |
|
|
Ausgabe kleiner Anzüglichkeiten bei falschem Passwort (nicht bei Fedora) |
deaktiviert |
Fazit
Die Kommandos Su und Sudo erlauben das System zu administrieren, unterscheiden sich aber im Ansatz. In der Standardkonfiguration verläuft die Arbeit mit beiden Programmen problemlos. Bedenken Sie bei Anpassungen, dass das Verhalten beider Kommandos auch von anderen Sicherheitsmechanismen abhängt, wie beispielsweise den allgemeinen Zugriffsregeln, den Regeln der Pluggable Authentication Modules (PAM) sowie Secure-Linux-Erweiterungen.
Su und Sudo führen die übergebenen Kommandos unter unterschiedlichen Benutzerkonten aus. Damit ändern sich während der Ausführung auch einige Systemvariablen, wie etwa $HOME und $USER. Die zugehörigen Manpages enthalten dazu weitere Informationen; für die typischen Anwendungsszenarien spielt das jedoch keine Rolle.
Welches der beiden Kommandos Sie verwenden, bleibt letztendlich Ihnen überlassen und richtet sich zum Teil nach persönlichen Vorlieben. Beachten Sie aber, dass die Arbeit mit administrativen Rechten immer ein potenzielles Sicherheitsrisiko darstellt. Einige Tipps dazu finden Sie im Kasten “Sicherheitshinweise”.
Sicherheitshinweise
Root darf alles – selbst das System unsicher machen. Daher sollten Sie eine Reihe von Dingen vermeiden.
Selbst wenn es bequem erscheint, als Root zu agieren: Arbeiten Sie nur dann als administrativer Nutzer, wenn es sich nicht vermeiden lässt. Vermeiden Sie interaktive Root-Shells, und führen Sie länger aktiv bleibende Programme nicht mit Root-Rechten aus. Das gilt ganz besonders für Dateimanager wie etwa den Midnight Commander.
Vertippen Sie sich bei der Eingabe des Sudo-Passworts und haben die Eingabetaste bereits betätigt, dann warten Sie ab, bis das System sie erneut nach dem Passwort fragt – anderenfalls sind Ihre Eingaben sichtbar.
Der Benutzername von Root lautet immer root. Ein potenzieller Angreifer muss also nur noch das Passwort erraten. Vergeben Sie daher für dieses Konto immer ein besonders sicheres Passwort.
Aktuelle Distributionen ordnen jedem Benutzer eine eigene Gruppe zu; für Root heißt die zugehörige Gruppe root. Auch wenn das möglich ist: Fügen Sie niemals einen normalen Benutzer der Gruppe root hinzu.
Der Autor
Roman Jordan arbeitet seit mehr als 20 Jahren mit Linux. Zu den Schwerpunkten seiner Tätigkeit zählen der Einsatz von Linux als Entwicklungsumgebung für kleine Controllerplatinen sowie die Kernel-Programmierung.
Infos
-
Das Kommando
su: http://www.linfo.org/su.html -
Beschreibung zu
sudoers: https://www.garron.me/en/linux/visudo-command-sudoers-file-sudo-default-editor.html -
Sudo-Konfiguration: https://wiki.ubuntuusers.de/sudo/Konfiguration/










top