init at home

This commit is contained in:
2026-03-27 12:41:00 +01:00
commit 352c352056
58 changed files with 13083 additions and 0 deletions
@@ -0,0 +1,365 @@
# Dateiberechtigungen - chmod und chown
Verwaltung von Zugriffsrechten, Eigentümern und Gruppen in Linux.
## Rechte-System in Linux
Jede Datei hat:
- **Eigentümer (Owner)** - der Benutzer, dem die Datei gehört
- **Gruppe (Group)** - eine Benutzergruppe
- **Zugriffsrechte** für drei Bereiche:
- **u** (user) = Eigentümer
- **g** (group) = Gruppe
- **o** (others) = Andere
Jeder Bereich hat drei Rechte:
- **r** (read) = Lesen (4)
- **w** (write) = Schreiben (2)
- **x** (execute) = Ausführen (1)
## Rechte anzeigen
```bash
ls -l datei.txt
```
Ausgabe:
```
-rw-r--r-- 1 alice developers 1234 Nov 7 10:00 datei.txt
```
- Position 1: Dateityp (`-` = Datei, `d` = Verzeichnis, `l` = Link)
- Position 2-4: User-Rechte (`rw-`)
- Position 5-7: Group-Rechte (`r--`)
- Position 8-10: Other-Rechte (`r--`)
- `alice` = Eigentümer
- `developers` = Gruppe
## chmod - Zugriffsrechte ändern
### Symbolische Notation
```bash
chmod [ugoa][+-=][rwx] datei
```
**Rechte hinzufügen:**
```bash
chmod u+x script.sh # Eigentümer: ausführbar
chmod g+w datei.txt # Gruppe: schreibbar
chmod o+r datei.txt # Andere: lesbar
chmod a+x script.sh # Alle: ausführbar
```
**Rechte entfernen:**
```bash
chmod u-x script.sh # Eigentümer: nicht ausführbar
chmod g-w datei.txt # Gruppe: nicht schreibbar
chmod o-r datei.txt # Andere: nicht lesbar
```
**Rechte setzen (überschreiben):**
```bash
chmod u=rw,g=r,o= datei.txt # User: rw, Group: r, Others: keine
chmod a=r datei.txt # Alle: nur lesen
```
### Numerische Notation (Oktal)
Rechte als dreistellige Oktalzahl:
| Wert | Rechte | Bedeutung |
|------|--------|-----------|
| 0 | `---` | Keine Rechte |
| 1 | `--x` | Ausführen |
| 2 | `-w-` | Schreiben |
| 3 | `-wx` | Schreiben + Ausführen |
| 4 | `r--` | Lesen |
| 5 | `r-x` | Lesen + Ausführen |
| 6 | `rw-` | Lesen + Schreiben |
| 7 | `rwx` | Alle Rechte |
**Häufige Kombinationen:**
```bash
chmod 644 datei.txt # rw-r--r-- (Standard für Dateien)
chmod 755 script.sh # rwxr-xr-x (Standard für Scripts)
chmod 700 privat.key # rwx------ (Nur Eigentümer)
chmod 600 ~/.ssh/id_rsa # rw------- (SSH-Schlüssel)
chmod 777 verzeichnis # rwxrwxrwx (Alle Rechte - UNSICHER!)
```
Beispiel: `chmod 755` bedeutet:
- User: 7 (rwx)
- Group: 5 (r-x)
- Others: 5 (r-x)
### Rekursiv
```bash
chmod -R 755 /pfad/zum/verzeichnis
```
**Nur Verzeichnisse oder nur Dateien:**
```bash
find . -type d -exec chmod 755 {} + # Alle Verzeichnisse
find . -type f -exec chmod 644 {} + # Alle Dateien
```
### Spezielle Rechte
**Sticky Bit** (nur Eigentümer kann löschen):
```bash
chmod +t /tmp # Symbolic
chmod 1777 verzeichnis # Numeric (rwxrwxrwt)
```
**SUID** (läuft mit Rechten des Eigentümers):
```bash
chmod u+s /usr/bin/passwd # Symbolic
chmod 4755 datei # Numeric (rwsr-xr-x)
```
**SGID** (neue Dateien erben Gruppe):
```bash
chmod g+s verzeichnis # Symbolic
chmod 2755 verzeichnis # Numeric (rwxr-sr-x)
```
### Praktische Beispiele
**Script ausführbar machen:**
```bash
chmod +x meinscript.sh
./meinscript.sh
```
**SSH-Verzeichnis absichern:**
```bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
```
**Web-Verzeichnis:**
```bash
chmod -R 755 /var/www/html
find /var/www/html -type f -exec chmod 644 {} +
find /var/www/html -type d -exec chmod 755 {} +
```
**Projekt-Verzeichnis:**
```bash
chmod -R u+rwX,g+rX,o-rwx projektordner
```
(`X` = ausführbar nur für Verzeichnisse)
## chown - Eigentümer und Gruppe ändern
### Grundsyntax
```bash
chown [OPTIONEN] EIGENTÜMER[:GRUPPE] DATEI
```
### Eigentümer ändern
```bash
chown alice datei.txt
```
### Eigentümer und Gruppe ändern
```bash
chown alice:developers datei.txt
```
### Nur Gruppe ändern
```bash
chown :developers datei.txt
```
Oder mit `chgrp`:
```bash
chgrp developers datei.txt
```
### Rekursiv
```bash
chown -R alice:developers /pfad/zum/verzeichnis
```
### Von anderem Benutzer übernehmen
```bash
chown --reference=referenzdatei zieldatei
```
### Praktische Beispiele
**Web-Server Verzeichnis:**
```bash
sudo chown -R www-data:www-data /var/www/html
```
**Home-Verzeichnis korrigieren:**
```bash
sudo chown -R alice:alice /home/alice
```
**Nach Copy von Root:**
```bash
sudo cp /root/datei.txt /home/alice/
sudo chown alice:alice /home/alice/datei.txt
```
**Nur Dateien, nicht Verzeichnisse:**
```bash
find /pfad -type f -exec chown alice:developers {} +
```
**Nur bei Bedarf ändern:**
```bash
find /pfad ! -user alice -exec chown alice {} +
find /pfad ! -group developers -exec chgrp developers {} +
```
### Symbolische Links
Standardmäßig ändert `chown` das Ziel des Links:
```bash
chown alice symlink # ändert Ziel
chown -h alice symlink # ändert nur den Link selbst
```
## Kombinierte Anwendung
### Berechtigungen komplett setzen
```bash
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} +
sudo find /var/www/html -type f -exec chmod 644 {} +
```
### Projekt-Setup
```bash
sudo chown -R alice:developers /opt/projekt
chmod -R u+rwX,g+rwX,o-rwx /opt/projekt
```
### Backup wiederherstellen
```bash
sudo tar -xpf backup.tar.gz # -p bewahrt Rechte
sudo chown -R alice:alice /home/alice/restored/
```
## Berechtigungen prüfen
```bash
ls -l datei.txt # Einfache Ansicht
stat datei.txt # Detaillierte Info
getfacl datei.txt # ACLs anzeigen (falls gesetzt)
```
## Eigentümer-ID statt Name
```bash
chown 1000:1000 datei.txt # Verwendet UID und GID direkt
```
UIDs anzeigen:
```bash
id alice # UID und GIDs von alice
```
## Fehler vermeiden
### Rekursive Änderungen testen
```bash
# Erst anzeigen
find /pfad -ls
# Dann ändern
sudo chown -R alice:developers /pfad
```
### NIEMALS auf Root-Verzeichnis
```bash
# GEFÄHRLICH - bricht System
sudo chown -R user:user / # NIEMALS!
sudo chmod -R 777 / # NIEMALS!
# Nur eigene Verzeichnisse
sudo chown -R user:user /home/user
```
### Zu permissive Rechte
```bash
# FALSCH - macht alles ausführbar
chmod -R 777 verzeichnis # NICHT verwenden!
# RICHTIG - differenziert
find verzeichnis -type d -exec chmod 755 {} +
find verzeichnis -type f -exec chmod 644 {} +
```
### Systemdateien
```bash
# Wichtige Systemdateien sollten root gehören
ls -l /etc/passwd /etc/shadow
# -rw-r--r-- 1 root root ... /etc/passwd
# -rw-r----- 1 root shadow ... /etc/shadow
```
## Mit sudo
`chown` erfordert meist Root-Rechte:
```bash
sudo chown root:root /etc/wichtig.conf
sudo chmod 644 /etc/wichtig.conf
```
Ohne sudo:
```bash
# Nur eigene Dateien
chmod 644 meine_datei.txt
# chown nur als root
chown alice datei.txt # Permission denied (außer eigene Datei)
```
## Zusammenfassung
| Befehl | Zweck | Beispiel |
|--------|-------|----------|
| `chmod` | Rechte ändern | `chmod 755 script.sh` |
| `chown` | Eigentümer ändern | `chown alice:developers file` |
| `chgrp` | Nur Gruppe ändern | `chgrp developers file` |
| `ls -l` | Rechte anzeigen | `ls -l file` |
| `stat` | Details anzeigen | `stat file` |
**Standard-Rechte:**
- Dateien: `644` (rw-r--r--)
- Scripts: `755` (rwxr-xr-x)
- Verzeichnisse: `755` (rwxr-xr-x)
- Private Dateien: `600` (rw-------)
## Siehe auch
- [[find]] - Dateien mit bestimmten Rechten/Eigentümern finden
- [[ls]] - Rechte und Eigentümer anzeigen
- [[Symlinks]] - Links bleiben bei chown erhalten
- [[tar]] - Rechte in Archiven bewahren
- [[rsync]] - Rechte bei Synchronisation