init at home
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user