Linux · Tag 2 · Kapitel 05 von 6

Berechtigungen setzen

Lesen kannst du jetzt — jetzt lernst du, Berechtigungen selbst zu setzen. Drei Werkzeuge: chmod ändert die Rechte, chown ändert den Eigentümer, chgrp ändert die Gruppe. Symbolisch (u+x) oder numerisch (755) — beide Wege müssen sitzen.

📚 Kapitel 05 ⏱️ ca. 20 min Theorie + 45 min Lab 🧪 Lab 2.5
Inhalt dieses Kapitels
5.1

chmod — die symbolische Schreibweise

Pflicht

chmod = change mode. Verändert die Rechte (r, w, x) für User, Group und/oder Others.

Grundformel

chmod [wer][operator][was] datei
  • wer: u (user) · g (group) · o (others) · a (all = u+g+o)
  • operator: + (hinzufügen) · - (entziehen) · = (genau setzen)
  • was: r · w · x (auch kombiniert)

Die wichtigsten symbolischen Befehle

BefehlWirkung
chmod u+x datei.shOwner darf jetzt ausführen
chmod g-w datei.txtGroup darf nicht mehr schreiben
chmod o=r datei.txtOthers dürfen genau lesen (sonst nichts)
chmod ug+w datei.txtOwner und Group dürfen schreiben
chmod a+r datei.txtAlle dürfen lesen (entspricht ugo+r)
chmod u=rwx,g=rx,o= datei.shKomplett-Setzung in einem Befehl

Code-Beispiele

bash
# Vorher
ls -l skript.sh
# → -rw-r--r-- 1 admin admin 245 Mai 26 14:22 skript.sh

# Owner soll das Skript ausführen können
chmod u+x skript.sh

# Nachher
ls -l skript.sh
# → -rwxr--r-- 1 admin admin 245 Mai 26 14:22 skript.sh

# Schreibrecht für alle anderen wegnehmen
chmod go-w datei.txt

# Komplette Neusetzung mit Komma-Trennung
chmod u=rw,g=r,o= geheim.txt
# → -rw-r----- (nur Owner schreiben, Group lesen, Others nichts)
💡
Wann was nehmen?

+ und - sind perfekt für Mikroänderungen — „füg mal x für Owner hinzu". Die bestehenden Rechte bleiben, nur das Eine wird verändert.

= ist gefährlicher, aber präziser — alle bisherigen Rechte für diese Gruppe werden überschrieben. Wenn du genau weißt, welcher Endzustand sein soll, ist = der Weg.

🛡️
Wozu brauchst du chmod symbolisch?
  • Skript ausführbar machen: chmod u+x backup.sh — der häufigste chmod-Befehl überhaupt
  • Schreibschutz aufheben: chmod u+w schreibgeschützt.conf — Datei wieder editierbar machen
  • Fremde Zugriffe wegnehmen: chmod o-rwx privat.txt — Others komplett aussperren
▶ Mehr Use Cases — chmod symbolisch im Alltag
  • Datei für Webserver freigeben: chmod a+r public.html — alle dürfen lesen, der Webserver-User auch
  • Mehrere Dateien gleichzeitig: chmod u+x *.sh (Wildcards aus Kap. 01!)
  • Rekursiv im ganzen Ordner: chmod -R g+r projekt/ — Group bekommt überall Leserechte
  • Schreibrechte ganz wegnehmen: chmod a-w wichtig.conf — auch Owner muss erst wieder Schreibrecht setzen, bevor er ändern kann
5.2

chmod — die numerische Schreibweise (0–7)

Pflicht

Die „Profi-Variante". Sieht erst kryptisch aus, ist aber kürzer und eindeutiger.

Werte der Rechte

RechtWert
r (read)4
w (write)2
x (execute)1
- (kein Recht)0

Kombinationen (alle 8 Möglichkeiten)

KombiRechnungWertBedeutung
---0+0+00nichts
--x0+0+11nur ausführen
-w-0+2+02nur schreiben (selten sinnvoll)
-wx0+2+13schreiben + ausführen
r--4+0+04nur lesen
r-x4+0+15lesen + ausführen
rw-4+2+06lesen + schreiben
rwx4+2+17alles

Die Drei-Zahlen-Notation

