Hier nochmals die verkürzte Ausgabe eines ps Kommandos als Beispiel:
user@linux ~$
ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 448 64 ? S Jun21 0:07 init [3] root 2 0.0 0.0 0 0 ? SW Jun21 0:00 [keventd] nobody 650 0.0 0.1 5680 716 ? S Jun21 0:00 /usr/sbin/in.identd -e nobody 653 0.0 0.1 5680 716 ? S Jun21 0:01 /usr/sbin/in.identd -e lp 746 0.0 0.1 1944 712 ? S Jun21 0:00 lpd Waiting matthias 15971 0.0 0.2 2528 1188 tty1 S 01:09 0:00 /bin/sh/usr/X11R6/bin/startx matthias 16097 0.0 0.3 2816 1576 pts/1 S 01:09 0:00 /bin/bash
|
Die Benutzer root, nobody,
lp und matthias sind als Inhaber
der jeweiligen Prozesse gelistet. Die Autoren versichern Ihnen jedoch,
dass zum Zeitpunkt dieses Kommandos lediglich ein einziger Benutzer
auf dem System angemeldet war, nämlich der Benutzer matthias. Die
Tatsache, dass dennoch einige Prozesse auf dem System unter der Kennung
anderer Benutzer laufen, zeigt bereits an, dass es verschiedene Typen
von Benutzern geben muss. Gewöhnlichen Benutzern wäre es nämlich
unmöglich, ohne vorherige Anmeldung einen Prozess zu starten. Wir
unterscheiden daher drei Benutzertypen: Erstens den Systemverwalter
oder Superuser root, zweitens alle Standardbenutzer und drittens
die Systembenutzer.
Der Benutzer root ist mit allen Rechten ausgestattet, die ihm die
Administration (bei Unachtsamkeit natürlich auch die Beschädigung!)
des Systems erlauben. Diesem auch als Superuser bezeichneten
Benutzer ist immer die UID 0 zugeordnet:
root@linux ~#
id
uid=0(root) gid=0(root) Gruppen=0(root) [...]
|
Dieses Benutzerkonto dient ausschließlich Eingriffen in die Konfiguration
des Systems und sollte nur dann verwendet werden, wenn kein anderer
Benutzer die für eine Aufgabe notwendigen Rechte innehat. Der unter
Einsteigern beliebteste Fehler ist es, sich zunächst ausschließlich
als root anzumelden. Da nach der Systeminstallation ohnehin noch
häufig administrative Aufgaben erledigt werden müssen, wird es als
lästig empfunden, permanent zwischen einem Benutzer- und dem
Superuser-Konto hin- und herzuwechseln. Die Bequemlichkeit wird
oft mit einer Beschädigung des Systems bezahlt.
Es gibt Prozesse, die immer unter der Kennung des Superusers laufen
und auch laufen müssen. Das einfachste Beispiel ist der Prozess init,
der auch in der obigen Ausgabe erscheint. init ist der erste Prozess,
der nach dem Booten des Kernels die Kontrolle übernimmt und wird
daher auch als "Vater aller Prozesse" bezeichnet. Dies drückt sich
in der Prozess-ID 1 aus. Da zum Zeitpunkt des Startens von init
freilich noch kein Benutzer auf dem System angemeldet sein kann,
andererseits aber jedem Prozess eine gültige Benutzerkennung zugeordnet
sein muss, und da init des weiteren zur Erledigung seiner Aufgaben
mit weitreichenden Rechten ausgestattet sein muss, läuft init unter
der Kennung des Superusers root. Dass dies nicht nur für init gilt,
zeigt das folgende Kommando:
root@linux ~#
ps aux | grep root
root 1 0.0 0.0 448 76 ? S Oct25 0:07 init [...] root 4 0.0 0.0 0 0 ? SW Oct25 0:01 [keventd] [...] root 602 0.0 0.1 1356 552 ? S Oct25 0:01 /sbin/syslogd [...] root 1651 0.0 0.6 4856 3232 ? S Oct25 0:08 /usr/sbin/cupsd [...] root 2063 0.0 0.0 1260 4 tty1 S Oct25 0:00 /sbin/mingetty --noclear tty1 [...]
|
Diese nach Prozessnummern geordnete, verkürzte Liste zeigt im oberen Bereich
zunächst den Vater aller Prozesse init. Danach folgen kernelnahe Prozesse,
welche bereits früh während des Bootvorganges gestartet werden. Später kommen
einige Dienst- und Serverprozesse hinzu, darunter der Log-Daemon syslogd, der
Druckdienst cupsd sowie einige Terminalprozesse (mingetty's), welche das
Einloggen auf den verschiedenen Konsolen ermöglichen. All diese Prozesse
wurden nicht etwa von einem eingeloggten Benutzer root gestartet, sondern
automatisch beim Hochfahren des Systems - allerdings unter der Kennung von
root, d.h. mit UID 0.
|
Je nach System kann eine Vielzahl von Prozessen und Diensten
erwünscht sein, die bereits beim Hochfahren des Systems
verfügbar sein sollen. Nicht jeder dieser Prozesse benötigt
jedoch die volle Rechteausstattung des Superusers. Man möchte
natürlich so wenige Prozesse wie nur möglich unter einer root
Kennung starten, da die weitreichenden Rechte solcher Prozesse
unnötige Möglichkeiten für Missbrauch und Beschädigung des
Systems liefern.
Ein Systembenutzerkonto ist in diesem Sinne ein Benutzerkonto,
das jedoch (nahezu) ausschließlich zur Ausführung von Programmen unter
einer speziellen Benutzerkennung verwendet wird. Kein menschlicher
Benutzer meldet sich normalerweise unter einem solchen Konto an.
Die oben bereits gezeigte Ausgabe eines ps Kommandos zeigt zwei häufige
Beispiele: Der Drucker-Daemon lpd wurde unter der Benutzerkennung
lp gestartet. Zwei Prozesse werden unter der Kennung des Benutzers
nobody gelistet. nobody wird generell dann von Prozessen als
Benutzerkennung verwendet, wenn nur ein Minimum an Rechten
vergeben werden soll. Da nobody (laut Konvention, aber keineswegs
notwendigerweise) keiner Gruppe angehört, wird er gewöhnlich der
Benutzerklasse others angehören und somit die geringstmöglichen
Rechte besitzen. Mehr zu Benutzerklassen folgt unten.
Ein Blick in die zentrale Benutzerdatei (Details zu dieser Datei
folgen später) zeigt, dass vielen Systembenutzern explizit keine
Shell zugeordnet wird:
root@linux ~#
cat /etc/passwd | grep false
firewall:x:41:31:Firewall account:/var/lib/firewall:/bin/false postfix:x:51:51:Postfix daemon:/var/spool/postfix:/bin/false mysql:x:60:2:MySQL database admin:/var/lib/mysql:/bin/false dpbox:x:61:56:DpBox account:/var/spool/dpbox:/bin/false zope:x:64:2:Zope daemon:/var/lib/zope:/bin/false vscan:x:65:65534:Vscan account:/var/spool/vscan:/bin/false wnn:x:66:100:Wnn system account:/var/lib/wnn:/bin/false pop:x:67:100:POP admin:/var/lib/pop:/bin/false perforce:x:68:60:Perfoce admin:/var/lib/perforce:/bin/false
|
Das Programm /bin/false beendet sich ohne weitere Arbeit
selbst, sodass ein gewöhnlicher Login als einer der aufgeführten
Benutzer nicht zu einer Shellsession führen kann. Prozesse unter
dieser Kennung werden somit nicht von einer Benutzershell gestartet,
sondern über andere, systemeigene Mechanismen (beispielsweise über
Startskripte während des Bootens).
Es soll jedoch nochmals ausdrücklich erwähnt werden, dass die
Unterscheidung zwischen Systembenutzern und Standardbenutzern
willkürlich ist und nicht durch das Linux-Rechtesystem selbst
festgelegt wird. Es hilft jedoch beim Verständnis diverser
Rechtekonzepte, wenn man sich der Tatsache bewusst ist, dass
es zahlreiche Benutzerkonten gibt, welche ausschließlich
im Zusammenhang mit bestimmten Diensten verwendet werden.
|
Dies ist das normale Benutzerkonto, unter welchem jeder
üblicherweise arbeiten sollte.
|
|