## Grundlagen
Linux verwaltet die Dateien in einem virtuellen Dateisystem (VFS,
Virtual File System). Hier wird jeder Datei über eindeutige Inodes
(Nummern) Eigenschaften zugeordnet:
- Dateityp (Datei, Ordner, Link)
- Zugriffsrechte für Eigentümer, Gruppe, Others
- Größe
- Zeitstempel
- Verweis auf Dateiinhalt
{{ :linux:dateirechte.drawio.svg?nolink&400 |}}
---
### Rechte
Zugriffsrechte regeln, welcher Benutzer und welche Gruppe den Inhalt
eins Verzeichnisses oder einer Datei lesen, verändern oder ausführen
darf.
Diese Rechte können verändert werden, wenn man dafür die entsprechenden
Rechte am Ordner bzw. der Datei verfügt. Der Root darf alles.
### Rechte lassen sich bezüglich 3 Arten des Zugriffs einstellen:
```
1. r - lesen
2. w - schreiben
3. x - ausführen
```
---
### Symbolische Darstellung von Rechten
Lässt man sich mit `ls` den Inhalt eines Ordners ausgeben, erhält man
beispielsweise folgende Zeile:
```
drwxrwxr-x 2 anna staff 4.0K Apr 23 2020 /home/anna/spielplan.txt
```
In dieser einen Zeile sind viele Informationen verborgen. Hier einmal
die einzelnen Bestandteile auseinandergerissen:
```
Ordner Besitzer Gruppe Welt Links zu Datei Eigentümer Gruppe Größe Zeitstempel Pfad/Name
-------- ---------- -------- ------ ---------------- ------------ -------- ------- ------------- --------------------------
d rwx rwx r-x 2 anna staff 4.0K Apr 23 2020 /home/anna/spielplan.txt
```
---
### Dateizugriffsrechte auf Datei- und Ordnerebene
Obwohl Dateirechte sowohl für Dateien als auch Ordner gelten, gibt es
kleine aber feine Unterscheidungen, die beachtet werden müssen. So ist
es hoffentlich klar, dass das `x`-Recht für Dateien etwas anderes
bedeuten muss, als für einen Ordner - einen Ordner kann man schließlich
nicht "ausführen".
| Recht | Datei | Verzeichnis |
|------------|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
| `r` | Datei kann gelesen werden. | Verzeichnisinhalt kann mit `ls` angezeigt werden. |
| `w` | Datei kann bearbeitet werden. | Dateien können hinzugefügt, gelöscht oder umbenannt werden. |
| `x` | Datei kann als Programm ausgeführt werden. | Verzeichnis kann betreten werden (z. B. mit `cd`), und der Zugriff auf Dateien ist möglich (sofern erlaubt). |
Die Rechte werden häufig kombiniert. Hier sind typische Szenarien:
**Dateien:**
1. `r - -`: Datei kann nur gelesen werden.
2. `r w -`: Datei kann gelesen und geschrieben werden, also: geändert.
3. `r w x`: Datei kann gelesen, geschrieben und ausgeführt werden.
**Verzeichnisse:**
1. `r - -`: Man **sieht** die Datei- oder Verzeichnisnamen, aber keinen
Zugriff auf Inhalte.
2. `r - x`: Man kann Verzeichnisinhalte **sehen** und **betreten**,
aber **keine Änderungen** vornehmen.
3. `r w x`: Man kann Inhalte auflisten, bearbeiten, **hinzufügen und
löschen**.
| **Aktion** | **Benötigte Rechte auf dem Verzeichnis** | **Benötigte Rechte auf der Datei** | **Erläuterung** |
| -------------------------------------- | ---------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------ |
| **Datei erstellen** | `w` + `x` | – | Das Verzeichnis muss veränderbar und betretbar sein, um den neuen Eintrag anzulegen. |
| **Datei lesen (Inhalt ansehen)** | `x` (zum Zugriff auf den Pfad) | `r` | Das Verzeichnis muss betretbar sein, und die Datei selbst muss lesbar sein. |
| **Datei ändern (Inhalt bearbeiten)** | `x` (zum Zugriff auf den Pfad) | `w` | Das Verzeichnis muss zugänglich sein, die Datei selbst muss schreibbar sein. |
| **Datei löschen** | `w` + `x` | egal | Das Löschen betrifft den Eintrag im Verzeichnis, nicht den Dateiinhalt. |
| **Datei umbenennen** | `w` + `x` | egal | Auch das Ändern des Namens verändert den Verzeichnisinhalt. |
| **Dateien im Ordner auflisten (`ls`)** | `r` + `x` | – | Nur das Verzeichnis selbst wird gelesen, nicht die Dateien darin. |
| **In Ordner wechseln (`cd`)** | `x` | – | Du darfst das Verzeichnis betreten. |
---
#### Oktale Darstellung
Die Buchstaben der symbolischen Darstellung sowie die Kombinationen aus
ihnen werden durch einzelne Ziffern repräsentiert. Dabei steht je 1
Ziffer für genau eine Kombinaton von einem oder mehreren Rechten.
#### Mögliche Werte für Kombinationen von Rechten
| Rechte | oktal | symbolisch | binär |
|---------------------------------|---------|--------------|---------|
| Lesen, schreiben und ausführen | 7 | `r w x` | 111 |
| Lesen und Schreiben | 6 | `r w -` | 110 |
| Lesen und Ausführen | 5 | `r - x` | 101 |
| Nur lesen | 4 | `r - -` | 100 |
| Schreiben und Ausführen | 3 | `- w x` | 011 |
| Nur Schreiben | 2 | `- w -` | 010 |
| Nur Ausführen | 1 | `- - x` | 001 |
| Keine Rechte | 0 | `- - -` | 000 |
Aus
Diese Kombinationen werden 3 mal angegeben für Benutzer, Gruppe, Others.
Daraus folgt ein 3 stellige Kombination von Zahlen. Diese können
eingesetzt werden, wenn man die Dateirechte ändern will. Hierzu benutzt
man den Befehl chmod
---
### Dateirechte ändern mit chmod
**Ausgangspunkt**
```
rwxr-xr-x 4 wed wed 4.0K Feb 23 14:53 hallo.txt
```
**Änderung 1**
Ich will nur noch den Besitzer "wed" lesen und schreiben
lassen. Alle anderen dürfen nichts.
```
chmod 600 hallo.txt
-rw------- 1 wed wed 17 Feb 23 13:37 hallo.txt
```
Die Kombination hierfür lautet 600 bzw `-rw`. (6- lesen und schreiben,
0-nichts, 0-nichts)
**Änderung 2**
Rechte ändern auf lesen, schreiben, ausführen für
Eigentümer und Gruppe. Alle anderen sollen wenigstens lesen können:
```
chmod 774 hallo.txt
-rwxrwxr-- 1 wed wed 17 Feb 23 13:37 hallo.txt
```
---
### Symbolische Methode zur Festlegung von Dateirechten in Linux
In Linux können Dateire
chte auch **symbolisch** mit dem Befehl `chmod` festgelegt werden.
Die symbolische Methode verwendet Abkürzungen, um die Berechtigungen für verschiedene Benutzerklassen zu ändern.
Diese Methode ist besonders nützlich, wenn Sie Berechtigungen relativ zu den aktuellen Einstellungen ändern möchten.
#### Benutzerklassen und Abkürzungen:
- **Benutzerklassen:**
- `u` für den Besitzer (user)
- `g` für die Gruppe (group)
- `o` für andere (others)
- `a` für alle (all, d.h. Benutzer, Gruppe und andere)
- **Operatoren:**
- `+` um Berechtigungen hinzuzufügen
- `-` um Berechtigungen zu entfernen
- `=` um Berechtigungen explizit zu setzen
- **Berechtigungen:**
- `r` für Leseberechtigung (read)
- `w` für Schreibberechtigung (write)
- `x` für Ausführungsberechtigung (execute)
#### Beispiele:
**Hinzufügen von Lese- und Schreibberechtigungen für den Besitzer und die Gruppe:**
```bash
chmod ug+rw dateiname
```
**Entfernen der Ausführungsberechtigung für andere:**
```bash
chmod o-x dateiname
```
**Setzen der Leseberechtigung für alle:**
```bash
chmod a=r dateiname
```
**Hinzufügen von Lese- und Ausführungsberechtigungen für die Gruppe:**
```bash
chmod g+rx dateiname
```
---
### Änderung von Eigentümer-User bzw. Eigentümer-Gruppe von Dateien chown - change owner
Besitzer oder Gruppe können mit uid/ gid oder Namen angegeben werden
chown alice:entwickler dokument.txt
**Kombinationsmöglichkeiten von Besitzer und Gruppe**
| Kombination | Bedeutung |
|------------------------------|---------------------------------------|
| `besitzer:gruppen_name` | Benutzer und Gruppe werden auf einen Schlag gesetzt |
| `:gruppen_name` | Die Gruppe wird gesetzt, wohingegen der Besitzer unverändert bleibt |
| `besitzer:` | Der Besitzer wird auf `besitzer` - und die Gruppe auf die Standardgruppe von `besitzer` gesetzt* |
| `besitzer` | Ausschließlich der Besitzer wird gesetzt |
Aus
*Abweichung vom Eintrag in wiki.ubuntuusers.de/chown !