====== Aufgabe: Multi-User Projekt-Setup ======
Diese Aufgabe simuliert ein reales Multi-User-Szenario mit überlappenden Gruppenmitgliedschaften und Dateiberechtigungen.
[[agenda:agenda-expert_2|← Zurück zur Agenda]]
===== Aufgabenstellung =====
Sie sollen eine Projekt-Umgebung für ein Software-Entwicklungsteam einrichten mit folgenden Anforderungen:
==== Benutzer und Gruppen ====
**Benutzer erstellen:**
- user1 (UID 3001)
- user2 (UID 3002)
- user3 (UID 3003)
**Gruppen erstellen:**
- gruppe1 (Backend-Team)
- gruppe2 (Frontend-Team)
- gruppe3 (DevOps-Team)
**Gruppenzuordnung:**
- user1 → gruppe1, gruppe3
- user2 → gruppe1, gruppe2, gruppe3
- user3 → gruppe2, gruppe3
==== Verzeichnisstruktur unter /srv/ ====
Erstellen Sie folgende Struktur:
/srv/
├── projekt/
│ ├── backend/ (Gruppe: gruppe1, Rechte: 770)
│ ├── frontend/ (Gruppe: gruppe2, Rechte: 770)
│ ├── devops/ (Gruppe: gruppe3, Rechte: 770)
│ └── shared/ (Gruppe: gruppe3, Rechte: 775, Sticky Bit)
==== Anforderungen an die Dateien ====
**In /srv/projekt/backend/:**
- README.md (Besitzer: user1)
- backend-config.json (Besitzer: user2)
**In /srv/projekt/frontend/:**
- index.html (Besitzer: user2)
- styles.css (Besitzer: user3)
**In /srv/projekt/devops/:**
- deploy.sh (Besitzer: user1, ausführbar)
- monitoring.conf (Besitzer: user2)
**In /srv/projekt/shared/:**
- Sticky Bit gesetzt
- Test-Dateien von allen Benutzern
===== Detaillierte Anforderungen =====
**1. Benutzerrechte:**
- user1 kann nur backend/ und devops/ ändern
- user2 kann alle Ordner ändern
- user3 kann nur frontend/ und devops/ ändern
**2. Shared-Verzeichnis:**
- Alle Benutzer können Dateien erstellen
- Nur der Besitzer kann seine eigenen Dateien löschen (Sticky Bit)
**3. Sicherheit:**
- Nur Gruppenmitglieder haben Zugriff
- Andere haben keine Rechte
===== Schritt-für-Schritt Anleitung =====
**Schritt 1: Gruppen erstellen**
sudo groupadd gruppe1
sudo groupadd gruppe2
sudo groupadd gruppe3
**Schritt 2: Benutzer erstellen**
sudo useradd -u 3001 -m -s /bin/bash user1
sudo useradd -u 3002 -m -s /bin/bash user2
sudo useradd -u 3003 -m -s /bin/bash user3
**Schritt 3: Passwörter setzen**
sudo passwd user1
sudo passwd user2
sudo passwd user3
**Schritt 4: Gruppenzuordnungen**
# user1 → gruppe1, gruppe3
sudo usermod -g gruppe1 user1
sudo usermod -aG gruppe3 user1
# user2 → gruppe1, gruppe2, gruppe3
sudo usermod -g gruppe1 user2
sudo usermod -aG gruppe2,gruppe3 user2
# user3 → gruppe2, gruppe3
sudo usermod -g gruppe2 user3
sudo usermod -aG gruppe3 user3
**Schritt 5: Verzeichnisstruktur**
sudo mkdir -p /srv/projekt/{backend,frontend,devops,shared}
**Schritt 6: Rechte setzen**
# backend/ für gruppe1
sudo chown root:gruppe1 /srv/projekt/backend
sudo chmod 770 /srv/projekt/backend
# frontend/ für gruppe2
sudo chown root:gruppe2 /srv/projekt/frontend
sudo chmod 770 /srv/projekt/frontend
# devops/ für gruppe3
sudo chown root:gruppe3 /srv/projekt/devops
sudo chmod 770 /srv/projekt/devops
# shared/ für gruppe3 mit Sticky Bit
sudo chown root:gruppe3 /srv/projekt/shared
sudo chmod 1775 /srv/projekt/shared
**Schritt 7: Dateien erstellen**
# Backend-Dateien
sudo -u user1 touch /srv/projekt/backend/README.md
sudo -u user2 touch /srv/projekt/backend/backend-config.json
# Frontend-Dateien
sudo -u user2 touch /srv/projekt/frontend/index.html
sudo -u user3 touch /srv/projekt/frontend/styles.css
# DevOps-Dateien
sudo -u user1 touch /srv/projekt/devops/deploy.sh
sudo chmod +x /srv/projekt/devops/deploy.sh
sudo -u user2 touch /srv/projekt/devops/monitoring.conf
\\
===== Komplettlösung =====
#!/bin/bash
# Multi-User Projekt Setup
set -e # Bei Fehler abbrechen
echo "=== Multi-User Projekt Setup ==="
# Gruppen erstellen
echo "Erstelle Gruppen..."
sudo groupadd gruppe1
sudo groupadd gruppe2
sudo groupadd gruppe3
# Benutzer erstellen
echo "Erstelle Benutzer..."
sudo useradd -u 3001 -m -s /bin/bash user1
sudo useradd -u 3002 -m -s /bin/bash user2
sudo useradd -u 3003 -m -s /bin/bash user3
# Passwörter setzen (alle: 'password123')
echo "Setze Passwörter..."
echo "user1:password123" | sudo chpasswd
echo "user2:password123" | sudo chpasswd
echo "user3:password123" | sudo chpasswd
# Gruppenzuordnungen
echo "Ordne Benutzer zu Gruppen..."
# user1 → gruppe1 (primär), gruppe3
sudo usermod -g gruppe1 user1
sudo usermod -aG gruppe3 user1
# user2 → gruppe1 (primär), gruppe2, gruppe3
sudo usermod -g gruppe1 user2
sudo usermod -aG gruppe2,gruppe3 user2
# user3 → gruppe2 (primär), gruppe3
sudo usermod -g gruppe2 user3
sudo usermod -aG gruppe3 user3
# Verzeichnisstruktur
echo "Erstelle Verzeichnisstruktur..."
sudo mkdir -p /srv/projekt/{backend,frontend,devops,shared}
# Rechte setzen
echo "Setze Berechtigungen..."
sudo chown root:gruppe1 /srv/projekt/backend
sudo chmod 770 /srv/projekt/backend
sudo chown root:gruppe2 /srv/projekt/frontend
sudo chmod 770 /srv/projekt/frontend
sudo chown root:gruppe3 /srv/projekt/devops
sudo chmod 770 /srv/projekt/devops
sudo chown root:gruppe3 /srv/projekt/shared
sudo chmod 1775 /srv/projekt/shared # Mit Sticky Bit
# Dateien erstellen
echo "Erstelle Projekt-Dateien..."
# Backend
sudo -u user1 bash -c 'cat > /srv/projekt/backend/README.md << EOF
# Backend Project
Entwickelt von user1 und user2
EOF'
sudo -u user2 bash -c 'cat > /srv/projekt/backend/backend-config.json << EOF
{
"database": "postgresql",
"port": 5432
}
EOF'
# Frontend
sudo -u user2 bash -c 'cat > /srv/projekt/frontend/index.html << EOF
Projekt
Frontend Projekt
EOF'
sudo -u user3 bash -c 'cat > /srv/projekt/frontend/styles.css << EOF
body {
font-family: Arial, sans-serif;
margin: 20px;
}
EOF'
# DevOps
sudo -u user1 bash -c 'cat > /srv/projekt/devops/deploy.sh << EOF
#!/bin/bash
echo "Deploying application..."
EOF'
sudo chmod +x /srv/projekt/devops/deploy.sh
sudo -u user2 bash -c 'cat > /srv/projekt/devops/monitoring.conf << EOF
[monitoring]
enabled=true
interval=60
EOF'
echo ""
echo "=== Setup abgeschlossen! ==="
echo ""
echo "Benutzer und Gruppen:"
echo " user1: gruppe1 (primär), gruppe3"
echo " user2: gruppe1 (primär), gruppe2, gruppe3"
echo " user3: gruppe2 (primär), gruppe3"
echo ""
echo "Passwort für alle: password123"
echo ""
echo "Verzeichnisse unter /srv/projekt/:"
ls -la /srv/projekt/
\\
===== Verifikation =====
**Testen Sie das Setup mit folgenden Befehlen:**
# Benutzer-Gruppen prüfen
id user1
id user2
id user3
# Verzeichnisstruktur prüfen
tree /srv/projekt/
ls -la /srv/projekt/
# Zugriffsrechte testen
sudo -u user1 ls -la /srv/projekt/backend/ # Sollte funktionieren
sudo -u user1 ls -la /srv/projekt/frontend/ # Sollte fehlschlagen
sudo -u user2 ls -la /srv/projekt/backend/ # Sollte funktionieren
sudo -u user2 ls -la /srv/projekt/frontend/ # Sollte funktionieren
sudo -u user3 ls -la /srv/projekt/backend/ # Sollte fehlschlagen
sudo -u user3 ls -la /srv/projekt/frontend/ # Sollte funktionieren
# Sticky Bit testen
sudo -u user1 touch /srv/projekt/shared/user1_file.txt
sudo -u user2 touch /srv/projekt/shared/user2_file.txt
sudo -u user2 rm /srv/projekt/shared/user1_file.txt # Sollte fehlschlagen!
===== Erweiterte Aufgaben =====
**1. ACLs hinzufügen:**
- Geben Sie user3 Lesezugriff auf backend/
**2. Quota einrichten:**
- Limitieren Sie user1 auf 100MB in /srv/projekt
**3. Automatisierung:**
- Erstellen Sie ein Skript für Cleanup alter Dateien
- Automatischer Report wer welche Dateien erstellt hat
===== Siehe auch =====
* [[sammlung:Benutzerverwaltung|Benutzerverwaltung]]
* [[sammlung:dateirechte_uebersicht|Dateiberechtigungen]]
* [[sammlung:acl|ACLs]]
* [[uebungen:tag3_benutzer_rechte|Tag 3 Übungen]]
{{tag>aufgabe benutzer gruppen rechte praxis}}