Das Rechtesystem von Linux

Notationen

Die Rechte unter Linux können für jede Datei oder Ordner einzeln festgelegt werden. Dabei gibt es 3 Benutzergruppen: User(u), Gruppe(g), Others(o). Die Rechte können nun für jede der 3 Benutzergruppen einzeln eingestellt werden. Es stehen 3 Rechte zur Verfügung: Lesen, Schreiben , Ausführen.

Darüber hinaus gibt es noch 3 Sonderrechte, die erwähnt werden müssen.

Sticky Bit:

Wenn gesetzt, kann die Datei nur noch vom Besitzer oder von root gelöscht werden. Es findet z.B beim Verzeichnis /tmp Anwendung, da hier kein Benutzer die Dateien eines anderen Benutzers im gemeinsamen Verzeichnis löschen soll. http://de.wikipedia.org/wiki/Sticky_bit

SUID Bit

Wenn gesetzt, läuft eine ausführbare Datei dann immer unter den Rechten Ihres Besitzers. http://de.wikipedia.org/wiki/Setuid

SGID Bit

Wie SUID, nur dass hier die Datei mit den Rechten der Gruppe ausgeführt wird. Bei Verzeichnissen entsteht eine Vererbung an die Unterverzeichnisse. http://de.wikipedia.org/wiki/Setgid

Numerische Notation

Jedes Recht bekommt einen Zahlenwert zugewiesen. Read(4), Write(2), Execute(1). Dann werden für jede Benutzergruppe die Rechte addiert, und die 3 Benutzergruppen hintereinander geschrieben.

Beispiele einfache numerische Notation:

User Group Others Rechte
r(4)w(2)e(1)r(4)w(2)e(1)r(4)w(2)e(1) 
 x x  x   x  644
       x   x011
 x x    x   x611
 x x       600
 x x x x  x x  x755

Die 3 Sonderrechte Suid, Sgid und Sticki-Bit werden meist nicht mit angegeben, besonders nicht, wenn sie ohnehin nicht gesetzt sind. Sind sie doch gesetzt, werden sie in der numerischen Notation als weitere Gruppe links angefügt. Das ist ohne weiteres möglich, da alle 3 Rechte immer nur für die ganze Datei/Ordner gesetzt werden können und nicht für jede Benutzergruppe einzeln. Die Werte werden dabei wie folgt festgelegt.

Sticki Bit(1), SGID(2), SUID(4)

Beispiele erweiterte numerische Notation

Sonder User Group Others Rechte
suid(4)sgid(2)sb(1)r(4)w(2)e(1)r(4)w(2)e(1)r(4)w(2)e(1) 
 x x x x x  x   x  7644
 x  x       x   x5011
  x x x x    x   x3611
 x x  x x       6600
  x  x x x x  x x  x2755

Symbolische Notation

Bei der symbolischen Notation werden die Rechte rwx für alle 3 Benutzergruppen hintereinander geschrieben. Ist das entsprechende Recht nicht gesetzt, wird anstelle des Buchstaben ein Bindestrich geschrieben.

Es entsteht ein String mit neun Zeichen. Die erweiterten Dateirechte werden in diesen eingebaut, indem das x an Position drei oder sechs durch ein s ersetzt wird, wenn das Setuid-Bit bzw. das Setgid-Bit gesetzt ist. Ist das Sticky-Bit gesetzt, dann wird es durch ein t anstelle des letzten x an Position neun ersetzt. Sind die Ausführ-Rechte für die entsprechenden Benutzerklassen nicht gesetzt, werden die jeweiligen s bzw. t großgeschrieben.

Man kann sich das leicht mit einer Eselsbrücke merken. Das s oder t muss klein geschrieben werden, wenn dahinter noch ein x sitzt. Für einen Großbuchstaben reicht der Platz nicht aus, da sich 2 Buchstaben das Feld teilen.

Abschließend muss noch erwähnt werden, dass vor dem ganzen Block immer noch der Dateityp angegeben ist. Folgende Datentypen sind möglich:

Datei ist eine normale Datei
Datei ist ein Directory 
lSoftlink 

Sonder User Group Others Rechte
suid(4)sgid(2)sb(1)r(4)w(2)e(1)r(4)w(2)e(1)r(4)w(2)e(1) 
 x xx x x  x   x  --rwSr-Sr-T
 x  x       x   x---S--x--t
  x x x x    x   xdrw---s--t
 x x  x x       -rwS--S---
  x  x x x x  x x  x-rwxr-sr-x

Befehle

chmod

chmod ändert die Rechte an einer Datei oder einem Verzeichnis. Dabei kann man sich entweder der numerischen Notation bedienen:

chmod 755 Dateiname
chmod 1775 Dateiname

Oder man bedient sich der Zeichen der symbolischen Notation. Dabei gibt es noch einige Sonderfunktionen gegenüber der normalen Notation, die jetzt erläutert werden.

Die Benutzergruppen werden wieder durch User(u), Group(g), und Others(o) repräsentiert. Zusätzlich gibt es noch all(a), welches alle drei Benutzergruppen umschließt.

User (u) All (a) 
Group (g)
Others (o)

