# Ändern der Zugriffsrechte

Zum Ändern der Zugriffsrechte steht das Kommando `chmod` zur Verfügung:

`chmod [options] <mode> <dateiname>`

Für die möglichen Optionen sei auf die Manuals verwiesen.

# Symbolischer Modus

Symbolisch lassen sich die Rechte setzen durch eine Kombination aus der betreffenden Rechtegruppe:

Symbol | Rechtegruppe
u | Eigentümer (user)
g | Gruppe (group)
o | Andere (others)
a | Alle (all)

und den entsprechenden Rechten:

Symbol | Recht
r | Leserecht
w | Schreibrecht
x | Ausführungsrecht
s | s-Bit setzen
t | t-Bit setzen
+ | Recht(e) hinzufügen
- | Recht(e) entfernen
= | Genau diese Recht(e) setzen

## Beispiele

`user@sonne> ls -l hello -rw-r--r-- 1 user users 108 Apr 7 12:10 hello user@sonne> chmod a+w hello -rw-rw-rw- 1 user users 108 Apr 7 12:10 hello user@sonne> chmod g-rw,u+xs hello -rws---rw- 1 user users 108 Apr 7 12:10 hello`

# Numerischer Modus

Rechte werden bitweise dargestellt, für Eigentümer, Gruppe und Andere.

Recht | Bitdarstellung | Wert
Execute | 0000 0001 | 1
Write | 0000 0010 | 2
Read | 0000 0100 | 4
rwx | 0000 0111 | 7

Jede Rechtegruppe wird durch einen numerischen Wert repräsentiert, die Sonderrechte (s,t) werden durch einen eigenen Wert dargestellt. Somit werden dem Kommando `chmod` maximal vier Werte übergeben (Abbildung). Fehlen Werte, werden diese von links her (!) als Null (keine Rechte) angenommen, d.h.

`chmod 1 <datei>`

ist gleichbedeutend mit

`chmod 0001 <datei>`

Für die Sonderrechte gelten folgende Bitdarstellungen:

Recht | Bitdarstellung | Wert
t-Flag | 0000 0001 | 1
s-flag der Gruppe | 0000 0010 | 2
s-Flag des Eigentümers | 0000 0100 | 4

## Beispiele

`user@sonne> ls -l hello -rw-r--r-- 1 user users 108 Apr 7 12:10 hello user@sonne> chmod 666 hello -rw-rw-rw- 1 user users 108 Apr 7 12:10 hello user@sonne> chmod 4706 hello -rws---rw- 1 user users 108 Apr 7 12:10 hello`

# Voreinstellung

Neue Dateien/Verzeichnisse werden offensichtlich stets mit ein und denselben Zugriffsrechten erzeugt:

`user@sonne> mkdir testdir user@sonne> touch testdat user@sonne> ls -ld test* -rw-r--r-- 1 user users 0 Apr 7 13:11 testdat drwxr-xr-x 2 user users 1024 Apr 7 13:11 testdir`

Zuständig für dieses Verhalten ist die so genannte `umask`, die oft in der Datei `/etc/profile` auf den Wert `022` voreingestellt wird. Zusätzlich wird noch eine Maximalmaske benötigt, die sich für Verzeichnisse und andere Dateien unterscheidet. Die bei der Erzeugung gesetzten Rechte entstehen nun, indem von der Maximalmaske der durch `umask` vorgegebene Wert subtrahiert wird:

| Verzeichnisse | Dateien
Maximalmaske | 777 | 666
umask | 022 | 022
Ergebnis | 755 | 644

Mit dem Kommando `umask` lässt sich die Voreinstellung ändern.