Benutzer und Rechte

Allgemeines

Linux kennt unterschiedliche Benutzer, Gruppen und Rechte im Dateisystem. Dateien gehören einem Benutzer und werden einer Gruppe zugeordnet und kennen Rechte für Benutzer, Gruppe und alle anderen. Benutzer können in mehreren Gruppen sein, es gibt jedoch eine primäre Gruppe in der ein Benutzer ist.

Beim anmelden meldet sich ein Benutzer mit Benutzername und Kennwort am System an. Alle Aktionen die er ausführt geschehen mit den Rechten dieses Benutzers. Programme die der Benutzer startet, werden ebenfalls mit den Rechten seines Benutzers gestartet.

Der Benutzer root ist im System allmächtig und kann jedes Recht brechen. Zu bestimmten administrativen Funktionen ist nur der root-Benutzer berechtigt. Generell kennt Linux nur 2 Arten von Benutzern: root und normale Benutzer, zusätzliche Zwischenabstufungen gibt es nicht, es ist jedoch möglich normalen Benutzern erweiterte Befugnisse zu geben (mit dem Programm sudo).

Benutzerverwaltung

Benutzer werden mit dem Kommando useradd angelegt. Das kann z. B. so aussehen:

useradd -m -c "Test User" testuser

Der Parameter -m legt dabei gleich ein Heimatverzeichnis für den neuen User an und kopiert Vorlagendateien aus /etc/skel in das neue Heimatverzeichnis. Das Heimatverzeichnis wird dabei mit dem Namen des neuen Benutzers und unterhalb eines vorher festgelegten Standardpfades angelegt. Dieser Standardpfad ist normalerweise /home. -c fügt einen Kommentar für den neuen Benutzer hinzu, in dem normalerweise einfach der vollständige Name des Benutzers steht.

Es gibt noch eine ganze Reihe weiterer Parameter für den Befehl useradd wie etwa -s um die Login-Shell festzulegen, -g für die primäre Gruppe, -G für sekundäre Gruppen oder -d um ein Heimatverzeichnis außerhalb des Standardpfades (und ohne kopieren der Dateien aus /etc/skel) festzulegen. Werden bestimmte Werte nicht angegeben, die aber notwendig sind (wie z. B. die Shell) wird immer ein Standardwert benutzt. Dieser Standardwert läßt sich mit dem Parameter -D für useradd festlegen. Ein:

useradd -D

Zeigt die Standardwerte die im Moment gelten an. kombiniert man den Parameter -D mit einem weiteren Parameter wie z. B. -s für die Shell setzt man den Standardwert für diesen Paremeter:

useradd -D -s /bin/bash

Dies setzt den Standardwert für die Shell auf /bin/bash.

Das Verzeichnis /etc/skel existiert als Vorlagenverzeichnis im System um bestimmte Dateien oder eine bestimmte Ordnerstruktur für jedes neue Benutzerkonto welches mit dem Parameter -m angelegt wurde, gleich ins neue Heimatverzeichnis zu kopieren. Dadurch ist es also möglich Vorgaben für den Inhalt neuer Heimatverzeichnisse zu erstellen.

Um Benutzer ändern zu können (z. B. um die Gruppenzugehörigkeiten zu ändern oder die Loginshell) gibt es den Befehl usermod. Möchte man mit usermod allerdings die Gruppenzugehörigkeit eines Benutzers ändern, sollte man beachten das man bei den sekundären Gruppen immer alle Mitgliedsgruppen aufführen muß, da sonst der Benutzer aus den bisherigen Mitgliedsgruppen herausgeworfen wird. Für usermod lassen sich dabei die gleichen Parameter verwenden wie für useradd. Ein Beispiel:

usermod -G lpadmin,admin,audio,cdrom karl

Hierdurch wird der User karl Mitglied in den Gruppen lpadmin, admin, cdrom und audio als sekundäre Gruppen. Sollte er vorher noch in einer anderen hier nicht aufgeführten Gruppe Mitglied gewesen sein, wird er aus dieser entfernt.

Löschen lassen sich Benutzer durch den Befehl userdel. Das Kommando userdel kennt nur einen Parameter: -r löscht auch das zugehörige Heimatverzeichnis des Benutzers. Ohne den Parameter -r bleiben alle Daten des Benutzers bestehen und er wird nur aus der Benutzerdatenbank gelöscht:

