đ§ Crumbpage 01: Linux User, Gruppen & Rechte
Subtitle: Wer bin ich, was darf ich - die IdentitÀt im Wald
Pfad: 1 von 8
Schwierigkeit: ââ (Einsteiger-freundlich)
Zeit: ~2-3 Stunden
Voraussetzungen: Keine - das ist der Start!
"Jeder Wanderer braucht einen Namen, jeder Name braucht Rechte, und jede Datei einen BeschĂŒtzer." đČ
đ Was du in diesem Pfad lernst
â User-IdentitĂ€t im Linux-System
â Home-Verzeichnis und wichtige Pfade
â Gruppen und ihre Bedeutung
â Das Rechte-System (rwx)
â Berechtigungen Ă€ndern (chmod, chown, chgrp)
â Sichere Praktiken fĂŒr User-Management
đŻ Lernziele
Nach diesem Pfad kannst du:
- [ ] Deine User-ID und Gruppen identifizieren
- [ ] Dateiberechtigungen lesen und verstehen
- [ ] Berechtigungen sicher Àndern
- [ ] Den Unterschied zwischen Owner, Group und Others erklÀren
- [ ] HĂ€ufige Permission-Fehler selbst beheben
đ± Grundkonzepte
Konzept 1: Du im System - IdentitÀt
Was ist das?
Jeder Prozess und jede Aktion in Linux hat eine IdentitÀt:
- Einen User (UID = User ID)
- Eine oder mehrere Gruppen (GID = Group ID)
- Einen Home-Ordner (dein persönlicher Platz)
Warum ist das wichtig?
# Ohne IdentitÀts-System:
Jeder könnte alles lesen, Ă€ndern, löschen â Chaos! đ„
# Mit IdentitÀts-System:
Jeder hat seinen Bereich, klare Grenzen â Ordnung! â
Wie funktioniert es?
# Wer bin ich?
$ whoami
keksmann
# Detaillierte Info
$ id
uid=1000(keksmann) gid=1000(keksmann) groups=1000(keksmann),27(sudo),100(users)
# Was bedeutet das?
uid=1000 â Deine eindeutige User-ID
gid=1000 â Deine primĂ€re Gruppe
groups=... â Alle Gruppen, in denen du Mitglied bist
Konzept 2: Das Home-Verzeichnis
Was ist das?
Dein Home ist dein persönlicher Ordner im System:
# Wo ist mein Home?
$ echo $HOME
/home/keksmann
# Alternative
$ pwd # wenn du gerade dort bist
/home/keksmann
# Schnell nach Hause
$ cd # ohne Argument â direkt nach $HOME
$ cd ~ # ~ ist AbkĂŒrzung fĂŒr $HOME
Struktur eines typischen Home:
/home/keksmann/
âââ .bashrc # Shell-Konfiguration
âââ .ssh/ # SSH-Keys (wichtig!)
â âââ id_rsa # Private Key (GEHEIM!)
â âââ id_rsa.pub # Public Key (teilbar)
â âââ authorized_keys
âââ .config/ # App-Konfigurationen
âââ Documents/ # Deine Dokumente
âââ Downloads/ # Downloads
âââ projects/ # Deine Projekte
â ïž Wichtig:
# Dateien die mit . beginnen sind "hidden"
$ ls # Zeigt NICHT .bashrc, .ssh, etc.
$ ls -a # Zeigt ALLES (a = all)
$ ls -la # Zeigt ALLES mit Details
Konzept 3: Gruppen - Gemeinsam stark
Was ist das?
Gruppen erlauben es, mehreren Usern gemeinsam Zugriff zu geben:
# Meine Gruppen anzeigen
$ groups
keksmann sudo docker www-data
# Was bedeutet das?
keksmann â Meine persönliche Gruppe
sudo â Darf sudo verwenden (Admin-Rechte)
docker â Darf Docker nutzen
www-data â Kann Webserver-Dateien lesen
Warum ist das wichtig?
# Scenario: Webseite bearbeiten
# Ohne Gruppe:
- Nur root darf Webseite Ă€ndern â Unsicher!
# Mit Gruppe:
- User ist in Gruppe 'www-data'
- Webseiten-Ordner gehört www-data
- Mehrere User können sicher zusammenarbeiten â
Konzept 4: Das rwx-System
Was ist das?
Jede Datei/Ordner hat 3 Berechtigungs-Ebenen:
r = read (lesen)
w = write (schreiben)
x = execute (ausfĂŒhren)
FĂŒr 3 Kategorien von Usern:
u = user (Owner/Besitzer)
g = group (Gruppe)
o = others (Alle anderen)
Wie liest man das?
$ ls -l myscript.sh
-rwxr-xr-- 1 keksmann developer 1024 Dec 06 15:30 myscript.sh
âââââââââ
ââââââââââ others: r-- (nur lesen)
ââââââââââ group: r-x (lesen, ausfĂŒhren)
ââââââââââ user: rwx (alles)
âââââââââââ Anzahl Links
âââââââââââ Owner: keksmann
âââââââââââ File Type (- = regular file)
Visualisierung:
-rwxr-xr--
â â â
â â ââââ Others: r-- (read only)
â âââââââ Group: r-x (read, execute)
ââââââââââ User: rwx (read, write, execute)
Bei Ordnern:
drwxr-xr-x 2 keksmann developer 4096 Dec 06 15:30 mydir/
â
ââ d = directory
Ordner-Rechte:
r = Darf Inhalte listen (ls)
w = Darf Dateien erstellen/löschen
x = Darf in Ordner wechseln (cd)
đ§ Praktische Befehle
Befehl 1: whoami - Wer bin ich?
# Zeigt aktuellen Username
$ whoami
keksmann
Anwendungsfall:
# In Skripten prĂŒfen ob root
if [ "$(whoami)" != "root" ]; then
echo "Bitte als root ausfĂŒhren!"
exit 1
fi
Befehl 2: id - Detaillierte IdentitÀt
# VollstÀndige User-Info
$ id
uid=1000(keksmann) gid=1000(keksmann) groups=1000(keksmann),27(sudo),999(docker)
# Nur UID anzeigen
$ id -u
1000
# Nur GID anzeigen
$ id -g
1000
# Info ĂŒber anderen User
$ id root
uid=0(root) gid=0(root) groups=0(root)
Befehl 3: groups - Meine Gruppen
# Eigene Gruppen
$ groups
keksmann sudo docker
# Gruppen eines anderen Users
$ groups www-data
www-data : www-data
Befehl 4: ls -la - Dateien mit Rechten
# Detaillierte Datei-Auflistung
$ ls -la
total 48
drwxr-xr-x 5 keksmann keksmann 4096 Dec 6 15:30 .
drwxr-xr-x 20 root root 4096 Dec 1 10:00 ..
-rw------- 1 keksmann keksmann 220 Dec 1 09:00 .bash_history
-rw-r--r-- 1 keksmann keksmann 807 Dec 1 09:00 .bashrc
drwx------ 2 keksmann keksmann 4096 Dec 2 12:00 .ssh
-rwxr-xr-x 1 keksmann keksmann 512 Dec 6 15:30 myscript.sh
-rw-r--r-- 1 keksmann keksmann 1024 Dec 5 14:20 notes.txt
# Nur Dateien mit bestimmtem Muster
$ ls -l *.txt
-rw-r--r-- 1 keksmann keksmann 1024 Dec 5 14:20 notes.txt
# Nur Verzeichnisse
$ ls -ld */
drwx------ 2 keksmann keksmann 4096 Dec 2 12:00 .ssh/
Befehl 5: chmod - Rechte Àndern
Syntax:
chmod [WHO][OPERATOR][PERMISSIONS] file
WHO:
u = user (owner)
g = group
o = others
a = all (u+g+o)
OPERATOR:
+ = hinzufĂŒgen
- = entfernen
= = exakt setzen
PERMISSIONS:
r = read
w = write
x = execute
Beispiele (Symbolisch):
# User: executable hinzufĂŒgen
$ chmod u+x script.sh
# Group: write entfernen
$ chmod g-w document.txt
# Others: alle Rechte entfernen
$ chmod o-rwx secret.txt
# Allen: read geben
$ chmod a+r public.txt
# Exakt setzen: User=rwx, Group=rx, Others=r
$ chmod u=rwx,g=rx,o=r file.txt
Beispiele (Numerisch):
# Jede Permission ist eine Zahl:
r = 4
w = 2
x = 1
# Kombinationen addieren:
rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
--- = 0+0+0 = 0
# Beispiele:
chmod 755 script.sh
âââ
ââââ Others: r-x (5)
ââââ Group: r-x (5)
ââââ User: rwx (7)
chmod 644 document.txt
âââ
ââââ Others: r-- (4)
ââââ Group: r-- (4)
ââââ User: rw- (6)
chmod 600 secret.txt
âââ
ââââ Others: --- (0)
ââââ Group: --- (0)
ââââ User: rw- (6)
chmod 700 private_folder/
âââ
ââââ Others: --- (0)
ââââ Group: --- (0)
ââââ User: rwx (7)
Rekursiv (fĂŒr Ordner):
# Alle Dateien in Ordner Àndern
$ chmod -R 755 my_folder/
# â ïž VORSICHT: Ăndert ALLE Dateien rekursiv!
Befehl 6: chown - Owner Àndern
Syntax:
chown [OWNER][:GROUP] file
# Beispiele:
chown keksmann file.txt # Nur Owner Àndern
chown keksmann:developer file.txt # Owner und Group
chown :developer file.txt # Nur Group Àndern
Praktische Beispiele:
# Website-Ordner an Webserver ĂŒbergeben
$ sudo chown -R www-data:www-data /var/www/html/
# Datei ĂŒbernehmen
$ sudo chown keksmann:keksmann downloaded_file.txt
# Nur Group Àndern (siehe nÀchster Befehl)
$ sudo chown :developer project_folder/
â ïž Wichtig:
# chown braucht meist sudo (wenn du nicht Owner bist)
$ chown keksmann file.txt # â Permission denied
$ sudo chown keksmann file.txt # â
Funktioniert
Befehl 7: chgrp - Nur Group Àndern
# Group Àndern
$ chgrp developer file.txt
# Rekursiv
$ chgrp -R www-data /var/www/project/
# Ist gleichbedeutend mit:
$ chown :www-data /var/www/project/
đĄ Best Practices
DO â
# 1. Skripte executable machen
$ chmod +x myscript.sh
$ ./myscript.sh # Kann jetzt direkt ausgefĂŒhrt werden
# 2. Secrets schĂŒtzen
$ chmod 600 ~/.ssh/id_rsa # Nur Owner kann lesen
$ chmod 700 ~/.ssh/ # Nur Owner kann zugreifen
# 3. Shared Folders
$ sudo chgrp developers /opt/shared
$ sudo chmod 770 /opt/shared # Group kann voll zugreifen
# 4. Web-Content
$ sudo chown -R www-data:www-data /var/www/html/
$ sudo chmod 755 /var/www/html/ # Ordner: alle können lesen
$ sudo chmod 644 /var/www/html/*.html # Dateien: nur Owner schreibt
DON'T â
# 1. NIEMALS alles auf 777 setzen
$ chmod -R 777 / # đ EXTREM GEFĂHRLICH!
# Warum? 777 bedeutet:
# - Jeder kann alles lesen, schreiben, ausfĂŒhren
# - Zero Security
# - Perfekt fĂŒr Hacker
# 2. Nicht als root arbeiten wenn nicht nötig
$ sudo chmod 777 important_file # â Overkill
$ chmod 755 important_file # â
Ausreichend
# 3. Keine Secrets mit group/other-Rechten
$ chmod 644 api_key.txt # â Group + Others können lesen
$ chmod 600 api_key.txt # â
Nur Owner kann lesen
# 4. Nicht blind rekursiv
$ chmod -R 777 folder/ # â Alles unsicher
# Besser: Gezielt einzelne Dateien/Ordner
đ Hands-On Ăbungen
Ăbung 1: Lerne dich selbst kennen
Aufgabe:
Finde heraus wer du bist, wo dein Home ist, und in welchen Gruppen du Mitglied bist.
Schritte:
# Schritt 1: Username
$ whoami
# Schritt 2: Detaillierte Info
$ id
# Schritt 3: Gruppen
$ groups
# Schritt 4: Home-Verzeichnis
$ echo $HOME
$ cd ~
$ pwd
# Schritt 5: Hidden Files im Home
$ ls -la ~
Erwartetes Ergebnis:
$ whoami
keksmann
$ id
uid=1000(keksmann) gid=1000(keksmann) groups=1000(keksmann),27(sudo)
$ groups
keksmann sudo
$ echo $HOME
/home/keksmann
Ăbung 2: Test-Dateien erstellen und Rechte verstehen
Aufgabe:
Erstelle Test-Dateien und lerne Rechte zu lesen.
Schritte:
# Schritt 1: Test-Ordner erstellen
$ mkdir ~/rechte-test
$ cd ~/rechte-test
# Schritt 2: Verschiedene Dateien erstellen
$ touch public.txt
$ touch private.txt
$ touch script.sh
# Schritt 3: Rechte anschauen
$ ls -l
# Schritt 4: Rechte setzen
$ chmod 644 public.txt # Alle können lesen
$ chmod 600 private.txt # Nur ich kann lesen
$ chmod 755 script.sh # Alle können lesen/ausfĂŒhren
# Schritt 5: Ergebnis prĂŒfen
$ ls -l
Erwartetes Ergebnis:
$ ls -l
-rw-r--r-- 1 keksmann keksmann 0 Dec 6 15:30 public.txt
-rw------- 1 keksmann keksmann 0 Dec 6 15:30 private.txt
-rwxr-xr-x 1 keksmann keksmann 0 Dec 6 15:30 script.sh
Ăbung 3: Symbolische vs. Numerische chmod
Aufgabe:
Setze die gleichen Rechte einmal symbolisch, einmal numerisch.
Schritte:
# Datei erstellen
$ touch test1.txt
$ touch test2.txt
# Symbolisch: User=rw, Group=r, Others=r
$ chmod u=rw,g=r,o=r test1.txt
# Numerisch: 644 (rw-r--r--)
$ chmod 644 test2.txt
# Vergleichen
$ ls -l test*.txt
Erwartetes Ergebnis:
-rw-r--r-- 1 keksmann keksmann 0 Dec 6 15:30 test1.txt
-rw-r--r-- 1 keksmann keksmann 0 Dec 6 15:30 test2.txt
# Beide identisch!
Lösungsweg:
Klick hier fĂŒr detaillierte ErklĂ€rung
# 644 ausrechnen:
User: rw- = 4+2+0 = 6
Group: r-- = 4+0+0 = 4
Others: r-- = 4+0+0 = 4
Ergebnis: 644
# Symbolisch:
u=rw â User kann read+write
g=r â Group kann nur read
o=r â Others kann nur read
Ăbung 4: Secure Secrets
Aufgabe:
Simuliere das Absichern eines API-Keys.
Schritte:
# Schritt 1: "API Key" Datei erstellen
$ echo "super-secret-api-key-123" > ~/api_key.txt
# Schritt 2: Standard-Rechte anschauen (meist 644)
$ ls -l ~/api_key.txt
# Schritt 3: Rechte lockern (FALSCH!)
$ chmod 644 ~/api_key.txt
$ cat ~/api_key.txt # Jeder in Group kann lesen!
# Schritt 4: Richtig absichern
$ chmod 600 ~/api_key.txt
$ ls -l ~/api_key.txt
# Schritt 5: Testen (als anderer User wĂŒrde cat fehlschlagen)
Erwartetes Ergebnis:
$ ls -l ~/api_key.txt
-rw------- 1 keksmann keksmann 25 Dec 6 15:30 /home/keksmann/api_key.txt
ââ Nur Owner kann lesen/schreiben!
đ HĂ€ufige Fehler & Lösungen
Fehler 1: "Permission denied" beim AusfĂŒhren
Symptom:
$ ./myscript.sh
bash: ./myscript.sh: Permission denied
Ursache:
Datei hat kein x (execute) Flag.
Diagnose:
$ ls -l myscript.sh
-rw-r--r-- 1 keksmann keksmann 512 Dec 6 15:30 myscript.sh
ââ Kein 'x' vorhanden!
Lösung:
# Execute-Recht hinzufĂŒgen
$ chmod +x myscript.sh
# Oder numerisch
$ chmod 755 myscript.sh
# Jetzt funktioniert es
$ ./myscript.sh
Hello World!
Fehler 2: "Permission denied" beim Lesen
Symptom:
$ cat secret.txt
cat: secret.txt: Permission denied
Ursache:
Du bist nicht Owner, oder Datei hat kein r Flag fĂŒr deine Kategorie.
Diagnose:
$ ls -l secret.txt
-rw------- 1 root root 100 Dec 6 15:30 secret.txt
âââââââââ
âââ User (root): rw-
âââ Group (root): ---
Others: ---
# Du bist nicht root â Kein Zugriff!
Lösung (wenn du zugriffsberechtigt sein solltest):
# Option 1: Owner auf dich Àndern (braucht sudo)
$ sudo chown keksmann:keksmann secret.txt
# Option 2: Datei in 'developers' Gruppe und du bist Mitglied
$ sudo chgrp developers secret.txt
$ sudo chmod 640 secret.txt # Group kann lesen
Fehler 3: "Operation not permitted" bei chown
Symptom:
$ chown keksmann file.txt
chown: changing ownership of 'file.txt': Operation not permitted
Ursache:
Nur root oder der aktuelle Owner darf Owner Àndern.
Lösung:
# Mit sudo
$ sudo chown keksmann file.txt
Fehler 4: SSH Key wird nicht akzeptiert
Symptom:
$ ssh server
Permission denied (publickey).
Ursache oft:
SSH-Keys haben falsche Rechte (zu offen).
Diagnose:
$ ls -la ~/.ssh/
-rw-rw-rw- 1 keksmann keksmann 1679 Dec 1 10:00 id_rsa # â ZU OFFEN!
Lösung:
# Private Keys mĂŒssen 600 sein
$ chmod 600 ~/.ssh/id_rsa
$ chmod 644 ~/.ssh/id_rsa.pub
$ chmod 700 ~/.ssh/
# Jetzt sollte SSH funktionieren
$ ssh server
Fehler 5: "Cannot create directory: Permission denied"
Symptom:
$ mkdir /opt/myapp
mkdir: cannot create directory '/opt/myapp': Permission denied
Ursache:
Du hast keine Write-Rechte im Parent-Verzeichnis.
Diagnose:
$ ls -ld /opt
drwxr-xr-x 5 root root 4096 Dec 1 10:00 /opt
âââ
âââ Others: r-x (kein 'w'!)
ââââ Group: r-x
ââââ User (root): rwx
Lösung:
# Option 1: Mit sudo
$ sudo mkdir /opt/myapp
# Option 2: Owner/Group Àndern (einmalig)
$ sudo chown keksmann:developers /opt
$ mkdir /opt/myapp # Jetzt funktioniert es
# Option 3: Im eigenen Home arbeiten
$ mkdir ~/myapp
đ Troubleshooting Checkliste
Wenn du Permissions-Probleme hast:
# 1. Bin ich der richtige User?
$ whoami
$ id
# 2. Was sind die aktuellen Rechte?
$ ls -la /path/to/file
# 3. Wer ist Owner?
$ ls -l /path/to/file
-rw-r--r-- 1 OWNER GROUP ...
â â
# 4. Bin ich in der Group?
$ groups | grep GROUP_NAME
# 5. Was brauche ich? (read/write/execute)
$ # Lesen? â Need 'r'
$ # Schreiben? â Need 'w'
$ # AusfĂŒhren/CD? â Need 'x'
# 6. Kann ich die Rechte Àndern?
$ chmod ... file # Als Owner
$ sudo chmod ... file # Mit Admin-Rechten
# 7. Muss ich Owner Àndern?
$ sudo chown USER:GROUP file
đŻ Skill-Check
Bevor du zum nÀchsten Pfad gehst:
Grundlagen:
- [ ] Ich kann whoami und id benutzen
- [ ] Ich verstehe was UID/GID bedeutet
- [ ] Ich weiĂ wo mein $HOME ist
- [ ] Ich kann hidden files anzeigen (ls -la)
Rechte lesen:
- [ ] Ich kann -rwxr-xr-- interpretieren
- [ ] Ich verstehe den Unterschied zwischen File und Directory Rechten
- [ ] Ich erkenne Owner, Group und Others in ls -l output
Rechte setzen:
- [ ] Ich kann chmod symbolisch nutzen (u+x, g-w, etc.)
- [ ] Ich kann chmod numerisch nutzen (755, 644, etc.)
- [ ] Ich verstehe wann ich chown vs. chgrp nutze
Security:
- [ ] Ich weià warum 777 gefÀhrlich ist
- [ ] Ich kann Secrets richtig absichern (600)
- [ ] Ich nutze sudo nur wenn nötig
Troubleshooting:
- [ ] Ich kann "Permission denied" Fehler debuggen
- [ ] Ich weiĂ wie ich die Checkliste anwende
Wenn 12/12 â
: Du bist ready fĂŒr Pfad 2!
Wenn <12 â
: Wiederhole die Ăbungen
đ WeiterfĂŒhrende Links
Intern (Crumbforest)
Extern
đ Deine Notizen
Was war neu fĂŒr mich?
[Platz fĂŒr deine Notizen]
Was war schwierig?
[Platz fĂŒr deine Notizen]
Eigene chmod-Beispiele die ich brauche:
# Beispiel:
chmod 755 /path/to/my/script.sh # Mein Use-Case: ...
đŠ Crystal Owl's Weisheit
đŠ
/đ\
/_||_\
/ || \
"Rechte sind wie SchlĂŒssel zu TĂŒren.
Gib nicht jedem jeden SchlĂŒssel.
Ein 600er Schloss schĂŒtzt Geheimnisse.
Ein 755er Schloss teilt Wissen sicher.
Ein 777er Schloss? Das ist keine TĂŒr mehr,
das ist ein Tor zur Katastrophe."
KrĂŒmel-Tipp:
# Erstelle dir ein chmod-cheatsheet
$ cat > ~/chmod-cheatsheet.txt << 'EOF'
### Mein chmod Cheatsheet ###
Skripte executable: chmod +x script.sh
Secrets verstecken: chmod 600 api_key.txt
SSH Keys: chmod 600 ~/.ssh/id_rsa
Web-Content (Ordner): chmod 755 /var/www/html/
Web-Content (Dateien): chmod 644 /var/www/html/*.html
Shared Dev Folder: chmod 770 /opt/shared/
Nie verwenden: chmod 777 (alles offen!)
EOF
$ chmod 600 ~/chmod-cheatsheet.txt # Selbst auch schĂŒtzen!
đź Bonus: Advanced Topics
Klick fĂŒr fortgeschrittene Themen
### SetUID und SetGID Bits# SetUID (Set User ID):
# Datei wird mit Owner-Rechten ausgefĂŒhrt, egal wer sie startet
$ chmod u+s /usr/bin/passwd
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root ...
â 's' statt 'x'
# Numerisch: 4755 (4 = SetUID Bit)
$ chmod 4755 binary
# SetGID (Set Group ID):
# FĂŒr Ordner: Neue Dateien erben die Group des Ordners
$ chmod g+s /shared/project/
$ chmod 2775 /shared/project/ # 2 = SetGID Bit
### Sticky Bit
# Auf Ordnern: Nur Owner kann eigene Dateien löschen
# Perfekt fĂŒr /tmp und shared folders
$ chmod +t /shared/public/
$ chmod 1777 /shared/public/ # 1 = Sticky Bit
$ ls -ld /tmp
drwxrwxrwt ...
â 't' = Sticky Bit
### ACLs (Access Control Lists)
# Feinere Kontrolle als rwx
$ setfacl -m u:keksmann:rwx file.txt # Specific user
$ setfacl -m g:developers:r-x file.txt # Specific group
$ getfacl file.txt # ACLs anzeigen
### Immutable Files
# Datei kann nicht geÀndert/gelöscht werden (auch nicht von root!)
$ sudo chattr +i important.conf
$ sudo chattr -i important.conf # Wieder Ànderbar machen
$ lsattr important.conf # Attribute anzeigen
Version: 1.0
Letzte Ănderung: 2024-12-06
Maintainer: Crumbforest Core Team
Feedback: GitHub Issues | Discord
Navigation:
â ZurĂŒck: Vektor-Ăbersicht | Weiter: Pfad 2: Hostinformation â
đČ GlĂŒckwunsch! Du hast den ersten Pfad gemeistert. Der Wald liegt vor dir. đŠđ