Table of Contents
- setup-user.sh
- Getestet unter
- Zweck des Scripts
- Wie das Script funktioniert
- Betriebssystem-Philosophien verstehen
- Sicherheits-Konfiguration
- Script praktisch nutzen
- Installation validieren
- Troubleshooting
- "User already exists"
- "Permission denied"
- Script bricht ab bei bestehenden Benutzern
- Falsche Benutzerkonvention
- Script erweitern
setup-user.sh
System-Benutzer für furt automatisch erstellen
Getestet unter
- OpenBSD 7.7
- Debian 12
- Arch Linux
Zweck des Scripts
Das setup-user.sh Script erstellt den System-Benutzer für furt mit korrekten betriebssystem-spezifischen Konventionen. OpenBSD verwendet _furt, Linux nutzt furt mit --system Flag.
Das Script eliminiert die Notwendigkeit sich verschiedene useradd-Syntaxen für verschiedene Systeme zu merken und macht furt-Installationen zwischen Betriebssystemen konsistent.
Wie das Script funktioniert
Das Script ist bewusst minimalistisch gehalten - nur 20 Zeilen Code für eine klar umrissene Aufgabe. Es nutzt uname um das Betriebssystem zu erkennen und wählt dann den passenden Code-Pfad:
if [ "$(uname)" = "OpenBSD" ]; then
# BSD-Pfad: _furt Benutzer
groupadd _furt 2>/dev/null || true
useradd -g _furt -s /bin/false -d /var/empty _furt 2>/dev/null || true
else
# Linux-Pfad: furt mit --system Flag
groupadd --system furt 2>/dev/null || true
useradd --system -g furt -s /bin/false -d /var/empty furt 2>/dev/null || true
fi
Das 2>/dev/null || true Pattern macht das Script idempotent - es bricht nicht ab wenn Benutzer oder Gruppe bereits existieren. Diese Eigenschaft ist wichtig weil das Script sowohl bei Fresh Installations als auch bei Upgrades sicher ausgeführt werden kann.
Betriebssystem-Philosophien verstehen
Die unterschiedlichen Benutzerkonventionen spiegeln verschiedene System-Philosophien wider:
BSD-Ansatz (OpenBSD)
BSD-Systeme verwenden den Underscore-Präfix _servicename für System-Services um eine klare Trennung zwischen normalen Benutzern und Service-Accounts zu schaffen. Diese Konvention macht Service-Accounts in Prozesslisten und Log-Dateien sofort erkennbar.
# OpenBSD
groupadd _furt
useradd -g _furt -s /bin/false -d /var/empty _furt
Die UID wird automatisch aus dem System-Bereich gewählt. BSD-Systeme haben eine lange Tradition stabiler Benutzerkonventionen die über Jahrzehnte unverändert bleiben.
Linux-Ansatz (Debian, Arch, etc.)
Linux-Distributionen nutzen meist den Service-Namen direkt als Benutzer, unterscheiden aber über das --system Flag zwischen normalen und System-Benutzern. Das Flag sorgt für niedrige UIDs (typisch unter 1000) und verhindert die Anzeige in Login-Managern.
# Linux-Distributionen
groupadd --system furt
useradd --system -g furt -s /bin/false -d /var/empty furt
Diese Flexibilität ermöglicht es verschiedenen Software-Paketen ihre eigenen Konventionen zu etablieren während das System trotzdem zwischen verschiedenen Account-Typen unterscheiden kann.
Sicherheits-Konfiguration
Beide Code-Pfäde implementieren die gleichen Sicherheitsprinzipien für Service-Accounts:
Shell-Restriction: /bin/false verhindert Login-Versuche auf den Service-Account. Selbst bei kompromittierten SSH-Keys oder Password-Leaks kann sich niemand als furt-Benutzer einloggen.
Home-Directory: /var/empty ist ein Standard-Dummy-Verzeichnis ohne Schreibrechte. Service-Accounts brauchen kein funktionales Home-Directory und sollten auch keins haben um die Angriffsfläche zu minimieren.
Gruppen-Isolation: Jeder Service erhält seine eigene primäre Gruppe. Das ermöglicht fein-granulare Dateiberechtigungen ohne dass Services versehentlich auf fremde Dateien zugreifen können.
Diese Konfiguration folgt dem Principle of Least Privilege - der furt-Service erhält nur die minimal notwendigen Systemrechte um seine Aufgabe zu erfüllen.
Script praktisch nutzen
Das Script ist für verschiedene Installationsszenarien konzipiert:
Einzelne Ausführung
# Als Teil der manuellen Installation
sudo ./scripts/setup-user.sh # Linux
doas ./scripts/setup-user.sh # OpenBSD
Die Ausgabe bestätigt welcher Benutzer auf welchem System erstellt wurde:
Created BSD system user: _furt
User setup completed successfully
Orchestrierte Installation
# Als Teil von install.sh - automatische Ausführung in Phase 1
./install.sh
# [INFO] Phase 1: Setting up system user... OK
Das Orchestrator-Script ruft setup-user.sh als ersten Schritt auf weil nachfolgende Scripts den erstellten Benutzer für chown-Operationen benötigen.
Entwicklung und Testing
# Benutzer für Test-Installation vorbereiten
sudo ./scripts/setup-user.sh
# ... Test-Installation durchführen ...
# Cleanup nach Tests
sudo userdel _furt && sudo groupdel _furt # BSD
sudo userdel furt && sudo groupdel furt # Linux
Installation validieren
Nach der Script-Ausführung kannst du prüfen ob der Benutzer korrekt erstellt wurde:
# Cross-platform Verification
getent passwd | grep -E '(furt|_furt)'
# BSD-spezifisch
id _furt
# Linux-spezifisch
id furt
Eine erfolgreiche Benutzer-Erstellung zeigt die UID, GID und die konfigurierten Einstellungen:
_furt:*:110:110::/var/empty:/bin/false
Die UID 110 liegt im System-Bereich, das Home-Directory ist /var/empty und die Shell ist /bin/false - alles korrekt für einen Service-Account.
Troubleshooting
"User already exists"
useradd: user '_furt' already exists
Das ist normal bei mehrfacher Script-Ausführung. Das || true verhindert dass das Script abbricht - die Meldung wird angezeigt aber ignoriert.
"Permission denied"
groupadd: Permission denied
Das Script benötigt Root-Rechte um System-Benutzer zu erstellen:
sudo ./scripts/setup-user.sh # Linux mit sudo
doas ./scripts/setup-user.sh # OpenBSD mit doas
Script bricht ab bei bestehenden Benutzern
Ältere Versionen des Scripts verwendeten nicht das || true Pattern. Die aktuelle Version ist idempotent und kann gefahrlos mehrfach ausgeführt werden.
Falsche Benutzerkonvention
Wenn das Script Linux-Konventionen auf BSD anwendet oder umgekehrt, prüfe die uname-Ausgabe:
uname
# Sollte "OpenBSD" oder "Linux" zurückgeben
Script erweitern
Zusätzliche Betriebssysteme
elif [ "$(uname)" = "NetBSD" ]; then
# NetBSD nutzt ebenfalls _furt Konvention
groupadd _furt 2>/dev/null || true
useradd -g _furt -s /bin/false -d /var/empty _furt 2>/dev/null || true
echo "Created NetBSD system user: _furt"
Konsistente UIDs zwischen Servern
# Feste UID/GID für identische Berechtigungen auf mehreren Maschinen
groupadd -g 1100 _furt 2>/dev/null || true
useradd -u 1100 -g _furt -s /bin/false -d /var/empty _furt 2>/dev/null || true
Das setup-user.sh Script reduziert die komplexen Unterschiede zwischen Betriebssystemen auf ein einfaches, einheitliches Interface. Es ist der erste Baustein des modularen Installationssystems und demonstriert wie kleine, spezialisierte Scripts robuste Automatisierung ermöglichen können.