userdel -r karl

Passwörter

Der Befehl useradd legt einen Benutzer nur an ohne ihm ein Passwort zu geben. Ohne Passwort kann er sich jedoch nicht am System anmelden. Um Passwörter setzen oder ändern zu können gibt es den Befehl passwd. Mit passwd (ohne weitere Parameter) kann ein Benutzer sein eigenes Passwort ändern. Dazu muß er zuerst das alte Passwort und dann 2 mal das neue Passwort eingeben. Root kann mit passwd Passwörter beliebiger Benutzer setzen (ohne das alte Passwort eingeben zu müssen):

passwd karl

Dies setzt das Passwort für Karl. Bei der Passworteingabe wird nichts auf dem Bildschirm angezeigt (auch keine Sternchen).

Gruppenverwaltung

Gruppen lassen sich analog zu Benutzern über die Befehle groupadd, groupmod und groupdel anlegen, ändern und löschen. Für diese Befehle gibt es dabei deutlich weniger Parameter:

groupadd webautoren

Dies legt die Gruppe webautoren an.

groupdel webautoren

Dies löscht die Gruppe wieder.

Was ist der Unterschied zwischen der Primären und den sekundären Gruppen? Ein Benutzer kann nur in einer Gruppe primäres Mitglied sein, aber in beliebig vielen sekundären Gruppen. Werden Dateien neu angelegt, müssen diese außer einem Besitzer, auch einer Gruppe gehören. Hierzu wird die primäre Gruppe benutzt. Neu angelegte Dateien gehören also immer zur primären Gruppe des Benutzers der diese Datei angelegt hat. Dieses Verhalten hat Linux übrigens nicht mit allen anderen unixbasierten Systemen gleich: BSD-basierte Systeme legen neue Dateien immer mit der Gruppe, der das Verzeichnis angehört, in der diese angelegt werden, an.

In welchen Gruppen ein Benutzer Mitglied ist, kann man durch den Befehl group erkennen:

group user1

Dieser Befehl listet auf in welchen Gruppen user1 Mitglied ist.

Dateien für Benutzer und Gruppen

Irgendwo im System müssen die Informationen über Benutzer und Gruppen gespeichert werden. Dies machen einige einfache Textdateien im Verzeichnis /etc: /etc/passwd, /etc/shadow und /etc/group.

Die Datei /etc/passwd ist die eigentliche Benutzerdatenbank. In dieser Datei repräsentiert jede Zeile einen Benutzer (sie fängt mit dem Root-Benutzer an) und enthält durch Doppelpunkt getrennt, mehrere Spalten. Dabei bedeuten die Spalten in ihrer Reihenfolge von links nach rechts: Loginname, Platzhalter für das Passwort, numerische Benutzer-Id, numerische Gruppen-Id der primären Gruppe, Kommentarfeld, Pfad zum Heimatverzeichnis, Pfad zur Login-Shell.

Der Platzhalter für das Passwort, hat historische und Sicherheitsgründe: Früher enthielt die Datei auch das Passwort (in verschlüsselter Form). Da dies jedoch auch in verschlüsselter Form, ein Sicherheitsrisiko darstellt (die Datei /etc/passwd ist für jeden Benutzer auf dem System lesbar), gibt es inzwischen eine eigene nur für den Root-Benutzer lesbare Datei: /etc/shadow. Dies bezeichnet man als Shadow-Passwörter. Auch die /etc/shadow beinhaltet die Passwörter natürlich nur in verschlüsselter Form. Für die Passwortverschlüsselung in der Datei, werden dabei Hashverfahren, wie z. B. MD5 verwendet. Welches Verfahren genau zum Einsatz kommt, ist je nach Linuxdistribution unterschiedlich. Auch die /etc/shadow hat wiederrum die Aufteilung je Zeile ein Benutzer und Spalten werden durch Doppelpunkt getrennt. In der /etc/shadow, ist die erste Spalte der Benutzername, dann kommt das verschlüsselte Passwort, dann kommen mehrere Felder die das Alter und das erlaubte Maximalalter des Passwortes beschreiben. Die Details dazu findet man in der Manpage zur /etc/shadow, welche sich mit man shadow aufrufen läßt. Änderungen an der Passwortpolicy der /etc/shadow wie etwa das erlaubte Maximalalter eines Passwortes lassen sich mit dem Befehl chage setzen:

