Rechte unter Unix Systemen

von J.J. Sarton

Die Rechte unter unixartigen Systemen bestehen aus einem einfachen Modell. Ein Verzeichnis oder eine Datei haben einen Besitzer, sind einer Gruppe zugeordnet und besitzen zuletzt Zugriffsrechte für alle anderen Anwender.

Für Eigentümer, Gruppe und den Rest der Welt existieren jeweils nachstehende Zugriffsrechte:

ReadLesen
WriteSchreiben (Anlegen, Modifizieren, Löschen)
eXecuteAusführen (Dateien)
Durchschreiten (Ordner)

Zugriffsrechte setzen

Im Dateimanager sollte dies auch für den unbedarften Anwender nicht schwierig sein. Die Zugriffsrechte allerding auf einen Teilbaum zu setzen, stellt sich mit den vorhandenen Mitteln der graphischen Oberfläche als schwierig heraus. Mit den althergebrachten Kommandos ist es jedoch kein Problem.

$ chmod 664 datei
$ chmod u=rw,g=rw,o=r datei
$ ls -l datei
-rw-rw-r-- 1 anton anton  0  1. Mär 11:24 datei
$
$ chmod o-r datei
$ ls -l datei
-rw-rw---- 1 anton anton  0  1. Mär 11:24 datei
$ chmod o+r datei
$ ls -l datei
-rw-rw-r-- 1 anton anton  0  1. Mär 11:24 datei

Um gesamte Teilbäume mit neuen Zugriffsrechten zu versehen kann wie folgt verfahren werden:

$ chmod -R 664 ordner
$
$ chmod 775 `find ordner -type d -print`
$ chmod u+rw,g+rw,o=r `find ordner -type f -print`

Dieses Modell ist schon gut brauchbar, erfüllt aber nicht immer die Anforderungen einer Arbeitsgruppe.

Der Eigentümer einer Datei ist der Anwender, der diese Datei angelegt hat. Die Gruppenzugehörigkeit wird der aktuellen Gruppe des Anwenders zugeordnet.

Unter Linux wird sehr oft parallel zur ID des Anwenders eine anwenderspezifische Gruppe angelegt und als Hauptgruppenzugehörigkeit des Anwenders verwendet.

Dies bedeutet dass in der Regel Objekte die von einem Anwender angelegt werden, von anderen Anwendern nicht bearbeitet werden können.

$ ls -l
-rw-rw-r-- anton anton 1234 1. April 11:01 datei
drwxrwxr-x anton anton 4096 1. April 11:02 ordner
$

Besitztum setzen

$ chown anton datei
$ chgrp gruppe datei
$ chown anton:gruppe datei
$ chown -R anton:gruppe ordner
$ chgrp -R gruppe ordner

Manchmal ist es notwendig sehr gezielt Rechte zu vergeben. Meistens kann dies über die Zuordnung einer Gruppenzugehörigkeit gelöst werden. Dies ist aber keine optimale Verfahrensweise und stellt sich als kompliziert dar.

Vererbung von Besitztum und Rechten

Unter SYSV Unix Systemen und auch unter Linux werden Eigentümer und momentane Gruppe in neu angelegte Objekte vererbt, bei BSD Systemen wird dagegen die Gruppenzugehörigkeit vom Vaterverzeichnis abgeleitet.

Die Zugriffsrechte werden entsprechend der umask Einstellung gesetzt. Umask User file-creation mask oder Anwender Dateierzeugungsmaske legt fest welche Rechte beim Anlegen einer Datei nicht vergeben werden (Angabe der Rechte als Oktalzahl) bzw. welche Rechte vergeben werden (Symbolische Angabe der Rechte).

$ umask
0002
$
$ umask -S
u=rwx,g=rwx,o=rx
$

$ umask u=rwx,g=rx,o=
$ umask
0027
$ mkdir ordner;touch datei
$ ls -ld ordner datei
-rw-r----- 1 anton anton    0 15. Mär 08:48 datei
drwxr-x--- 2 anton anton 4096 15. Mär 08:48 ordner
$

Sonderrechte

Neben den üblichen Rechten (r w x) existiert für User und Gruppen noch ein besonderes Recht, das Sticky Bit.
Das entsprechende Bit für other, den Rest der Welt, ist das Text Bit.

