In FreeBSD besitzt jede Datei und jedes Verzeichnis einen Satz von Zugriffsrechten. Es stehen mehrere Programme zum Anzeigen und Bearbeiten dieser Rechte zur Verfügung. Ein Verständnis für die Funktionsweise von Zugriffsrechten ist notwendig, um sicherzustellen, dass Benutzer nur auf die von ihnen benötigten Dateien zugreifen können und nicht auf die Dateien des Betriebssystems oder von anderen Benutzern.
In diesem Abschnitt werden die traditionellen Zugriffsrechte von UNIX® beschrieben. Informationen zu feingranularen Zugriffsrechten für Dateisysteme finden Sie im Abschnitt 13.9, „Zugriffskontrolllisten für Dateisysteme (ACL)“.
In UNIX® werden die grundlegenden Zugriffsrechte in
drei Typen unterteilt: Lesen, Schreiben und Ausführen.
Diese Zugriffstypen werden verwendet, um den Dateizugriff
für den Besitzer der Datei, die Gruppe und alle anderen zu
bestimmen. Die Lese-, Schreib- und Ausführungsberechtigungen
werden mit den Buchstaben r
,
w
und x
dargestellt.
Alternativ können die Berechtigungen als binäre Zahlen
dargestellt werden, da jede Berechtigung entweder aktiviert
oder deaktiviert (0
) ist. Wenn die
Berechtigung als Zahl dargestellt wird, ist die Reihenfolge
immer als rwx
zu lesen, wobei
r
den Wert 4
hat,
w
den Wert 2
und
x
den Wert 1
.
In Tabelle 4.1 sind die einzelnen nummerischen und
alphabetischen Möglichkeiten zusammengefasst. Das Zeichen
-
in der Spalte
„Auflistung im Verzeichnis“ besagt, dass eine
Berechtigung deaktiviert ist.
Wert | Zugriffsrechte | Auflistung im Verzeichnis |
---|---|---|
0 | Kein Lesen, Kein Schreiben, Kein Ausführen | --- |
1 | Kein Lesen, Kein Schreiben, Ausführen | --x |
2 | Kein Lesen, Schreiben, Kein Ausführen | -w- |
3 | Kein Lesen, Schreiben, Ausführen | -wx |
4 | Lesen, Kein Schreiben, Kein Ausführen | r-- |
5 | Lesen, Kein Schreiben, Ausführen | r-x |
6 | Lesen, Schreiben, Kein Ausführen | rw- |
7 | Lesen, Schreiben, Ausführen | rwx |
Benutzen Sie das Argument -l
mit
ls(1), um eine ausführliche Verzeichnisauflistung
zu sehen, die in einer Spalte die Zugriffsrechte für den
Besitzer, die Gruppe und alle anderen enthält.
Die Ausgabe von ls -l
könnte
wie folgt aussehen:
%
ls -l
total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt
Das erste Zeichen (ganz links) der ersten Spalte zeigt an,
ob es sich um eine normale Datei, ein Verzeichnis, ein
zeichenorientiertes Gerät, ein Socket oder irgendeine andere
Pseudo-Datei handelt. In diesem Beispiel zeigt
-
eine normale Datei an. Die nächsten drei
Zeichen, dargestellt als rw-
, ergeben die
Rechte für den Datei-Besitzer. Die drei Zeichen danach
r--
die Rechte der Gruppe, zu der die Datei
gehört. Die letzten drei Zeichen, r--
,
geben die Rechte für den Rest der Welt an. Ein Minus
bedeutet, dass das Recht nicht gegeben ist. In diesem Beispiel
sind die Zugriffsrechte also: der Eigentümer kann die Datei
lesen und schreiben, die Gruppe kann lesen und alle anderen
können auch nur lesen. Entsprechend obiger Tabelle
wären die Zugriffsrechte für diese Datei
644
, worin jede Ziffer die drei Teile der
Zugriffsrechte dieser Datei verkörpert.
Wie kontrolliert das System die Rechte von Hardware-Geräten?
FreeBSD behandelt die meisten Hardware-Geräte als Dateien, welche
Programme öffnen, lesen und mit Daten beschreiben können. Diese
speziellen Gerätedateien sind in /dev
gespeichert.
Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-, Schreib- und Ausführ-Rechte. Das Ausführungs-Bit hat eine etwas andere Bedeutung für ein Verzeichnis als für eine Datei. Die Ausführbarkeit eines Verzeichnisses bedeutet, dass in das Verzeichnis, zum Beispiel mit cd(1), gewechselt werden kann. Das bedeutet auch, dass in dem Verzeichnis auf Dateien, deren Namen bekannt sind, zugegriffen werden kann, vorausgesetzt die Zugriffsrechte der Dateien lassen dies zu.
Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem Namen in einem Verzeichnis zu löschen, müssen auf dem Verzeichnis Schreib- und Ausführ-Rechte gesetzt sein.
Es gibt noch mehr Rechte, aber die werden vor allem in speziellen Umständen benutzt, wie zum Beispiel bei SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit. Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden, finden Sie in chmod(1).
Symbolische Zugriffsrechte verwenden Zeichen anstelle von
oktalen Werten, um die Berechtigungen für Dateien oder
Verzeichnisse festzulegen. Zugriffsrechte verwenden die
Syntax Wer
,
Aktion
und
Berechtigung
. Die folgenden Werte
stehen zur Auswahl:
Option | Symbol | Bedeutung |
---|---|---|
Wer | u | Benutzer (user) |
Wer | g | Gruppe (group) |
Wer | o | Andere (other) |
Wer | a | Alle |
Aktion | + | Berechtigungen hinzufügen |
Aktion | - | Berechtigungen entziehen |
Aktion | = | Berechtigungen explizit setzen |
Berechtigung | r | lesen (read) |
Berechtigung | w | schreiben (write) |
Berechtigung | x | ausführen (execute) |
Berechtigung | t | Sticky-Bit |
Berechtigung | s | Set-UID oder Set-GID |
Diese symbolischen Werte werden zusammen mit chmod(1)
verwendet. Beispielsweise würde der folgende Befehl den Zugriff
auf FILE
für alle anderen Benutzer
verbieten:
%
chmod go= FILE
Wenn Sie mehr als eine Änderung der Rechte einer
Datei vornehmen wollen, können Sie eine durch Kommata
getrennte Liste der Rechte angeben. Das folgende Beispiel
entzieht der Gruppe und der Welt die Schreibberechtigung auf
FILE
und fügt für jeden
Ausführungsrechte hinzu:
%
chmod go-w,a+x
FILE
Zusätzlich zu den Zugriffsrechten unterstützt FreeBSD auch
die Nutzung von „Datei-Flags“. Diese erhöhen die
Sicherheit des Systems, indem sie eine verbesserte Kontrolle
von Dateien erlauben. Verzeichnisse werden allerdings nicht
unterstützt. Mit dem Einsatz von Datei-Flags kann sogar
root
daran gehindert
werden, Dateien zu löschen oder zu verändern.
Datei-Flags werden mit chflags(1) verändert. Um
beispielsweise auf der Datei file1
das
„unlöschbar“-Flag zu aktivieren, geben Sie
folgenden Befehl ein:
#
chflags sunlink file1
Um dieses Flag zu deaktivieren, setzen Sie ein
„no“ vor sunlink
:
#
chflags nosunlink file1
Um die Flags einer Datei anzuzeigen, verwenden Sie
ls(1) zusammen mit -lo
:
#
ls -lo file1
-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1
Einige Datei-Flags können nur vom
root
-Benutzer
gesetzt oder gelöscht werden. Andere wiederum können
auch vom Eigentümer der Datei gesetzt werden. Weitere
Informationen hierzu finden sich in chflags(1) und
chflags(2).
Anders als die Berechtigungen, die bereits angesprochen
wurden, existieren drei weitere Einstellungen, über die alle
Administratoren Bescheid wissen sollten. Dies sind die
Berechtigungen setuid
,
setgid
und
sticky
.
Diese Einstellungen sind wichtig für manche UNIX®-Operationen, da sie Funktionalitäten zur Verfügung stellen, die normalerweise nicht an gewöhnliche Anwender vergeben wird. Um diese zu verstehen, muss der Unterschied zwischen der realen und der effektiven Benutzer-ID erwähnt werden.
Die reale Benutzer-ID ist die UID,
welche den Prozess besitzt oder gestartet hat. Die effektive
UID ist diejenige, als die der Prozess
läuft. Beispielsweise wird passwd(1) mit der realen ID
des Benutzers ausgeführt, der sein Passwort ändert. Um jedoch
die Passwortdatenbank zu bearbeiten, wird es effektiv als
root
-Benutzer
ausgeführt. Das ermöglicht es normalen Benutzern, ihr
Passwort zu ändern, ohne einen
Permission Denied-Fehler angezeigt zu
bekommen.
Die setuid-Berechtigung kann durch das Voranstellen bei einer Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im folgenden Beispiel gezeigt wird:
#
chmod 4755 suidexample.sh
Die Berechtigungen auf
sehen jetzt wie folgt aus:suidexample.sh
-rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh
Beachten Sie, dass ein s
jetzt Teil der
Berechtigungen des Dateibesitzers geworden ist, welches das
Ausführen-Bit ersetzt. Dies ermöglicht es Werkzeugen mit
erhöhten Berechtigungen zu laufen, wie beispielsweise
passwd
.
Die nosuid
mount(8)-Option
bewirkt, dass solche Anwendungen stillschweigend scheitern,
ohne den Anwender darüber zu informieren. Diese Option ist
nicht völlig zuverlässig, da ein
nosuid
-Wrapper in der Lage wäre, dies zu
umgehen.
Um dies in Echtzeit zu beobachten, öffnen Sie zwei
Terminals. Starten Sie auf einem passwd
als normaler Benutzer. Während es auf die Passworteingabe
wartet, überprüfen Sie die Prozesstabelle und sehen Sie sich
die Informationen für passwd(1) an:
Im Terminal A:
Changing local password for trhodes Old Password:
Im Terminal B:
#
ps aux | grep passwd
trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd
Obwohl passwd(1) als normaler Benutzer ausgeführt
wird, benutzt es die effektive UID von
root
.
Die setgid
-Berechtigung führt die
gleiche Aktion wie die setuid
-Berechtigung
durch, allerdings verändert sie die Gruppenberechtigungen.
Wenn eine Anwendung oder ein Werkzeug mit dieser Berechtigung
ausgeführt wird, erhält es die Berechtigungen basierend auf
der Gruppe, welche die Datei besitzt und nicht die des
Benutzers, der den Prozess gestartet hat.
Um die setgid
-Berechtigung auf einer
Datei zu setzen, geben Sie chmod(1) eine führende
Zwei (2) mit:
#
chmod 2755 sgidexample.sh
Beachten Sie in der folgenden Auflistung, dass das
s
sich jetzt in dem Feld befindet, das für
die Berechtigungen der Gruppe bestimmt ist:
-rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.sh
Obwohl es sich bei dem in diesen Beispielen gezeigten Shellskript um eine ausführbare Datei handelt, wird es nicht mit einer anderen EUID oder effektiven Benutzer-ID ausgeführt. Das ist so, weil Shellskripte keinen Zugriff auf setuid(2)-Systemaufrufe erhalten.
Die setuid
und
setgid
Berechtigungs-Bits können die
Systemsicherheit verringern, da sie erhöhte Rechte
ermöglichen. Das dritte Berechtigungs-Bit, das
sticky bit
kann die Sicherheit eines
Systems erhöhen.
Wenn das sticky bit
auf einem
Verzeichnis angewendet wird, erlaubt es das Löschen von
Dateien nur durch den Besitzer der Datei. Dies ist nützlich,
um die Löschung von Dateien in öffentlichen Verzeichnissen wie
/tmp
, durch Benutzer denen diese Dateien
nicht gehören, zu verhindern. Um diese Berechtigung
anzuwenden, stellen Sie der Berechtigung eine Eins (1)
voran:
#
chmod 1777 /tmp
Das sticky bit
kann anhand des
t
ganz am Ende der Berechtigungen abgelesen
werden.
#
ls -al / | grep tmp
drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.