chage -M 60

Dies setzt das Maximalalter eines Passwortes auf 60 Tage, bevor es geändert werden muß. Der Wert -1 deaktiviert den Check auf das Maximalalter eines Passwortes (was die Standardeinstellung ist).

Die Datei /etc/group listet alle Gruppen des Systems auf. Die Syntax ist genauso wie die der anderen Datei: Jede Zeile eine Gruppe und die Spalten werden mit Doppelpunkten getrennt. Die erste Spalte ist der Gruppenname, die zweite ein Platzhalter für ein Gruppenpasswort, die dritte die numerische Gruppen-ID und die Vierte ist die Mitgliedsliste der Gruppe. Das vergeben von Gruppenpasswörtern ist möglich, wird allerdings praktisch nicht verwendet.

Die Liste der Gruppenmitglieder einer Gruppe in der vierten Spalte, enthält nur die Mitglieder, für die diese Gruppe eine sekundäre Gruppe ist. Die primäre Gruppe wird ja bereits in der /etc/passwd festgelegt. Gruppenmitgliedschaften können also auch durch direktes editieren der /etc/group verändert werden. Generell ist es möglich alle Veränderungen an Benutzern und Gruppen auch durch direktes editieren der entsprechenden Dateien zu erreichen, aber dies bahnt auch Syntaxfehlern den Weg, so das es meist vorzuziehen ist die Kommandos useradd, groupadd, userdel usw. zu benutzen.

Alle Benutzer und Gruppen werden über eine Nummer, die User-Id, bzw. Gruppen-Id im System erkannt. Linux benutzt intern nicht die Namen von Benutzern und Gruppen, sondern nur die numerische Ids. Diese Nummern liegen zwischen 0 und 65534, wobei 0 immer der Root-Benutzer ist. Werden 2 Benutzern die gleiche User-Id zugewiesen, handelt es sich aus Sicht von Linux um ein und denselben Benutzer und beide Benutzer haben genau die gleichen Rechte im System. Es ist ein altbekannter Hackertrick auf einem System in welches erfolgreich eingebrochen wurde, einen zusätzlichen Benutzeraccount mit der User-Id 0 zu erstellen, um einen extra Root-Zugang (mit eigenen Passwort) ein wenig zu tarnen.

Außer dem tatsächlichen menschlichen Benutzern, existieren immer auch Systemaccounts für Dienste auf einem Rechner. Solche Systemaccounts dienen dazu Dienste mit geringeren Privilegien laufen zu lassen (um bei einer kompromitierung des Dienstes dem Angreifer nicht gleich Root-Rechte zu geben). Diese Accounts haben meist keine wirklichen Heimatverzeichnisse und benutzen User-Ids zwischen 1 und 499 oder 999. Die richtigen Benutzer bekommen dann User-Ids ab 1000.

Benutzerwechsel

Manchmal möchte man kurzzeitig seinen Benutzer wechseln, ohne sich extra auszuloggen und neu einzuloggen. Meist möchte man das um kurzzeitig administrative Aufgaben mit root-Rechten zu erledigen. Hierfür existiert der Befehl su. Verwendet man su ohne Benutzername wird immer zum root-Benutzer gewechselt. Man kann su aber auch mit einen anderen Benutzernamen verwenden um die Identität dieses Benutzers anzunehmen. Selbstverständlich muß man dazu auch das Passwort des Benutzers angeben.

su -l

Dieses Kommando fragt nach dem Passwort für root und wechselt dann zum root-Benutzer. Der Parameter -l (oder in Kurzform auch nur -) steht dabei für einen vollständigen Login. Benutzt man nur su ohne Parameter wird zwar die User-Id gewechselt, aber es werden nicht alle Aktionen wie bei einem Login ausgeführt. Das momentane Arbeitsverzeichnis wird nicht geändert und es werden keine Profildateien, wie etwa ~/.bash_profile oder ~/.profile gelesen. Mit einem su -l werden jedoch alle diese Aktionen durchgeführt. Das momentane Arbeitsverzeichnis wird auf das Heimatverzeichnis des Zielbenutzers gewechselt.