SUID/SGID Bit und Dateien

Wenn es für den Eigentümer oder die Gruppe vorhanden ist, bewirkt das SxID Bit, dass die Datei mit der Kennung des Eigentümers, respektive der Gruppe ausgeführt wird. Dies wirkt sich nur auf Programme aus. Skripte sind hiervon nicht berührt, da ein Interpreter die Skripte ausführt.

SGID Bit und Verzeichnisse

Die Gruppe des Ordners wird an neuen Objekte vererbt (BSD Model).

Sticky Bit und Dateien

Wenn das Bit gesetzt ist, wird durch das Betriebsystem die Datei im Speicher gehalten, so dass spätere Zugriffe schneller durchgefürt werden. Dies hat heute keine praktische Bedeutung mehr.

Sticky Bit und Verzeichnisse

Verzeichnisse wie z.B. /tmp sind mit rwxrwxrwx versehen. Daher könnten alle Anwender Dateien löschen, egal ob Sie Besitzer sind oder nicht.
Mit dem Text Bit wird verhindert dass fremde Dateien gelöscht werden können.

Setzen/Entfernen der SUID/SGID/Sticky Bits

$ chmod u+s datei
$ ls -l datei
-rwsr-x-r-x 1 anton anton  0  1. Mär 11:24 datei
$ chmod 1777 ordner
$ chmod a=rwx,o+t ordner
$ ls -ld ordner
drwxrwxrwt anton anton 4096 1. Mär 10:04 ordner

Wenn das Ausführungsrecht (x) nicht gesetzt ist, wir der entsprechende Buchstabe groß geschrieben

$ chmod u+s datei
$ ls -l datei
-rwSr---r-- 1 anton anton  0  1. Mär 11:24 datei
$ chmod 1776 ordner
$ ls -ld ordner
drwxrwxrwT anton anton 4096 1. Mär 10:04 ordner

Gruppenzugehörigkeit

Unter Linux werden Gruppen sehr oft zur Steuerung der Zugriffsrechte auf Dienste verwendet.

$ id
uid=500(anton) gid=500(anton) Gruppen=14(uucp),501(vboxusers)
$
$ ls -l /dev/ttyS0
crw-rw---- 1 root uucp 4, 64  2. Mär 06:59 ttyS0
$

Anwender die Mitglied der Gruppe uucp sind dürfen auf das Gerät /dev/ttyS0 (serielle Schnittstelle) zurückgreifen.

Durch Eintragung einer Gruppenmitgliedschaft kann damit der Zugriff auf Resourcen gesteuert werden.

Angenommen, dass 3 Anwender an einem Dokumentationsprojekt teilnehmen, dass nur Mitglieder dieser Gruppe auf Zugriff auf die Dateien haben sollen, wäre eine Gruppe doku anzulegen und die Anwender Anton, Berta und Chris als Mitglieder der Gruppe doku zu deklarieren (konfigurieren). Leuten die nicht Mitglieder der Gruppe sind, darf kein Einblick gewährt werden.

Auf dem Verzeichnis .../doku sehen dann Besitztum und Rechte wie folgt aus

$ ls -ld doku
drwxrwx--- 1 anton doku 4096 11. November 2008 doku
$

Störend ist natürlich, dass Chris eigentlich nur Leserechte haben sollte, da er nur die Dokumentation kontrollieren und nicht ändern darf. Dies geht mit dem standard Rechtemodell von Unix Systemen nicht.

Erweiterte Rechte

Access Control Liste

Über ACL kann die Rechtvergabe sehr fein gesteuert werden. Die Access Control Liste ermöglicht es zusätzliche Einträge vorzunehmen und einem Verzeichnis oder einer Datei verschiedene Eigentümer oder Gruppenzugehörigkeiten zuzuordnen.

Dateien und Verzeichnisse die neu angelegt werden erhalten als Zugehörigkeit den Anwender und seine Gruppe, sowie Rechte entsprechend den ACL-Einträgen des Vaterverzeichnises. Damit kann sichergestellt werden, dass eine Gruppe oder bestimmte Anwender auf die Dateien die gewünschten Rechte erhalten.

