Zugriffskontrolle auf Dateien mittels Dateizugriffsrechten

Wichtung: 5

Beschreibung: Die Kandidaten sollen in der Lage sein, den Zugriff auf Dateien durch den richtigen Gebrauch von Zugriffsrechten zu steuern.

Wichtigste Wissensgebiete:
Handhabung  von Dateirechten bei normalen und speziellen Dateien und Verzeichnissen.
Nutzung von Zugriffsmodi wie suid, sgid und des Sticky Bits,  um Sicherheit zu gewährleisten.
Verwendung des group-Feldes einer Datei für die Vergabe von Zugriffsrechten an Arbeitsgruppen.
Grundsätzliches Wissen über ACL.
Festlegen der Standardrechte beim Anlegen neuer Dateien über die Shell.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
chmod
umask
chattr (falls anwendbar)

Zugriffsrechte - Grundlagen

Für jede Datei, jedes Verzeichnis auf einem Linux-System werden Zugriffsrechte festgelegt. Dabei werden für folgende Anwender bestimmt, wer was mit einer Datei bzw. einem Anwender anstellen darf:

User = Für den Benutzer (Owner), welcher die Datei erstellt hat
Gruppe = Zugriffsrechte für Benutzer aus einer bestimmten Gruppe
Sonstige = Für alle anderen Benutzer

Mit dem Befehl ls -l lassen wir uns die Rechte anzeigen:

-rw-r-----   1 beckenbauer     bayern         1519 Jul 29  2000 Testdatei

In diesem Fall handelt es sich um eine reguläre Datei (das erste -). Der Besitzer der Datei ist beckenbauer und gehört der Gruppe bayern an. Zu den Zugriffsrechten: beckenbauer darf lesen (r) und schreiben (w). Er darf die Datei aber nicht ausführen, da anstelle des x ein - steht.

Alle anderen Benutzer aus der Gruppe bayern also dürfen die Datei nur lesen (r--). Der Rest der Welt hat überhaupt keine Rechte (---).

Zugriffsberechtigungen:

Das erste Zeichen bei den Zugriffsrechten zeigt den jeweiligen Dateityp an:
r = Read, Lesen
w = Write, Lesen
x = Execute, Ausführen

Dateiarten:

Das erste Zeichen bei den Zugriffsrechten zeigt den jeweiligen Dateityp an:
- = Reguläre Datei
d = [directory] Verzeichnis
l = [symlink] Symbolischer Link
b = [block device] Blockorientierte Gerätedatei
c = [character device] Zeichenorientierte Gerätedatei
p = [named pipe] Feste Programmverbindung
s = [socket] Netzwerk Kommunikationsendpunkt

chmod - Festlegen der Zugriffsrechte

Mit dem Programm chmod ist es möglich, die Zugriffsrechte von Dateien zu ändern. Dazu muss man den numerischem Modus bei der Vergabe der Rechte verstehen:

Eigentümer Gruppenmitglied Rest der Welt
r w x r w x r w x
4 2 1 4 2 1 4 2 1


Die Syntax von chmod lautet chmod [Zahl1][Zahl2][Zahl3] Datei, wobei Zahl1 den Benutzer, Zahl2 die Gruppe und Zahl3 den Rest der Welt repräsentiert. Aus der oben aufgelisteten Tabelle kann man nun ablesen, welche Zahlen für welche Rechte stehen. Vier steht beispielsweise für Lesen. Möchte man Rechte kombinieren, so addiert man die Werte. Beispiel: 6 steht für Lesen und Schreiben (4+2).

chmod 640 test.txt

Dieses Beispiel setzt für den Benutzer der Datei test.txt Lese- und Schreibrechte (4+2). Die Gruppe darf lediglich lesen und der Rest der Welt darf "nix".

Andere Möglichkeit, Rechte zu setzen:

a = Alle
u = Benutzer
g = Gruppe
o = Other, Rest Der Welt

chmod u=rw,g=r test.txt = chmod 640 test.txt
chmod u-w test.txt = Dem Benutzer das Schreibrecht entziehen
chmod g+x test.txt = Der Gruppe das Recht zum Ausführen geben

SUID, SGID, Sticky Bit - Spezielle Rechte

Neben den "Standard-Rechten" gibt es noch spezielle Rechte:

Substitute UserID Bit (SUID):
Das SUID-Bit kann nur bei ausführbaren Dateien gesetzt werden und sorgt dafür, dass ein Benutzer, der die ausführbare Datei startet, dieses nicht unter seinen eigenen, sondern unter den Rechten des eigentlichen Besitzers macht. Wenn beispielsweise für das Programm /usr/bin/passwd das SUID-Bit gesetzt ist, so erhält der Benutzer für dieses Programm Root-Rechte, um beispielsweise in die Datei /etc/passwd zu schreiben. So kann jeder Benutzer sein eigenes Passwort ändern.

Substitute GroupID Bit (SGID):
Dieses Recht gilt einerseits für ausführbare Dateien und andererseits für Verzeichnisse. Hat ein ausführbares Programm dieses Recht gesetzt, so gilt der gleiche Mechanismus, wie beim Substitute UserID Bit, nur diesmal eben die Gruppenmitgliedschaft betreffend.

Das SGID-Recht an einem Verzeichnis bedeutet, daß eine Datei die ein berechtigter Benutzer in ein Verzeichnis mit SGID-Recht kopiert, nicht mit seiner eigenen Gruppenzugehörigkeit gespeichert wird, sondern mit der gesetzten GID des Verzeichnisses.

Sticky Bit:
Das sogenannte Sticky-Bit bezieht sich stets auf alle Benutzer. Es bewirkt bei ausführbaren Dateien, dass das Programm im Arbeitsspeicher geladen bleibt und nicht direkt aus dem Speicher gelöscht wird.

Das Sticky-Bit auf einem Verzeichnis bewirkt, dass ein Benutzer in diesem Verzeichnis Dateien erstellen kann (sofern er Schreibrechte besitzt) und seine eigenen Dateien löschen und editieren kann, jedoch die Dateien anderer Benutzer nicht löschen darf. (Das Löschen einer Datei stellt einen Schreibzugriff auf das Verzeichnis, in dem die Datei liegt, dar.) Üblicherweise ist bei Verzeichnissen, in denen mehrere Benutzer Dateien ablegen dürfen, wie z.B. /tmp, das Sticky-Bit gesetzt.

Sonderrechte Eigentümer Gruppenmitglied Rest der Welt
SUID SGID Sticky r w x r w x r w x
4 2 1 4 2 1 4 2 1 4 2 1



4 = Substitute UserID Bit
2 = Substitute GroupID Bit
1 = Sticky Bit

Recht Rechte symbolisch Rechte oktal
SUID rwsr-xr-x 4755
SGID rwxr-sr-x 2755
StickyBit rwxr-xr-t 1755

umask - Zugriffsberechtigungen beim Anlegen einer Datei

umask wird dazu benutzt, Voreinstellungen für Berechtigungen beim Anlegen neuer Dateien festzulegen. umask nutzt wie chmod das oktale Zahlensystem, um die Berechtigungen zu setzen. Der große Unterschied aber ist, dass umask nicht Berechtigungen setzt, sondern stets entfernt. Wenn wir also eine Datei für einen Benutzer für Lesen und Schreiben anlegen wollen, was chmod 600 entspräche, so müssen wir den Befehl umask 100 anwenden (7-6 = 1). Damit wäre ein typischer Wert für umask z.B. 022 (rwxr-xr-x) oder 027 (rwxr-x---).