FreeBSD, das ein direkter Abkömmling von BSD UNIX® ist, stützt sich auf mehrere Grundkonzepte von UNIX® Systemen. Das erste und ausgeprägteste: FreeBSD ist ein Mehrbenutzer-Betriebssystem. Das System ermöglicht, dass mehrere Benutzer gleichzeitig an völlig verschiedenen und unabhängigen Aufgaben arbeiten können. Es ist verantwortlich für eine gerechte Auf- und Zuteilung von Nachfragen nach Hardware- und Peripheriegeräten, Speicher und CPU-Zeit unter den Benutzern.
Da das System mehrere Benutzer unterstützt, hat alles, was das System verwaltet, einen Satz von Rechten, die bestimmen, wer die jeweilige Ressource lesen, schreiben oder ausführen darf. Diese Zugriffsrechte stehen in drei Achtergruppen, die in drei Teile unterteilt sind: einen für den Besitzer der Datei, einen für die Gruppe, zu der die Datei gehört und einen für alle anderen. Die numerische Darstellung sieht wie folgt aus:
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 |
Sie können -l
auf der Kommandozeile
von ls(1) angeben, 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
...Die erste Spalte der Ausgabe enthält die Zugriffsrechte:
Das erste Zeichen von links ist ein Symbol, welches angibt,
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 Fall
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.
Das ist alles schön und gut, aber 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 wie
alle anderen Dateien auch. Diese Spezial-Dateien sind im
Verzeichnis /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
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).
Die Zugriffsrechte lassen sich auch über Symbole
anstelle von oktalen Werten festlegen. Symbolische
Zugriffsrechte werden in der Reihenfolge
Wer
, Aktion
und Berechtigung
angegeben.
Die folgenden Symbole 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 |
Symbolische Zugriffsrechte werden wie die numerischen
mit dem Kommando chmod(1) vergeben. Wenn
Sie beispielsweise allen anderen Benutzern den Zugriff auf
die Datei FILE
verbieten wollen,
benutzen Sie den nachstehenden Befehl:
%
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 (den anderen) die
Schreibberechtigung auf die Datei FILE
und fügt dann für alle Ausführungsrechte
hinzu:
%
chmod go-w,a+x FILE
Zusätzlich zu den vorhin diskutierten Zugriffsrechten unterstützt FreeBSD auch die sogenannten „Datei-Flags“. Diese erhöhen die Sicherheit Ihres Systems, indem sie eine verbesserte Kontrolle von Dateien erlauben. Verzeichnisse werden allerdings nicht unterstützt.
Diese verbesserte Sicherheit führt dazu, dass manche
Dateien nicht einmal von root
gelöscht
oder bearbeitet werden können.
Datei-Flags können über chflags(1) gesetzt
oder gelöscht werden. Um beispielsweise die Datei
file1
mit dem
„unlöschbar“-Flag zu sichern, geben Sie
folgenden Befehl ein:
#
chflags sunlink file1
Um dieses Flag wieder zu löschen, geben Sie den
Befehl erneut ein. Allerdings setzen Sie ein
„no“ vor sunlink
:
#
chflags nosunlink file1
Um die Flags dieser Datei anzuzeigen, verwenden Sie
ls(1) zusammen mit der Option -lo
:
#
ls -lo file1
Dadurch erhalten Sie eine Ausgabe ähnlich der folgenden:
Viele Flags können nur von root
gesetzt oder gelöscht werden. Andere wiederum können
auch vom Eigentümer der Datei gesetzt werden. Weitere
Informationen zu Datei-Flags finden sich in den Manualpages
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 nosuid
mount(8)-Option wird dafür
sorgen, dass diese Anwendungen stillschweigend scheitern. Genauer
gesagt, sie werden nicht ausgeführt und der Anwender wird
darüber auch nicht informiert. Auf diese Option kann man sich
nicht vollständig verlassen, da ein
nosuid
-Wrapper in der Lage wäre, dies zu
umgehen, wie in der mount(8) Manualpage zu lesen ist.
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 der
-Datei
sollten jetzt wie folgt aussehen:suidexample.sh
In dem Beispiel sollte auffallen, 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 z.B.
passwd
.
Um dies in Echtzeit zu beobachten, öffnen Sie zwei Terminals.
Starten Sie auf einem den passwd
-Prozess als normaler
Benutzer. Während es auf die Passworteingabe wartet,
überprüfen Sie die Prozesstabelle und sehen Sie sich die
Informationen des passwd
-Kommandos an.
Im Terminal A:
Im Terminal B:
#
ps aux | grep passwd
Wie oben erwähnt, wird passwd
von einem
normalen Benutzer ausgeführt, benutzt aber 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 dem chmod
-Befehl eine
führende Zwei (2) mit, wie im folgenden gezeigt:
#
chmod 2755 sgidexample.sh
Die neue Einstellung kann wie zuvor betrachtet werden. Beachten Sie,
dass das s
sich jetzt in dem Feld befindet, das
für die Berechtigungen der Gruppe bestimmt ist:
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.
Diese beiden ersten angesprochenen Spezialberechtigungen (die
setuid
und setgid
Berechtigungs-Bits) können die Systemsicherheit verringern, da
sie erhöhte Rechte ermöglichen. Es gibt noch ein drittes
Berechtigungs-Bit, das die Sicherheit eines Systems erhöhen kann:
das sticky bit
.
Das sticky bit
erlaubt, wenn es auf ein
Verzeichnis angewendet wird, nur dem Besitzer der Datei diese Dateien
auch zu löschen. Dieses Recht ist nützlich, um die
Löschung von Dateien in öffentlichen Verzeichnissen durch
Benutzer, denen diese Dateien nicht gehören, zu verhindern, wie
z.B. in /tmp
. Um diese Berechtigung anzuwenden,
stellen Sie der Berechtigung eine Eins (1) voran, beispielsweise
so:
#
chmod 1777 /tmp
Den Effekt können Sie sich ansehen, indem Sie
das Kommando ls
ausführen:
#
ls -al / | grep tmp
Das sticky bit
kann anhand des
t
ganz am Ende der Berechtigungen abgelesen
werden.
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>.