Eine Alternative oder Ergänzung zu su stellt noch das Kommando sudo dar. Für sudo kann in einer Konfigurationsdatei festgelegt werden, welcher Benutzer welche Kommandos mit root-Rechten (oder auch den Rechten eines anderen Benutzers) ausgeführt werden. Kommandos die dann mit Root-Rechten gestartet werden, werden über sudo kommandoname aufgerufen:

sudo mkdir -p /srv/samba

Dieses Kommando erzeugt das Verzeichnis /srv/samba mit root-Rechten. sudo verlangt dazu das Passwort des aufrufenden Benutzers, nicht des Zielbenutzers. Dadurch lassen sich also auch root-Rechte auf Benutzer übertragen, ohne diesen das eigentliche Root-Passwort zu nennen. Möchte man nicht vor jedes einzelne Kommando ein sudo setzen, sondern mehrere Kommandos mit root-Rechten hintereinander ausführen, kann man sudo -s oder sudo -i benutzen. Dabei entspricht sudo -i einem su -l, während sudo -s wie ein einfaches su reagiert (sudo -i führt also einen vollständigen Login auf den Zielbenutzer aus):

sudo -s

Unter der Linuxdistribution Ubuntu gilt die Besonderheit, das das System so konfiguriert ist, daß gar kein su benutzt wird, sondern ausschließlich nur sudo. Unter Ubuntu kann jeder der in der Gruppe admin Mitglied ist, jedes Kommando per sudo mit root-Rechten aufrufen.

eingeloggte Benutzer anzeigen

Mit dem Kommando w kann ich sehen wer gerade eingeloggt ist. Ganz ähnlich nur mit etwas anderen Informationen ist auch der Befehl who, dessen Anzeige etwas knapper als die von w ist. Möchte ich eine Übersicht bekommen, wer sich alles in letzter Zeit eingeloggt hat kann ich den Befehl last verwenden. Die neuesten Einträge stehen bei last oben.

Rechte

Jede Datei unter Linux kennt Rechte jeweils für deren Besitzer (das ist im allgemeinen die Benutzer-Id die die Datei erzeugt hat), der Gruppe der sie zugehört und allen Anderen. Dabei gibt es die Rechte lesen, schreiben und ausführen. Das sind also 3 mal 3 Rechte, welche auch so dargestellt werden: rwxrwxrwx. r steht für read, also lesen, w für write, also schreiben und x für execute, also ausführen. Der Befehl ls -l zeigt dabei die Rechte für eine Datei an, die Ausgabe kann z. B. so aussehen:

-rw-rw-r-- 1 root webautor 1808 Mar 3 17:12 index.html

In diesem Fall handelt es sich um die Datei index.html, welche den Besitzer root und der Gruppe webautor gehört. Die Datei hat Lese- und Schreibrecht für den Besitzer und die Gruppe, sowie Leserecht für Andere und keine Ausführungsrechte.

Die Rechte selbst werden durch einzelne Bits im Dateisystem dargestellt, die gesetzt sein können oder nicht. Ist z. B. das Leserecht und das Schreibrecht, aber nicht das Ausführrecht gesetzt, lautet die Bitfolge 110. Setzt man diese Binärzahl als Dezimalzahl um, hat diese den Wert 6. Daher werden Unixrechte auch in 3 Zahlen dargestellt. Die vorher gezeigte Datei index.html hat z. B. die Rechte 664. Eine Tabelle zeigt alle Rechte:

BesitzerGruppeAndere
keine Rechte---------
Lesenr--r--r--
Lesen und Schreibenrw-rw-rw-
Lesen und Ausführenr-xr-xr-x
Lesen, Schreiben und Ausführenrwxrwxrwx

Oder in Zahlen:

BesitzerGruppeAndere
keine Rechte000
Lesen444
Lesen und Schreiben666
Lesen und Ausführen555
Lesen, Schreiben und Ausführen777