Danach kommt ein Steuerzeichern(+-=), das aussagt ob die nachstehenden Rechte für diese Gruppe hinzukommen(+), entfallen(-) oder ohne Berücksichtigung der bisherigen Einstellungen(=) gesetzt werden sollen.

Die nachstehenden Rechte werden für die Benutzergruppe gesetzt.
Die nachstehenden Rechte werden für die Benutzergruppe entfernt.
=Rechte werden ohne Berücksichtigung der bisherigen Einstellungen für diese Benutzergruppe geändert. 

Natürlich gibt es auch wieder die entsprechenden Rechte read(r), write(w), execute(x), Sticky Bit(t) und SUID/SGID(s)

Beispiele:

chmod a+x DateinameUser, Group und Others bekommen ein Ausführungsrecht.  
chmod a-rw DateinameUser, Group und Others wird das Leserecht und das Schreibrecht entzogen, wenn vorhanden. Sonst keine Änderung
chmod u-xg-xo=rw DateinameDer User bekommt das Ausführungsrecht entzogen.
Die Gruppe bekommt das Ausführungsrecht entzogen.
Bei den Others wird lesen und schreiben gesetzt, ausführen wird entfernt
chmod u=rwxg+rxo-rwx DateinameDer User bekommt alle Rechte.
Die Gruppe bekommt lesen und ausführen.
Den Others werden alle Rechte entzogen.
chmod g+s DateinameDas SGID wird gesetzt. SGID, weil es in der Group gesetzt wird.
chmod u-s DateinameDas SUID wird gesetzt. SUID, weil es beim User gesetzt wird.
chmod o+t DateinameDas Sticky Bit wird gesetzt. Gemäß der Notation muss das in der Gruppe Others erfolgen.

chown

Mit chown können User und Gruppe nachträglich geändert werden. Dabei kann der Name oder die jeweilige ID angegeben werden.

chown [OPTIONEN] [Besitzer][:[Gruppe]] Datei

Der Schalter -R ändert auch entsprechend die Dateien in den Unterverzeichnissen.

 besitzer_name:gruppen_name Benutzer und Gruppe werden auf einen Schlag gesetzt  
 :gruppen_name  Die Gruppe wird gesetzt, wohingegen der Besitzer unverändert bleibt
 besitzer_name:  Der Besitzer wird auf besitzer_name - und die Gruppe auf die Standardgruppe des eingeloggten Benutzers gesetzt
 besitzer_name  Ausschließlich der Besitzer wird gesetzt

chgrp

Wie chown, nur dass ausschließlich die Gruppe geändert wird.

chgrp [Option] Gruppe Datei

Rechte in der Praxis

Rechte eines Verzeichnisses

Verzeichnis-
recht 
Inhalt
listen
erlaubt? 
Betreten
erlaubt? 
Datei
anlegen
erlaubt? 
Datei
löschen
erlaubt? 
Datei
holen
mit cp 
Datei
überschreiben
mit cp 
Recht des VerzeichnissesRecht der Datei
000d--- --- ---      
100d--x --- ---  Ja   Ja Ja
200d-w- --- ---      
300d-wx --- ---  Ja Ja Ja Ja Ja
 drwx -wx --- (Group User)  Ja Ja Ja Ja 
 drwx rwx --t (Group User)  Ja Ja Ja Ja* Ja Ja
 drwx rwx --t (Owner)  Ja Ja Ja Ja Ja Ja
400dr-- --- --- Ja(eingeschr)     
500dr-x --- --- Ja Ja   Ja Ja
600drw- --- --- Ja(eingeschr)     
700drwx --- --- Ja Ja Ja Ja Ja Ja
Fazit benötigtes Recht: r   eingeschr
 rx voll
 x des
 Verz.
 wx des
 Verz.
 wx des
 Verz.

 x der
 Datei

x von
Verzeichnis

 x der
Datei
von User

x von
Verzeichnis

 *Löschen nur durch den Besitzer der Datei oder des Verzeichnisses.

Datei holen und schreiben oder überschreiben sind Rechte der Datei. Befindet sich die Datei in einem Verzeichnis, muss dieses mindestens ein x gesetzt haben.

Rechte einer Datei

Datei-
recht 
Datei
lesen
anzeigen
kopieren
Ändern
und
verlassen
des
Editors
mit :wq
Ändern und
verlassen
des Editors
mit :w!
Datei
ausführen

Übersetztes
C-Prog
Datei
ausführen

Shell
Script
UserGroup 
000---- --- ---   Ja   
110---x --x ---   Ja  Ja 
220--w- -w- ---   Ja   
330--wx -wx ---   Ja  Ja 
440-r-- r-- r-- Ja  Ja   
550-r-x r-x --- Ja  Ja  Ja Ja
660-rw- rw- --- Ja Ja Ja Ja  
770-rwx rwx --- Ja Ja Ja Ja Ja Ja
Fazit benötigtes Recht: r rw Geht immer rw x rx

Der Besitzer einer Datei darf diese immer mit w! überschreiben.

Aktualisiert (Sonntag, den 11. April 2010 um 20:05 Uhr)