Inhalt dieses Kapitels
chmod — die symbolische Schreibweise
Pflicht
chmod = change mode.
Verändert die Rechte (r, w, x)
für User, Group und/oder
Others.
Grundformel
- 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
| Befehl | Wirkung |
|---|---|
chmod u+x datei.sh | Owner darf jetzt ausführen |
chmod g-w datei.txt | Group darf nicht mehr schreiben |
chmod o=r datei.txt | Others dürfen genau lesen (sonst nichts) |
chmod ug+w datei.txt | Owner und Group dürfen schreiben |
chmod a+r datei.txt | Alle dürfen lesen (entspricht ugo+r) |
chmod u=rwx,g=rx,o= datei.sh | Komplett-Setzung in einem Befehl |
Code-Beispiele
# 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)
+ 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.
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
chmod — die numerische Schreibweise (0–7)
Pflicht
Die „Profi-Variante". Sieht erst kryptisch aus, ist aber kürzer und eindeutiger.
Werte der Rechte
| Recht | Wert |
|---|---|
r (read) | 4 |
w (write) | 2 |
x (execute) | 1 |
- (kein Recht) | 0 |
Kombinationen (alle 8 Möglichkeiten)
| Kombi | Rechnung | Wert | Bedeutung |
|---|---|---|---|
--- | 0+0+0 | 0 | nichts |
--x | 0+0+1 | 1 | nur ausführen |
-w- | 0+2+0 | 2 | nur schreiben (selten sinnvoll) |
-wx | 0+2+1 | 3 | schreiben + ausführen |
r-- | 4+0+0 | 4 | nur lesen |
r-x | 4+0+1 | 5 | lesen + ausführen |
rw- | 4+2+0 | 6 | lesen + schreiben |
rwx | 4+2+1 | 7 | alles |
Die Drei-Zahlen-Notation
Die wichtigsten Standard-Zahlen
| Zahl | Berechtigung | Wofür typisch? |
|---|---|---|
| 644 | rw-r--r-- | Normale Dateien (Standard nach touch) |
| 755 | rwxr-xr-x | Verzeichnisse und Skripte/Programme |
| 600 | rw------- | Privat (z. B. SSH-Keys, Passwort-Dateien) |
| 700 | rwx------ | Privates Verzeichnis (z. B. ~/.ssh/) |
| 660 | rw-rw---- | Team-Datei (Owner + Group, Rest gar nichts) |
| 777 | rwxrwxrwx | JEDER darf alles — fast immer falsch! |
| 400 | r-------- | Read-Only für Owner (Backups, Archive) |
Eine der häufigsten Verwechslungen:
- Dateien brauchen fast nie
x— also644(Standard). - Verzeichnisse brauchen immer
x— sonst kommt niemand rein. Also755(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:
chmod -R 755 /opt/meine-app/
Vorsicht: rekursiv setzt die Rechte überall — auch auf Dateien, die vielleicht andere Rechte brauchen sollten.
Code-Beispiele
# 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?
| Situation | Empfehlung |
|---|---|
| Schnell ein Recht hinzufügen/wegnehmen | Symbolisch (chmod u+x) |
| Komplett-Setzung für viele Dateien | Numerisch (chmod 755) |
| Skript für Automation | Numerisch (eindeutig) |
| Mit Kollegen am Server | beide gleich gut — wer schneller tippt, gewinnt |
chmod numerisch?- Skript-Setup nach Deployment:
chmod 755 *.shundchmod 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.
4755für SUID,2755für SGID,1755für Sticky Bit) — siehe Klappbox aus Kapitel 04!
chown & chgrp — Eigentümer und Gruppe ändern
Pflicht
chown — change owner
# 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
# Gruppe ändern
sudo chgrp wheel datei.txt
# Rekursiv
sudo chgrp -R wheel /opt/projekt/
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.
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:
nobodyist 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).wheelist eine traditionelle Gruppe — Mitglieder dieser Gruppe dürfen meistenssudobenutzen, 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.
whoami und groups aus Kap. 04Falls du wissen willst, welcher User du bist und in welchen Gruppen du Mitglied bist:
whoami # → admin
groups # → admin wheel
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— mitchown -Rkorrigieren - Migration zwischen Systemen: User-IDs
unterscheiden sich,
chownnach 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
chownlieberchgrp+chmod g+w— flexibler
Kurz angerissen: umask und Default-Berechtigungen
Bonus
🔵 Vertiefung für Neugierige: umask & Default-Berechtigungen (optional)
- Wenn du eine neue Datei mit
touchanlegst, bekommt sie automatisch Berechtigungen — meistens644für Dateien und755für Verzeichnisse. - Warum genau diese? Das steuert die
umask(user mask) — eine Art „Berechtigungs-Maske", die Rechte wegnimmt.
# 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.
📧 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:
- Eine öffentliche Webserver-Struktur mit
htdocs/,configs/,logs/— jeweils mit den richtigen Berechtigungen für Webserver und Admins. - Eine private Konfigurationsdatei für DB-Zugangsdaten, die nur du lesen darfst.
- Skript-Dateien, die ausführbar sein müssen — aber nur für die Admin-Gruppe.
- 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
- Erstelle
~/webserver-lab/und darin die Unterordnerhtdocs/,configs/,logs/in einem Befehl (Brace Expansion!). - Erstelle in jedem dieser Ordner eine Test-Datei:
htdocs/index.html,configs/db.conf,logs/access.log(mittouch). - Schau dir mit
ls -laan, welche Default-Berechtigungen Linux gesetzt hat.
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)
index.htmlsoll für alle lesbar sein (Webserver muss dran). → Setze mit symbolischer Notation: alle dürfen lesen, nur Owner darf schreiben.db.confist 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.access.logsoll für die Gruppe lesbar sein, aber Others sehen nichts. → Setze symbolisch.- Schau dir nach jedem Schritt mit
ls -lan, ob es passt.
# 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-----
- Erstelle drei neue Dateien:
setup.sh,team-notiz.txt,backup.tar.gz. setup.shsoll für alle ausführbar sein (755). → Setze numerisch.team-notiz.txtsoll für Owner und Group beschreibbar sein, Others nur lesen (664). → Setze numerisch.backup.tar.gzsoll nur vom Owner lesbar sein, sonst niemand (400). → Setze numerisch.- Prüfe alle drei mit
ls -l.
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--------
- Setze für alle drei Verzeichnisse
(
htdocs/,configs/,logs/) numerische Berechtigungen:htdocs→755,configs→750,logs→750. - Versuche, als normaler User in
configs/zu wechseln. Geht das? - Erstelle ein Skripte-Verzeichnis
scripts/mitchmod 750und legsetup.shaus Teil C dort rein. Hat es jetzt noch die alten Rechte?
# 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
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.
- Schau dir den aktuellen Owner und die Gruppe deiner Dateien mit
ls -lan. - Übergabe simulieren: Ändere den Owner von
team-notiz.txtaufnobody. Tipp:sudo chown ... - Gruppe ändern: Setze die Gruppe von
team-notiz.txtaufwheel. Tipp:sudo chgrp ... - Beides in einem Schritt: Setze Owner UND Gruppe
von
backup.tar.gzaufnobody:wheel. Tipp:sudo chown nobody:wheel ...
# 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 ...
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.
- Rekursiv aufräumen: Setze mit einem einzigen
Befehl alle Verzeichnisse und Dateien in
~/webserver-lab/auf755. Schaue dir danach mitls -leinige Dateien an — was fällt auf? Ist das eigentlich gut? - Selbst-Experiment: Setze
755aufteam-notiz.txt. Was zeigtls -l? Macht das aus Sicherheits-Sicht Sinn? - Symbolisch in einer Zeile: Setze in EINEM
chmod-Befehl folgendes: Owner und Group sollen Schreibrecht haben, Others verlieren alle Rechte. Tipp:chmodkann mehrere Operationen kommagetrennt machen.
# 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
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.
Typische Anfänger-Fehler
Vorsichtchmod 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.
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.
chmod -R 777Der Klassiker mit dem Maximalschaden. Rekursiv alles auf 777 setzen — du hast danach komplett offene Verzeichnisse UND alle Dateien ausführbar, auch Textdateien.
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).
chmod 600 auf VerzeichnisDu 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- Welche drei Befehle ändern Berechtigungen / Eigentümer / Gruppe?
- Was bedeuten die symbolischen Buchstaben
u,g,oinchmod? - Was ist der Unterschied zwischen
chmod u+x,chmod u-xundchmod u=x? - Welche Zahlenwerte haben
r,wundx? - Was bedeutet
chmod 750? Übersetze inrwx-Notation. - Welche Berechtigung ist die typische Default-Berechtigung für Dateien und welche für Verzeichnisse?
- Warum solltest du
chmod 777fast nie verwenden? - Wofür braucht
chownmeistenssudo? - Du möchtest Eigentümer und Gruppe gleichzeitig
ändern. Wie geht das mit
chownin einem Befehl? - Welche Berechtigung passt für einen privaten SSH-Key, und warum keine andere?
chmod(Rechte),chown(Eigentümer),chgrp(Gruppe).u= User (Eigentümer),g= Group,o= Others.a(all) ist die Kurzform fürugo.+xfügt Ausführrecht hinzu.-xentzieht es.=xsetzt genau nurxund entzieht alle anderen Rechte für diese Gruppe.r= 4,w= 2,x= 1. (Addieren → Wert pro Gruppe.)750=rwxr-x---→ Owner alles, Group lesen + reingehen, Others nichts.- Dateien:
644(rw-r--r--). Verzeichnisse:755(rwxr-xr-x). - Weil jeder auf dem System die Datei dann lesen, ändern und ausführen darf. Auf Multi-User-Systemen oder Servern ein massives Sicherheitsrisiko.
- Weil Eigentümer-Wechsel sicherheitsrelevant ist. Ein normaler User darf nicht beliebig Dateien an root oder andere User übergeben.
- Mit Doppelpunkt:
sudo chown user:group datei.txt. 600(rw-------). Nur Owner darf lesen und schreiben. Bei jeder Lockerung (z. B.644) würde SSH den Key wegen unsicherer Rechte ablehnen.