Rechte können grundsätzlich nur auf Dateien gesetzt werden. Da unter Linux/Unix aber auch Geräte Dateien sind, können natürlich auch auf die Gerätedateien Rechte gesetzt werden. Hat ein Benutzer z. B. kein Schreibrecht auf die Gerätedatei für die Soundkarte, kann er auch keine Audiodateien abspielen, da schreiben in diesem Fall das schreiben von Tönen auf die Soundkarte, also abspielen bedeutet, während lesen von der Soundkarte, aufnehmen ist.

Verändert werden die Rechte mit dem Befehl chmod. Dabei kann man sowohl die Zahlenschreibweise, wie auch die symbolische Schreibweise für die Rechte verwenden. Zwei Beispiele:

chmod 640 datei.txt
chmod g-w,o=r daten.txt

Mit dem ersten Befehl werden die Rechte 640 (also rw-r-----) für die Datei datei.txt gesetzt. Mit dem zweiten Beispiel wird für die Datei daten.txt das Schreibrecht für die Gruppe entzogen und zugleich das Leserecht für alle anderen gesetzt. Die symbolische Schreibweise bedarf einer etwas genaueren Erklärung: Die Buchstaben u, g, o und a stehen jeweils für Besitzer (user), Gruppe, Andere (other) und Alle. Danach folgt entweder ein Minuszeichen für Recht entziehen, ein Pluszeichen für Recht hinzufügen oder ein Gleichheitszeichen für Rechte genau so setzen. Dadurch können bestimmte Rechte verändert werden egal wie die anderen Rechte stehen. Ein paar weitere Beispiele dafür:

chmod u+w *
chmod a+x script
chmod -R o+r *
chmod -R g-w daten

Im ersten Beispiel wird das Schreibrecht für den Besitzer für alle Dateien im momentanen Verzeichnis hinzugefügt. * ist dabei ein Wildcardzeichen, das auf alle Dateien, außer versteckten Dateien zutrifft. Im zweiten Beispiel wird die Datei script für alle Benutzer ausführbar gemacht. Sollten die Rechte beispielsweise vorher auf rw-r--r-- gestanden haben, stehen sie nach Ausführung des Befehls auf rwxr-xr-x. Sollten sie vorher auf rw-r-x--- gestanden haben, stehen sie nach dem Befehl auf rwxr-x--x.

Im dritten Beispiel wird zusätzlich der Parameter -R verwendet, welcher für Verzeichnisse bedeutet, das der Befehl auch auf den Inhalt des Verzeichnisses, also rekursiv auf alles was darunter liegt angewendet wird. In diesem Fall wird auf alle Dateien das Leserecht für Andere hinzugefügt. Sollte vorher eine Datei bereits Leserechte für Andere gehabt haben, verändert sich dadurch nichts. Im letzten Beispiel wird rekursiv das Schreibrecht für die Gruppe auf den Inhalt des Verzeichnisses daten entzogen. Sollte daten eine Datei und kein Verzeichnis sein, so würde dies auf die Datei angewendet werden und das -R für rekursiv würde ohne Wirkung bleiben.

Die symbolische Schreibweise, ist also besonders dann sehr nützlich, wenn man für einen ganzen Verzeichnisbaum nur ein ganz bestimmtes Recht setzen oder entziehen möchte, ohne die restlichen Rechte zu verändern.

Der Befehl chmod kann von root für alle Dateien verwendet werden und von normalen Benutzern, nur für die Dateien, deren Besitzer der jeweilige Benutzer ist.

Besitzer ändern

Mit dem Befehl chown läßt sich der Besitzer einer Datei ändern:

chown user1 datei

Mit diesem Befehl wird user1 Besitzer der Datei datei. Man kann mit chown auch Besitzer und Gruppe einer Datei gleichzeitig ändern:

chown root:root data

Mit diesem Befehl wird für die Datei (oder das Verzeichnis) data der Besitzer auf root und auch die Gruppe auf die Gruppe root geändert. Die Gruppe wird also durch einen Doppelpunkt von dem Besitzer abgetrennt.

Der Besitzer einer Datei läßt sich nur durch root ändern.

Der Befehl chgrp ändert nur die Gruppe einer Datei:

chgrp admin /etc/blacklist

Dieser Befehl ändert die Gruppenzugehörigkeit der Datei /etc/blacklist auf die Gruppe admin. Gruppenzugehörigkeiten können sowohl durch root, als auch durch den Besitzer einer Datei geändert werden, aber nur wenn der Besitzer auch Mitglied in der Zielgruppe ist.