chmod 755 skript.sh ↑↑↑ │││ ││└→ 5 = r-x (Others: lesen + ausführen) │└─→ 5 = r-x (Group: lesen + ausführen) └──→ 7 = rwx (User: alles)

Die wichtigsten Standard-Zahlen

ZahlBerechtigungWofür typisch?
644rw-r--r--Normale Dateien (Standard nach touch)
755rwxr-xr-xVerzeichnisse und Skripte/Programme
600rw-------Privat (z. B. SSH-Keys, Passwort-Dateien)
700rwx------Privates Verzeichnis (z. B. ~/.ssh/)
660rw-rw----Team-Datei (Owner + Group, Rest gar nichts)
777rwxrwxrwxJEDER darf alles — fast immer falsch!
400r--------Read-Only für Owner (Backups, Archive)
⚠️
Verwechslungs-Falle bei 755 vs 644

Eine der häufigsten Verwechslungen:

  • Dateien brauchen fast nie x — also 644 (Standard).
  • Verzeichnisse brauchen immer x — sonst kommt niemand rein. Also 755 (Standard).

Wenn du also versehentlich chmod 644 mein_ordner/ machst, kannst du danach nicht mehr reingehen. Und wenn du chmod 755 mein_textdokument.txt machst, hast du dem Dokument unnötig x gegeben.

Tipp: -R für ganze Verzeichnisbäume

Mit der Option -R (rekursiv) wendet chmod die Änderung auf das Verzeichnis und alle Dateien/Unterverzeichnisse darin an:

bash
chmod -R 755 /opt/meine-app/

Vorsicht: rekursiv setzt die Rechte überall — auch auf Dateien, die vielleicht andere Rechte brauchen sollten.

Code-Beispiele

bash
# Skript ausführbar für alle, aber nur Owner darf ändern
chmod 755 backup.sh
ls -l backup.sh
# → -rwxr-xr-x

# Privater SSH-Key — niemand außer Owner darf gucken
chmod 600 ~/.ssh/id_rsa
ls -l ~/.ssh/id_rsa
# → -rw-------

# Team-Config: Owner und Group dürfen ändern, Rest gar nichts
chmod 660 team.conf
ls -l team.conf
# → -rw-rw----

# Rekursiv auf einen ganzen Verzeichnisbaum
chmod -R 755 /opt/meine-app/

Symbolisch vs. Numerisch — wann was?

SituationEmpfehlung
Schnell ein Recht hinzufügen/wegnehmenSymbolisch (chmod u+x)
Komplett-Setzung für viele DateienNumerisch (chmod 755)
Skript für AutomationNumerisch (eindeutig)
Mit Kollegen am Serverbeide gleich gut — wer schneller tippt, gewinnt
🛡️
Wozu brauchst du chmod numerisch?
  • Skript-Setup nach Deployment: chmod 755 *.sh und chmod 644 *.conf
  • SSH-Sicherheit: chmod 600 ~/.ssh/id_rsa — ohne das verweigert SSH den Key
  • Wiederherstellen nach chmod 777-Unfall: Wenn jemand alles auf 777 gesetzt hat, kannst du mit einer Zeile alles korrigieren
▶ Tiefer einsteigen: Warum gerade 4/2/1?
  • 4, 2, 1 sind die ersten drei Zweierpotenzen: 2⁰=1, 2¹=2, 2²=4
  • Das hat einen Grund: in der Binärdarstellung ist rwx = 3 Bits = z. B. 111 = 7
  • Jede Kombination der drei Rechte hat genau eine eindeutige Summe zwischen 0 und 7 — deswegen funktioniert die Addition ohne Konflikte
  • Das ist intern, wie Linux die Berechtigungen wirklich speichert: als 3-Bit-Zahlen pro Gruppe
  • Bonus: Es gibt sogar eine vierte Stelle vorne (z. B. 4755 für SUID, 2755 für SGID, 1755 für Sticky Bit) — siehe Klappbox aus Kapitel 04!
5.3

chown & chgrp — Eigentümer und Gruppe ändern

Pflicht

chown — change owner

bash
# Eigentümer ändern (braucht meist sudo!)
sudo chown nobody datei.txt

