Inhaltsverzeichnis

Aufgabe: Multi-User Projekt-Setup

Diese Aufgabe simuliert ein reales Multi-User-Szenario mit überlappenden Gruppenmitgliedschaften und Dateiberechtigungen.

← Zurück zur Agenda

Aufgabenstellung

Sie sollen eine Projekt-Umgebung für ein Software-Entwicklungsteam einrichten mit folgenden Anforderungen:

Benutzer und Gruppen

Benutzer erstellen:

  1. user1 (UID 3001)
  2. user2 (UID 3002)
  3. user3 (UID 3003)

Gruppen erstellen:

  1. gruppe1 (Backend-Team)
  2. gruppe2 (Frontend-Team)
  3. gruppe3 (DevOps-Team)

Gruppenzuordnung:

  1. user1 → gruppe1, gruppe3
  2. user2 → gruppe1, gruppe2, gruppe3
  3. 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/:

  1. README.md (Besitzer: user1)
  2. backend-config.json (Besitzer: user2)

In /srv/projekt/frontend/:

  1. index.html (Besitzer: user2)
  2. styles.css (Besitzer: user3)

In /srv/projekt/devops/:

  1. deploy.sh (Besitzer: user1, ausführbar)
  2. monitoring.conf (Besitzer: user2)

In /srv/projekt/shared/:

  1. Sticky Bit gesetzt
  2. Test-Dateien von allen Benutzern

Detaillierte Anforderungen

1. Benutzerrechte:

  1. user1 kann nur backend/ und devops/ ändern
  2. user2 kann alle Ordner ändern
  3. user3 kann nur frontend/ und devops/ ändern

2. Shared-Verzeichnis:

  1. Alle Benutzer können Dateien erstellen
  2. Nur der Besitzer kann seine eigenen Dateien löschen (Sticky Bit)

3. Sicherheit:

  1. Nur Gruppenmitglieder haben Zugriff
  2. Andere haben keine Rechte

Schritt-für-Schritt Anleitung

Hilfestellung

Hilfestellung

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

Komplettes Setup-Skript

Komplettes Setup-Skript

#!/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
<!DOCTYPE html>
<html>
<head><title>Projekt</title></head>
<body><h1>Frontend Projekt</h1></body>
</html>
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:

  1. Geben Sie user3 Lesezugriff auf backend/

2. Quota einrichten:

  1. Limitieren Sie user1 auf 100MB in /srv/projekt

3. Automatisierung:

  1. Erstellen Sie ein Skript für Cleanup alter Dateien
  2. Automatischer Report wer welche Dateien erstellt hat

Siehe auch