Eine wichtige Vorraussetzung ist, dass ACL für die eingebundenen Dateisysteme eingeschaltet ist. Gegebenfalls ist in der Datei /etc/fstab die Option acl einzutragen.

Ein Familienunternehmen

EigentümerMitgliedschaft
VaterVater
Eltern
Familie
Erwachsene
Kinder
Gast 
MutterMutter
Eltern
Familie
Kinder
Erwachsene
SohnSohn
Familie
Kinder
TochterTochter
Familie
Kinder
KindermädchenKindermädchen
Kinder
Erwachsene
GastGast
OrdnerBesitztumRechte
VaterVater : Vaterrwxrwx---
MutterMutter : Mutterrwxrwx---
SohnSohn : Sohnrwxrwx---
TochterTochter : Tochterrwxrwx---
KindermädchenKindermädchen : Kindermädchenrwxrwx---
GastGastrwxrwx---
FamilienfotoVater : Familierwxrwxr-x
GruselfilmeVater : Erwachsenerwxrwx---
FinanzenVater : Elternrwxrwx---
KochrezepteMutter : Familierwxr-x---
ZeichentrickfilmeKindermädchen : Kinderrwxr-x---
 
Model: SysV BSD ACL

Beim SysV Modell, ist z.B. störend, dass neu angelegte Dateien im Ordner Familienfoto mit einer unpassenden Gruppe erzeugt werden, z.B, Mutter:Mutter.

Beim BSD Modell gehört die Datei zwar Mutter aber die Gruppe ist, wie es in diesem Fall angebracht ist, Familie.

Das BSD Modell kann aber nicht als Non Plus Ultra genommen werden, im Verzeichnis /tmp wäre das nicht optimal.

Mit ACL können die Probleme gelöst werden. Es ist sogar möglich Rechte für Anwender oder Gruppen zurückzunehmen; siehe Kochrezepte und Anwender Tochter.

Setzen und Bestimmen von ACL

Unter Linux sind, wie unter einem ordentlichen System, Kommandos vorhanden, dies es erlauben unter einem Terminal die ACL zu setzen oder zu lesen: setfacl und getfacl.

Ein graphisches Frontend eiciel ist ebenfalls vorhanden, muss aber gezielt installiert werden.

Einige wenige Kommandos haben, bei vorhandensein von ACL, eine geringfügige Abweichung vom Standardverhalten:

• ls -l zeigt nach den standard Rechten ein + welches zeigt, dass ACL vorhanden sind.

• mv übernimmt standardmässig die ACL

• cp kopiert die ACL wenn die Option -p (preserve) angegeben wurde

$ ls -l
-rw-rw-r--+ anton anton 1234 1. April 11:01 datei
-rwxrwxr-x+ anton anton 1234 1. April 11:02 ordner
$ getfacl *
# file: datei
# owner: anton
# group: anton
user::rw-
user:anton:rwx                 #effective:rw-
user:berta:rwx                 #effective:rw-
group::rwx                     #effective:rw-
mask::rw-
other::---
# file: ordner
# owner: anton
# group: anton
user::rwx
user:anton:rwx
user:berta:rwx
group::rwx
group:anton:rwx
mask::rwx
other::---
default:user::rwx
default:user:anton:rwx
default:user:berta:rwx
default:group::rwx
default:mask::rwx
default:other::---
$
$ getfacl -t datei
USER   anton     rw-     
user   anton     rwX     
user   berta     rwX     
GROUP  anton     rwX     
mask             rw-     
other            ---     
$

Auf unser Beispiel die Dokumentations-Gruppe angewandt, sollte das Hauptverzeichnis doku mit folgenden ACL-Einträgen versehen sein:

$ ls -ld doku
drwxrwx---+ 1 anton anton 4096 11. November 2008 doku
$
$ getfacl doku
# file: doku
# owner: anton
# group: anton
user::rwx
user::berta:rwx
user::chris:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:anton:rwx
default:user:berta:rwx
default:user:chris:r-x
$

Eine spezielle Gruppenzugehörigkeit ist mit ACL nicht mehr notwendig, kann aber benutzt werden.