Auch für die Befehle chown und chgrp kann jeweils der Parameter -R zum rekursiven ändern in ganzen Verzeichnishierarchien, wie bei chmod, verwendet werden.

Rechte auf Verzeichnisse

Rechte gelten immer für den Inhalt der Datei auf die die Rechte vergeben sind. Hat ein Benutzer Schreibrecht auf eine Datei, dann kann er ihren Inhalt verändern, hat er Ausführrecht auf die Datei kann er diese als Script oder Binärdatei ausführen. Hat er Leserechte auf die Datei, kann er ihren Inhalt sehen. Was bedeuten aber die Rechte auf Verzeichnisse? Auch hier gelten die Rechte auf den Inhalt des Verzeichnisses. Eine Datei zu löschen oder zu schreiben, bedeutet den Inhalt eines Verzeichnisses zu ändern, wozu das Schreibrecht auf das Verzeichnis nötig ist. Ein ls in einem Verzeichnis auszuführen erfordert das Leserecht im Verzeichnis. Verzeichnisse lassen sich jedoch nicht ausführen, was bedeutet also das Ausführrecht? Das Ausführrecht steht für das Betreten dürfen eines Verzeichnisses. Ein Verzeichnis ausführen, bedeutet es mit cd zu betreten. Daher ist im allgemeinen wenn das Leserecht für ein Verzeichnis gesetzt ist, immer auch das Ausführrecht gesetzt.

Es ist durchaus möglich, das ein Benutzer eine Datei zwar verändern darf, weil er das Schreibrecht auf die Datei hat, aber diese nicht löschen darf, weil er kein Schreibrecht im Verzeichnis in dem die Datei liegt hat.

Sonderrechte

Im Unix-Dateisystem gibt es noch 3 Sonderrechte, die bislang nicht erwähnt wurden: Das SUID-Bit, das SGID-Bit und das Sticky-Bit. Diese 3 Sonderrechte lösen ein paar spezielle Probleme, die mit dem bisherigen Berechtigungsschema nicht zu lösen wären.

Wenn ein Benutzer sein Passwort ändern will, benötigt er dazu Schreibrechte auf die Passwortdatenbank. Die hat ein normaler Benutzer jedoch nicht, er hat nichtmal Leserechte (sofern Shadow-Passwörter benutzt werden). Wie läßt sich also das Problem lösen? Der Benutzer müßte kurzzeitig nur für diese eine Aktion root-Rechte haben. Genau dieses Problem löst das SUID-Bit. Ist das SUID-Bit auf ein Programm gesetzt, wird das Programm nicht mit den Rechten des aufrufenden Benutzers ausgeführt, sondern mit den Rechten des Besitzers der Programmdatei.

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 27132 Dec 8 10:08 /usr/bin/passwd

Der Aufruf ls -l /usr/bin/passwd, zeigt die Eigenschaften der Programmdatei passwd. Die Datei gehört root und hat die Rechte rwsr-xr-x. Das s bei den Rechten des Besitzers steht hier für das SUID-Bit. SUID heißt übrigens set user id. Wenn ein Benutzer passwd aufruft, läuft passwd dadurch mit root-Rechten und kann schreibend auf die Passwortdatenbank zugreifen. Warum kann dann ein normaler Benutzer nicht jedes beliebige Passwort ändern, sondern nur seins? Das ist etwas, was das passwd Programm selbst sicherstellen muß. Generell müssen Programme mit gesetzten SUID-Bit selber für ihre eigene Sicherheit sorgen. Programme mit gesetzten SUID-Bit müssen sehr sorgfältig programmiert sein, da ein Fehler in so einem Programm zu einer Privilegienerweiterung für normale Benutzer führen kann. Generell sollte vom SUID-Bit aus Sicherheitsgründen nur sehr sparsam Gebrauch gemacht werden. Programme mit gesetzten SUID-Bit können ein Sicherheitsrisiko darstellen.

chmod u+s /usr/bin/passwd

Dieses Kommando setzt das SUID-Bit für das Programm /usr/bin/passwd. In der Zahlenschreibweise der Rechte werden die Sonderrechte einfach vor die 3 anderen Zahlen gestellt:

chmod 4755 /usr/bin/passwd

Die 4 steht hier für das SUID-Bit.

Eine ähnliche Bedeutung wie das SUID-Bit hat auch das SGID-Bit. Man ahnt es schon, es hat die gleiche Wirkung wie SUID nur auf die Gruppe. SGID steht für set group id. Das SGID-Bit wird als Zahl durch die 2 repräsentiert:

chmod 2755 /usr/bin/wall
ls -l /usr/bin/wall
-rwxr-sr-x 1 root tty 10292 Oct 22 2007 /usr/bin/wall

Das Programm wall hat durch chmod 2755 ein SGID-Bit bekommen (eigentlich besaß es das vorher schon). Angezeigt wird das SGID-Bit als s bei den Gruppenrechten.

Eine Besonderheit auf Linuxsystemen, ist noch das SGID-Bit bei Verzeichnissen. Normalerweise werden Dateien immer mit der primären Gruppe des Erzeugers der Datei angelegt. Ist auf ein Verzeichnis jedoch das SGID-Bit gesetzt, werden alle darin angelegten Dateien mit der Gruppe des Verzeichnisses angelegt. Dies läßt sich gut für z. B. Gruppenverzeichnisse auf File-Servern verwenden.

Das Sticky-Bit, als letztes Sonderrecht wird z. B. beim /tmp-Verzeichnis verwendet:

ls -ld /tmp
drwxrwxrwt 5 root root 1024 Mar 22 12:03 /tmp

Im /tmp-Verzeichnis hat jeder Benutzer Schreibrecht. Theoretisch müßte dann auch jeder Benutzer einem anderen Benutzer seine dort abgelegten temporären Dateien löschen können. Damit dies nicht passiert, gibt es das Sticky-Bit, welches an dem t bei den Rechten für Andere auf dem /tmp-Verzeichnis zu erkennen ist. Das Sticky-Bit besagt, das eine Datei nur von deren Besitzer gelöscht werden kann. Obwohl also jeder Schreibrechte auf /tmp hat, kann nur noch der Besitzer einer Datei diese löschen. Das setzen des Sticky-Bits empfiehlt sich daher generell bei Verzeichnissen die von jedem beschrieben werden können.

chmod 1777 /var/tmp

Dieses Kommando setzt alle Rechte für alle auf das Verzeichnis /var/tmp und zusätzlich das Sticky-Bit durch die voran gesetzte 1.

umask

Wird eine Datei neu angelegt, gibt es Standardrechte die diese inital hat. Diese Standardrechte für neu angelegte Dateien werden durch die sogenannte umask gesetzt. Ist keine umask gesetzt werden Dateien mit den Rechten 666 und Verzeichnisse mit den Rechten 777 erstellt. Die umask sorgt dafür das von diesen Werten etwas abgezogen wird. Auf vielen Linuxsystemen ist die umask auf 022 voreingestellt. Dadurch werden Dateien mit 644 und Verzeichnisse mit 755 erstellt. Was bedeutet die umask von 022? ich setze diese Werte mal in eine Tabelle:

DateienVerzeichnisse
Standardrechte666777
umask022022
Effektiv gesetzte Standardrechte644755

Wie man an der Tabelle leicht sehen kann, handelt es sich um eine Substraktion: 6-2 ergibt 4. Der Wert der umask wird einfach von den vollständig gesetzten Rechten abgezogen, um auf die tatsächlich gesetzten Rechte für neue Dateien zu kommen.

Die umask läßt sich durch den Befehl umask setzen, also z. B.:

umask 027

Dies läßt Dateien mit den Rechten 640 und Verzeichnisse mit den Rechten 750 erzeugen. Eine besonders restriktive umask wäre 077. Häufig möchte man die umask beim Login setzen. Dies läßt sich durch eine Datei erreichen die beim Login automatisch aufgeführt wird, wie z. B. ~/.bash_profile für einen textbasierten Login oder eventuell ~/.xsession für einen Login über xdm. Auch KDE und Gnome haben entsprechende Autostartdateien.

Mit dem Kommando umask ohne weitere Parameter kann man sich die momentan gesetzte umask ansehen.


René Maroufi, dozent (at) maruweb.de
Creative Commons By ND