[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

Translation(s): Chinese - Deutsch - English

Wie man Root wird

Es wird ausdrücklich empfohlen, Programme mit GUI nicht mit Root-Rechten zu starten. Es ist besser, sich als Normalnutzer einzuloggen und die Root-Rechte nur einzufordern, wenn sie benötigt werden.

<<TableOfContents: execution failed [Argument "maxdepth" must be an integer value, not "[1]"] (see also the log)>>

1. Benutzen des su-Befehls

Viele Befehle können nur als root ausgeführt werden, also müssen wir "root" werden. Um dies zu tun, können wir den Befehl 'su' nutzen (substitute user, etwa: wechsle Nutzer). Der Befehl 'su' hat folgendes Aufrufformat:

su - <Benutzer>

oder

su <Benutzer>

Aber hauptsächlich werden wir 'su' benutzen, um der Benutzer root zu werden:

su - root

oder

su root

Wenn kein Benutzername angegeben wird, wird angenommen, dass root gemeint ist. Dadurch kann der Befehl abgekürzt werden zu:

su -

oder

su

Diese beiden Befehle verhalten sich leicht unterschiedlich. Beide Befehle geben dem aktuellen Nutzer die Identität von <Benutzer>. Zusätzlich richtet 'su - <Benutzer>' dem aktuellen Benutzer die Umgebungsvariablen von <Benutzer> so ein, als würde <Benutzer> sich selbst einloggen.

Oft wird ein Benutzer zum Root, indem er nur 'su' benutzt. Wenn nun ein Befehl ausgeführt wird (z.B. 'ifconfig'), kann es sein, dass der Fehler 'Befehl nicht gefunden' auftaucht. Zum Beispiel:

$ su
Passwort:
# ifconfig
bash: ifconfig: Befehl nicht gefunden.

Der Grund ist, dass normale Systembenutzer und Root oft unterschiedliche PATH-Umgebungsvariablen haben. Wenn ein Linux-Befehl ausgeführt werden soll, durchsucht die Shell die PATH-Variable des Benutzers, um den Befehl auszuführen. Es durchsucht jeden Ordner in PATH, bis ein Treffer gefunden wird.

Wenn Leute ein Problem einschicken, ob im IRC oder auf andere Art, werden sie oft auf diese Seite verwiesen. Bei der Fehlersuche, WARUM ein Befehl nicht erkannt wird, ist es hilfreich, sich den derzeit wirksamen PATH anzeigen zu lassen. Das geht mit diesem Befehl: 'echo "$PATH"'

Befehle normaler Nutzer befinden sich hauptsächlich in /usr/bin, /bin und gelegentlich in /usr/local/bin -- Die Verzeichnisse unter /usr/local/* werden von CentOS nicht selbst genutzt, sondern nur von Drittanbietern. Root-Programme befinden sich hauptsächlich in /usr/sbin, /sbin und gelegentlich in /usr/local/sbin. Daher sieht der PATH für den root-Benutzer üblicherweise so aus: '/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'.

Beim Benutzen von 'su -' wird die Umgebungsvariable PATH des root-Benutzers benutzt, wohingegen ein einfaches 'su' die PATH-Variable des Originalbenutzers nutzt. Daher bewirkt der einfache 'su'-Befehl in Kombination mit bestimmten Befehlen, die sich in /usr/local/sbin, /usr/sbin oder /sbin befinden, dass die Fehlermeldung 'Befehl nicht gefunden' erscheint. Weiterführende Erklärungen finden Sie im Handbuch der bash ('man bash'), insbesondere in den Abschnitten INVOCATION (Aufruf) und LOGIN SHELLS.

Entweder muss also der komplette Pfad des Befehls angegeben werden, wenn nur 'su' ausgeführt wurde (z.B. /sbin/ifconfig) oder man benutzt 'su -', um Root zu werden.

2. Benutzen von sudo

Für manche administrative Aufgaben ist es gar nicht erforderlich, sich jedes mal als Root anzumelden. Dank sudo können manche oder alle Befehle als Root ausgeführt werden. Wenn das Paket sudo einmal installiert ist, kann es per 'visudo'-Befehl (als Root) konfiguriert werden. An sich startet es $EDITOR (standardmäßig vim) auf /etc/sudoers, aber es wird nicht empfohlen, dies manuell zu bearbeiten. Auf einem Desktop-Computer ist der empfohlene Weg, sudo statt su zu nutzen.

Der schnelle und schmutzige Weg, um sudo zu nutzen, ist das Hinzufügen folgender Zeile ans Ende der sudoers-Datei:

bob    ALL=(ALL)       ALL

Wobei Sie anstatt bob Ihren eigenen Benutzernamen eingeben. (Im weiteren Text wird weiterhin von bob die Rede sein.) Speichern Sie die Datei (indem Sie Escape drücken und dann ZZ eingeben), und dann kann es losgehen. Loggen Sie sich als bob ein und starten Sie zum Beispiel dies:

$ sudo yum update

sudo wird ein Passwort erfragen, und zwar das von bob und nicht vom Root. Das bedeutet, dass bob nun alle Befehle mit Root-Rechten ausführen darf, wenn er nur sein eigenes Passwort kennt. Seien Sie also vorsichtig, welchem Benutzer Sie diese allumfassenden sudo-Rechte geben.

Sudo kann aber noch mehr. Es ist möglich, einem bestimmten Benutzer oder einer Gruppe von Benutzern zu erlauben, nur einen einzigen Befehl oder eine Gruppe von Befehlen auszuführen. Dazu wird wieder die Datei sudoers bearbeitet, die übrigens unter CentOS gut kommentiert ist. Im ersten Beispiel gibt es die beiden Nutzer bob und alice, die Mitglieder der Gruppe admin sind. Wenn alle Nutzer der Gruppe admin jeden Befehl als Root ausführen dürfen sollen, können wir unser Beispiel so ändern:

%admin    ALL=(ALL)       ALL

bob hat immer noch dieselben Rechte wie kurz zuvor (da er ja in der Gruppe admin ist), nur darf alice nun auch sudo mit denselben Rechten ausführen, aber mit ihrem Passwort. Falls bob und alice nicht in derselben Gruppe sein sollten, können in der sudoers-Datei Aliase definiert werden:

User_Alias ADMINS = alice, bob

Hier definieren wir einen Alias namens ADMINS mit den Mitgliedern alice und bob. Der Name des Alias muss zwingend in Großbuchstaben sein, damit er sich von den Benutzernamen unterscheidet.

Wir wollen jedoch nicht, dass alice und bob jeden Befehl als Root ausführen können, wir wollen nur updatedb erlauben. Hier definieren wir einen Befehl-Alias:

Cmnd_Alias LOCATE = /usr/sbin/updatedb

Das war noch nicht alles! Wir müssen sudo verraten, dass alle Benutzer aus ADMINS die Befehle aus LOCATE ausführen können. Um dies zu tun, ersetzen wir die Zeile mit "%admin" durch diese:

ADMINS ALL = LOCATE

Es bedeutet, dass Benutzer des Alias ADMINS nun alle Befehle aus LOCATE ausführen können.

Zur Zeit sollte /etc/sudoers so aussehen:

User_Alias ADMINS = alice, bob
Cmnd_Alias LOCATE = /usr/bin/updatedb

ADMINS ALL = LOCATE

Aufgrund dieser Regeln können alice und bob nun updatedb mit Root-Rechten ausführen, nachdem sie jeweils ihr eigenes Passwort eingeben haben.

Wenn wir die letzte Zeile der Datei nun hiermit ersetzen:

ADMINS ALL = NOPASSWD: LOCATE

können alice und bob nun sudo updatedb ausführen, ohne ein Passwort eingeben zu müssen.

Es ist möglich, mehr Befehle in ein Befehl-Alias hinzuzufügen und mehr Aliase in die Regel. Zum Beispiel können wir einen Alias NETWORKING erstellen, der Netzwerkbefehle wie ifconfig, route und iwconfig enthält:

Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
                        /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

Wenn man diesen Alias in die Datei /etc/sudoers eingetragen hat und der Gruppe ADMINS diese Befehle erlaubt hat, sieht die Datei so aus:

User_Alias ADMINS = alice, bob
Cmnd_Alias LOCATE = /usr/bin/updatedb
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
                        /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

ADMINS ALL = LOCATE, NETWORKING 

Ein kleiner Versuch: loggen Sie sich als alice (oder bob) ein, und führen Sie dies aus:

$ping -c 10 -i 0 localhost

Die Anwort sollte schnell da sein:

PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
ping: cannot flood; minimal interval, allowed for user, is 200ms

Nun mit sudo:

$sudo ping -c 10 -i 0 localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=64 time=0.021 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=4 ttl=64 time=0.030 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=5 ttl=64 time=0.017 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=6 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=7 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=8 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=9 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=10 ttl=64 time=0.016 ms
--- localhost.localdomain ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 1ms
rtt min/avg/max/mdev = 0.016/0.023/0.049/0.010 ms, ipg/ewma 0.187/0.028 ms

sudo wird oft genutzt, um bestimmten Benutzern teilweise Zugriff auf höhere Befehle zu geben, sodass sie eingeschränkt administrative Aufgaben erledigen können. sudo hat eine weitere nützliche Eigenschaft: Alle sudo-Befehle werden in /var/log/secure protokolliert. Das obige Beispiel schreibt folgendes ins Protokoll:

Apr 18 11:23:17 localhost sudo: bob  : TTY=pts/0 ; PWD=/home/bob ; USER=root ; COMMAND=/bin/ping -c 10 -i 0 localhost 

Das war's. Vergessen Sie niemals bei Benutzung von sudo: "aus großer Macht folgt große Verantwortung".

2.1. Sudo shell

Wenn in sudoers ausreichend Rechte konfiguriert wurden, kann auch hiermit eine Root-Shell ausgeführt werden:

sudo -s

oder

sudo -i

Letzteres funktioniert erst ab CentOS 5. Bei sudo -s bekommt man eine Root-Shell mit den Umgebungsvariablen des ausführenden Benutzers. Seien Sie vorsichtig, denn es werden Dateien als root erstellt und geändert, aber $HOME zeigt auf das Home-Verzeichnis des ausführenden Benutzers.

3. Graphische Helferlein

3.1. GNOME

To do...

3.2. KDE

Der Eintrag 'Run Command...' im KDE-Menü hat die Möglichkeit (unter Optionen), einen Befehl oder eine Anwendung als ein anderer Benutzer auszuführen, wenn dessen Benutzer-Berechtigung (speziell: credentials) angegeben werden. Anwender, die sich in der Befehlszeile unsicherer fühlen, können diese Alternative in Betracht ziehen, die auf einer grafischen Benutzeroberfläche basiert.

4. consolehelper

consolehelper ist eine Hülle, um GUI-Anwendungen auszuführen. Beim Starten prüft es die Konfiguration von PAM für die gewünschte Anwendung. Dies bedeutet, dass Benutzer durch die installierten PAM-Module beglaubigt werden können. Die Standard-Methode ist es, nach einem Passwort zu fragen, aber wenn wir die richtige Hardware haben, können wir ebenso Smartcards, Tokens, Fingerabdrücke usw. beglaubigen. Die Konfiguration von PAM soll hier aber nicht behandelt werden (siehe PAM Administratorhandbuch), wir werden es hier nur so konfigurieren, damit consolehelper Programme als Root ausführen lassen kann und das Root-Passwort erfordert.

Als Beispiel soll /usr/bin/xterm so eingestellt werden, dass man es als Root ausführen kann.

Zuallererst soll xterm selbst weiterhin als normaler Benutzer ausgeführt werden können, also erstellen wir einen symbolischen Link /usr/bin/xterm-root nach /usr/sbin/consolehelper:

ln -s /usr/sbin/consolehelper /usr/bin/xterm-root

Um PAM zu konfigurieren, erstellen wir die Datei /etc/pam.d/xterm-root:

#%PAM-1.0
auth            include         config-util
account         include         config-util
session         include         config-util

Zum Schluss muss consolehelper eingestellt werden, sodass /usr/bin/xterm als Root ausgeführt wird, wenn 'xterm-root' gestartet wird. Erstellen Sie die Datei /etc/security/console.apps/xterm-root:

USER=root
PROGRAM=/usr/bin/xterm

Das war's. Führen Sie nun 'xterm-root' aus (von der Befehlszeile oder mittels einer .desktop-Datei), geben Sie das Root-Passwort ein und genießen Sie Ihre Rechte. Falls ein Fehler wie dieser auftritt: "Xlib: connection to ":0.0" refused by server", starten Sie zuerst 'xhost local:root'.


2023-09-11 07:23