# Eigentümer UND Gruppe gleichzeitig — mit Doppelpunkt
sudo chown nobody:wheel datei.txt

# Nur die Gruppe (auch mit chown möglich)
sudo chown :wheel datei.txt

# Rekursiv durch ein Verzeichnis
sudo chown -R nobody:wheel /opt/projekt/

chgrp — change group

bash
# Gruppe ändern
sudo chgrp wheel datei.txt

# Rekursiv
sudo chgrp -R wheel /opt/projekt/
📌
Warum braucht das meist sudo?

Eigentümer und Gruppen zu ändern ist eine sicherheitsrelevante Operation — der normale User darf das in der Regel nicht (sonst könnte er Dateien an root übergeben oder Rechte umgehen). Root (oder ein User mit sudo-Rechten) darf alles.

Ausnahme: Wenn die neue Gruppe eine ist, in der du selbst Mitglied bist, darfst du deinen eigenen Dateien diese Gruppe zuweisen — ohne sudo.

📌
Was sind nobody und wheel?

Auf jedem Linux-System gibt es neben echten Benutzern auch eine Reihe von System-Accounts — vordefinierte User und Gruppen, die Linux für interne Zwecke nutzt:

  • nobody ist ein spezieller User mit absolut minimalen Rechten. Er gehört keiner echten Person und wird klassisch für Dienste benutzt, die „möglichst wenig dürfen sollen" (z. B. Webserver für anonyme Zugriffe).
  • wheel ist eine traditionelle Gruppe — Mitglieder dieser Gruppe dürfen meistens sudo benutzen, also Admin-Befehle ausführen. Auf Rocky Linux ist das die Standard-Admin-Gruppe.

Im Lab nutzen wir die beiden als Test-Werte, weil sie auf praktisch jedem Linux-System existieren — du musst sie nicht selbst anlegen. Im echten Admin-Alltag hast du natürlich echte Benutzer wie sandra oder markus.

📌
Erinnerung: whoami und groups aus Kap. 04

Falls du wissen willst, welcher User du bist und in welchen Gruppen du Mitglied bist:

bash
whoami      # → admin
groups      # → admin wheel
🛡️
Wozu brauchst du chown/chgrp?
  • Übergabe an Kollegen: Datei gehört dir, soll aber Sandra gehören → sudo chown sandra datei.txt
  • Webserver-Setup: Apache/nginx braucht Lesezugriff → sudo chown -R www-data:www-data /var/www/
  • Team-Bereich anlegen: Verzeichnis gehört der Team-Gruppe → sudo chown :team /shared/team-projekt/
▶ Mehr Use Cases — chown/chgrp in der Praxis
  • Eigentümer-Reset nach Restore: Nach Backup-Wiederherstellung gehört evtl. alles root — mit chown -R korrigieren
  • Migration zwischen Systemen: User-IDs unterscheiden sich, chown nach dem Kopieren ist Pflicht
  • Service-User absichern: Datenbank-Daten gehören dem DB-User, nicht root: sudo chown -R postgres:postgres /var/lib/pgsql/
  • Schreibrechte für Gruppe statt Owner-Wechsel: Statt chown lieber chgrp + chmod g+w — flexibler
5.4

Kurz angerissen: umask und Default-Berechtigungen

Bonus
🔵 Vertiefung für Neugierige: umask & Default-Berechtigungen (optional)
  • Wenn du eine neue Datei mit touch anlegst, bekommt sie automatisch Berechtigungen — meistens 644 für Dateien und 755 für Verzeichnisse.
  • Warum genau diese? Das steuert die umask (user mask) — eine Art „Berechtigungs-Maske", die Rechte wegnimmt.
bash
# Aktuelle umask anzeigen
umask
# → 0022

# Was bedeutet 0022?
# Es werden 022 von den maximalen Rechten abgezogen:
# Dateien:       666 - 022 = 644  (rw-r--r--)
# Verzeichnisse: 777 - 022 = 755  (rwxr-xr-x)

Warum die umask wichtig ist: Sie ist die Antwort auf „Wieso sind neue Dateien automatisch 644?". Auf Multi-User-Servern setzt man oft umask 077 — neue Dateien sind dann standardmäßig nur für Owner sichtbar.

🧪 Lab 2.5 Berechtigungen für die neue Web-Plattform 45 min

