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