$ ls -ld doku
drwxrwx---+ 1 anton anton 4096 11. November 2008 doku
$
$ getfacl doku
# file: doku
# owner: anton
# group: anton
user::rwx
user::berta:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:anton:rwx
default:user:berta:rwx
default:group:doku:r-x
$

Eine Steuerung über die Gruppenzugehörigkeit ist auch denkbar

$ ls -ld doku
drwxrwx---+ 1 anton anton 4096 11. November 2008 doku
$
$ getfacl doku
# file: doku
# owner: anton
# group: anton
user::rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:group:redakteur:rwx
default:group:doku:r-x
$

Die Angehörigen der Gruppe redakteur sind keine Angehöhrigen der Gruppe doku. Redakteur ist eine Gruppe die zum Teil Redundant zur doku Gruppe ist aber mehr Rechte besitzt.

Nachträgliches Setzen der ACL auf eine bestehende Baumstruktur

Eiciel kann die Rechte nicht rekursiv setzen (eiciel 0.9.5). Deshalb ist es notwendig die Kommando-Tools zu bemühen.

Das oberste Verzeichnis ist mit den default ACL-Rechten zu versehen. Zusätzlich sind auch Eigentümer, Gruppe usw. entsprechend default auf das Hauptverzeichnis zu setzen.

Nachdem das Hauptverzeichnis mit den gewünschten ACL-Einträgen versehen wurde, können die Rechte rekursiv gesetzt werden:

$ getfacl <dir> | setfacl -R -M- <dir>

ACL Entfernen

$ setfacl -R -b <dir>

entfernt rekursiv (-R Option) alle ACL für den angegebenen Baum. Diese Operation kann natürlich auch auf einzelne Dateien angewandt werden, die Option -R ist dann natürlich nicht anzugeben.

Ändern der ACL per Kommando

Setzen der Default Rechte auf ein Verzeichnis:

$ setfacl -m d:u::rwx,d:u:anton:rwx,d:u:1000:rwx,o::-,d:m::rwx ordner

Wenn diese Operation auf einen Teilbaum, welcher Dateien und Unterverzeichnisse enthält, angewandt werden soll, ist die Option -R anzugeben:

$ setfacl -R -m d:u::rwx,d:u:anton:rwx,d:u:1000:rwx,o::-,d:m::rwx ordner

Bei diesem Kommando ist es wichtig die Rechte rwx für erzeugende Anwender (d:u::rwx) zu setzen. Diese Rechte werden für neu angelegte Dateien oder Ordner verwendet. Dies gilt analog für g (Gruppe) und o (Rest der Welt).

Die Maske (m::rwx) sollte auch auf rwx gesetzt werden damit in Unterverzeichnisse gewechselt werden kann. Diese Rechte sind die maximalen Rechte die vererbt werden.

Damit die Vererbung der ACL funktioniert, müssen auch Anwender als Default eingetragen werden.

Wenn spezielle Gruppen zur Steuerung der Rechte bei ACL verwendet werden, ist für Gruppen wie für Besitzer zu verfahren.

Setzen der Zugriffsrechte auf eine Datei oder einen Ordner

$ setfacl -m u:1001:rwx ordner
$ setfacl -m u:1001:rw datei

Sichern von Teilbäumen mit ACL

Tar und co. kennen keine ACL. Um ACL zu sichern und zu restaurieren kann wie folgt verfahren werden:

$ cd dir
$ getfacl -R -n . > .acl
$ cd ..
$ tar cf dir.tar dir
# tar xpf dir.tar
# cd dir
# setfacl -R -M .acl dir

Das Setfacl Kommando muss als root ausgeführt werden!

Die bessere Alternative ist es star zu installieren und zu verwenden.

Archivdatei erzeugen:

$ star -c -acl H=xustar f=dir.star dir

Archivdatei entpacken

$ star -x -acl f=dir.star

Rsync und ACL

Rsync beherrscht ACL, muss jedoch unter root Kennung laufen, damit die ACL weitergegeben werden!.

# rsync -aA dir /tmp/

Wenn der Anwender nicht root ist, werden die ACL, entsprechend der im Hauptordner vorgegebenen ACL, gesetzt. Veränderte ACL werden aber nicht berücksichtigt.

weiterführende Literatur