📧 Von: Markus Becker · IT-Leitung
An: Tim Schulz (du)
Betreff: Berechtigungen für die neue Web-Plattform — bitte einrichten


Hi Tim,

Sandra hat mir gerade gesagt, dass eure neue interne Web-Plattform fast fertig ist. Bevor wir live gehen, müssen wir die Berechtigungen sauber setzen — und zwar nicht das übliche „alles auf 777, läuft schon irgendwie".

Bitte bau dir lokal eine Test-Struktur, in der du folgendes übst:

  1. Eine öffentliche Webserver-Struktur mit htdocs/, configs/, logs/ — jeweils mit den richtigen Berechtigungen für Webserver und Admins.
  2. Eine private Konfigurationsdatei für DB-Zugangsdaten, die nur du lesen darfst.
  3. Skript-Dateien, die ausführbar sein müssen — aber nur für die Admin-Gruppe.
  4. Eine Team-Datei, in der Sandra und du gemeinsam arbeiten könnt, andere aber nur lesen.

Üb auch beides — symbolisch UND numerisch. Im echten Setup nehmen wir später numerisch (weil's automatisierbar ist), aber wer's symbolisch nicht kann, versteht's nie wirklich.

Wenn das sitzt, würde ich gerne mit dir später auch chown/chgrp üben — eine Übergabe an Sandra steht an, und da müssen wir die Eigentümer sauber umsetzen.

Danke!
— Markus

Teil A — Test-Struktur aufbauen (5 min)
  1. Erstelle ~/webserver-lab/ und darin die Unterordner htdocs/, configs/, logs/ in einem Befehl (Brace Expansion!).
  2. Erstelle in jedem dieser Ordner eine Test-Datei: htdocs/index.html, configs/db.conf, logs/access.log (mit touch).
  3. Schau dir mit ls -la an, welche Default-Berechtigungen Linux gesetzt hat.
bash
mkdir -p ~/webserver-lab/{htdocs,configs,logs}
cd ~/webserver-lab
touch htdocs/index.html configs/db.conf logs/access.log
ls -la
# Default-Berechtigungen:
# Verzeichnisse: drwxr-xr-x (755)
# Dateien:       -rw-r--r-- (644)
Teil B — Symbolisch üben (10 min)
  1. index.html soll für alle lesbar sein (Webserver muss dran). → Setze mit symbolischer Notation: alle dürfen lesen, nur Owner darf schreiben.
  2. db.conf ist privat — nur du sollst lesen und schreiben können, niemand sonst irgendwas. → Setze mit symbolischer Notation. Tipp: chmod go= entzieht Group und Others alle Rechte.
  3. access.log soll für die Gruppe lesbar sein, aber Others sehen nichts. → Setze symbolisch.
  4. Schau dir nach jedem Schritt mit ls -l an, ob es passt.
bash
# 4) Alle dürfen lesen, nur Owner darf schreiben
chmod a=r,u+w htdocs/index.html
# oder klassisch:
chmod u=rw,go=r htdocs/index.html
ls -l htdocs/index.html
# → -rw-r--r--

# 5) Privat — nur Owner darf alles, sonst niemand
chmod u=rw,go= configs/db.conf
ls -l configs/db.conf
# → -rw-------

# 6) Group lesbar, Others nichts
chmod u=rw,g=r,o= logs/access.log
ls -l logs/access.log
# → -rw-r-----
Teil C — Numerisch üben (10 min)
  1. Erstelle drei neue Dateien: setup.sh, team-notiz.txt, backup.tar.gz.
  2. setup.sh soll für alle ausführbar sein (755). → Setze numerisch.
  3. team-notiz.txt soll für Owner und Group beschreibbar sein, Others nur lesen (664). → Setze numerisch.
  4. backup.tar.gz soll nur vom Owner lesbar sein, sonst niemand (400). → Setze numerisch.
  5. Prüfe alle drei mit ls -l.
bash
touch setup.sh team-notiz.txt backup.tar.gz

# 9) Skript: 755
chmod 755 setup.sh
ls -l setup.sh
# → -rwxr-xr-x

# 10) Team-Notiz: 664
chmod 664 team-notiz.txt
ls -l team-notiz.txt
# → -rw-rw-r--

# 11) Backup: 400
chmod 400 backup.tar.gz
ls -l backup.tar.gz
# → -r--------
Teil D — Verzeichnisse korrekt rechtsetzen (8 min)
  1. Setze für alle drei Verzeichnisse (htdocs/, configs/, logs/) numerische Berechtigungen: htdocs755, configs750, logs750.
  2. Versuche, als normaler User in configs/ zu wechseln. Geht das?
  3. Erstelle ein Skripte-Verzeichnis scripts/ mit chmod 750 und leg setup.sh aus Teil C dort rein. Hat es jetzt noch die alten Rechte?
bash
# 13) Verzeichnis-Rechte
chmod 755 htdocs
chmod 750 configs
chmod 750 logs

# 14) configs/ betreten testen
cd configs   # geht, weil du Owner bist
cd ..

# 15) Skripte-Verzeichnis
mkdir scripts
chmod 750 scripts
mv setup.sh scripts/
ls -l scripts/setup.sh
# → -rwxr-xr-x — die Dateirechte bleiben, das Verzeichnis-Recht beeinflusst
# nur den Zugriff aufs Verzeichnis selbst
Teil E — chown und chgrp (12 min)
📌

Für diese Übungen brauchst du sudo. Wir nutzen nobody (System-User ohne Rechte) und wheel (Admin-Gruppe in Rocky) als Test-Werte, weil die auf praktisch jedem Linux-System existieren — siehe Info-Box in 05.3. Falls sudo für dich nicht funktioniert: einfach lesen und in der Lösung nachvollziehen.

  1. Schau dir den aktuellen Owner und die Gruppe deiner Dateien mit ls -l an.
  2. Übergabe simulieren: Ändere den Owner von team-notiz.txt auf nobody. Tipp: sudo chown ...
  3. Gruppe ändern: Setze die Gruppe von team-notiz.txt auf wheel. Tipp: sudo chgrp ...
  4. Beides in einem Schritt: Setze Owner UND Gruppe von backup.tar.gz auf nobody:wheel. Tipp: sudo chown nobody:wheel ...
bash
# 16) Aktueller Zustand
ls -l team-notiz.txt
# → -rw-rw-r-- 1 admin admin ...

# 17) Owner auf nobody
sudo chown nobody team-notiz.txt
ls -l team-notiz.txt
# → -rw-rw-r-- 1 nobody admin ...

# 18) Gruppe auf wheel
sudo chgrp wheel team-notiz.txt
ls -l team-notiz.txt
# → -rw-rw-r-- 1 nobody wheel ...

# 19) Beides gleichzeitig
sudo chown nobody:wheel backup.tar.gz
ls -l backup.tar.gz
# → -r-------- 1 nobody wheel ...
🌟 Bonus für schnelle Teilnehmer
📌

Im Bonus übst du die rekursive Variante (-R-Option) und entdeckst, was bei unbedacht gesetzten Rechten passiert. Wer hier landet, hat die Pflicht-Aufgaben sauber durch.

  1. Rekursiv aufräumen: Setze mit einem einzigen Befehl alle Verzeichnisse und Dateien in ~/webserver-lab/ auf 755. Schaue dir danach mit ls -l einige Dateien an — was fällt auf? Ist das eigentlich gut?
  2. Selbst-Experiment: Setze 755 auf team-notiz.txt. Was zeigt ls -l? Macht das aus Sicherheits-Sicht Sinn?
  3. Symbolisch in einer Zeile: Setze in EINEM chmod-Befehl folgendes: Owner und Group sollen Schreibrecht haben, Others verlieren alle Rechte. Tipp: chmod kann mehrere Operationen kommagetrennt machen.
bash
# 20) Rekursiv 755
chmod -R 755 ~/webserver-lab/
# Aber: das macht ALLE Dateien ausführbar — auch reine Textdateien!
# Sauberer wäre: Verzeichnisse 755, Dateien 644 — geht aber erst mit
# `find` (kommt in Kap. 06!)

# 21) chmod 755 auf Textdatei
chmod 755 team-notiz.txt
ls -l team-notiz.txt
# → -rwxr-xr-x — die Datei wäre jetzt "ausführbar"
# Macht keinen Sinn, weil sie kein Skript ist.
# Bash würde versuchen, sie zu interpretieren und scheitern.
# Lehre: x-Recht nur setzen, wo es Sinn macht!

# 22) Mehrere Operationen in einer Zeile
chmod ug+w,o= datei.txt
# u=user, g=group bekommen +w
# o=others verlieren alles
🎉
Lab 2.5 geschafft?

Sehr gut! Du hast jetzt das mächtigste Sicherheits-Werkzeug von Linux in der Hand. Faustregel für später: Wenn du irgendwo chmod 777 siehst, bist du fast immer auf einen Bug oder eine schlechte Anleitung gestoßen. Es gibt fast nie einen Grund, 777 zu setzen — meistens reicht 755 oder 644.

5.6

Typische Anfänger-Fehler

Vorsicht
Fehler 1 — chmod 777 als Allheilmittel

„Geht nicht? Setz ich auf 777!" Falsch! Damit machst du die Datei für jeden User auf dem System beschreibbar. Auf Multi-User-Servern oder Web-Servern ein Sicherheitsdesaster.

Fehler 2 — Verzeichnis-x vergessen (jetzt aktiv beim Setzen)

Wenn du chmod 644 mein_ordner/ machst, kannst du danach nicht mehr reingehen (cd braucht x!). Du sperrst dich selber aus deinem Verzeichnis aus.

Fehler 3 — chmod -R 777

Der Klassiker mit dem Maximalschaden. Rekursiv alles auf 777 setzen — du hast danach komplett offene Verzeichnisse UND alle Dateien ausführbar, auch Textdateien.

Fehler 4 — chown ohne sudo

„Permission denied" — und dann chown immer wieder versucht. Owner-Wechsel braucht sudo (außer du wechselst auf eine Gruppe, in der du Mitglied bist).

Fehler 5 — chmod 600 auf Verzeichnis

Du wolltest „privat machen", aber 600 heißt kein x. Bei einem Verzeichnis bedeutet das: du kannst nicht mehr reingehen. Korrekt für privates Verzeichnis: 700, nicht 600.

🎯

Kontrollfragen zum Kapitel

Selbst-Check
  1. Welche drei Befehle ändern Berechtigungen / Eigentümer / Gruppe?
  2. Was bedeuten die symbolischen Buchstaben u, g, o in chmod?
  3. Was ist der Unterschied zwischen chmod u+x, chmod u-x und chmod u=x?
  4. Welche Zahlenwerte haben r, w und x?
  5. Was bedeutet chmod 750? Übersetze in rwx-Notation.
  6. Welche Berechtigung ist die typische Default-Berechtigung für Dateien und welche für Verzeichnisse?
  7. Warum solltest du chmod 777 fast nie verwenden?
  8. Wofür braucht chown meistens sudo?
  9. Du möchtest Eigentümer und Gruppe gleichzeitig ändern. Wie geht das mit chown in einem Befehl?
  10. Welche Berechtigung passt für einen privaten SSH-Key, und warum keine andere?
  1. chmod (Rechte), chown (Eigentümer), chgrp (Gruppe).
  2. u = User (Eigentümer), g = Group, o = Others. a (all) ist die Kurzform für ugo.
  3. +x fügt Ausführrecht hinzu. -x entzieht es. =x setzt genau nur x und entzieht alle anderen Rechte für diese Gruppe.
  4. r = 4, w = 2, x = 1. (Addieren → Wert pro Gruppe.)
  5. 750 = rwxr-x--- → Owner alles, Group lesen + reingehen, Others nichts.
  6. Dateien: 644 (rw-r--r--). Verzeichnisse: 755 (rwxr-xr-x).
  7. Weil jeder auf dem System die Datei dann lesen, ändern und ausführen darf. Auf Multi-User-Systemen oder Servern ein massives Sicherheitsrisiko.
  8. Weil Eigentümer-Wechsel sicherheitsrelevant ist. Ein normaler User darf nicht beliebig Dateien an root oder andere User übergeben.
  9. Mit Doppelpunkt: sudo chown user:group datei.txt.
  10. 600 (rw-------). Nur Owner darf lesen und schreiben. Bei jeder Lockerung (z. B. 644) würde SSH den Key wegen unsicherer Rechte ablehnen.