From 61a239775cf50ca0e11973e4401761fc1c194dba Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 10 Sep 2025 09:11:27 +0200 Subject: [PATCH] setup user sh aktualisiert --- setup-user-sh.md | 176 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 125 insertions(+), 51 deletions(-) diff --git a/setup-user-sh.md b/setup-user-sh.md index 370c135..821f44e 100644 --- a/setup-user-sh.md +++ b/setup-user-sh.md @@ -1,103 +1,177 @@ # setup-user.sh -**System-Benutzer für furt erstellen** +**System-Benutzer für furt automatisch erstellen** -## Zweck +## Getestet unter +- OpenBSD 7.7 +- FreeBSD 14.1 +- Debian 12 +- Arch Linux -Erstellt den System-Benutzer für furt mit betriebssystem-spezifischen Konventionen. BSD-Systeme verwenden `_furt`, Linux-Systeme `furt` mit `--system` Flag. +## Zweck des Scripts -## Script-Code +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: ```bash -#!/bin/sh -# scripts/setup-user.sh - Create _furt system user and group - -set -e - -# Detect operating system if [ "$(uname)" = "OpenBSD" ] || [ "$(uname)" = "FreeBSD" ]; then - # BSD systems use _furt user convention + # BSD-Pfad: _furt Benutzer groupadd _furt 2>/dev/null || true useradd -g _furt -s /bin/false -d /var/empty _furt 2>/dev/null || true - echo "Created BSD system user: _furt" else - # Linux systems use furt user with --system flag + # 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 - echo "Created Linux system user: furt" fi - -echo "User setup completed successfully" ``` -## Betriebssystem-Unterschiede +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. -### OpenBSD/FreeBSD -- **Benutzer:** `_furt` (Underscore-Präfix für System-Services) -- **Gruppe:** `_furt` -- **UID-Bereich:** System wählt automatisch freie UID +## Betriebssystem-Philosophien verstehen -### Linux (Debian, Arch) -- **Benutzer:** `furt` (Service-Name direkt) -- **Gruppe:** `furt` -- **UID-Bereich:** `--system` Flag verwendet niedrige UIDs (< 1000) +Die unterschiedlichen Benutzerkonventionen spiegeln verschiedene System-Philosophien wider: + +### BSD-Ansatz (OpenBSD, FreeBSD) +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. + +```bash +# OpenBSD/FreeBSD +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. + +```bash +# 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 -**Shell:** `/bin/false` verhindert Login-Versuche auf den Service-Account +Beide Code-Pfäde implementieren die gleichen Sicherheitsprinzipien für Service-Accounts: -**Home:** `/var/empty` ist ein Standard-Dummy-Verzeichnis ohne Schreibrechte +**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. -**Zweck:** Service-Accounts sollten nur für den Service selbst nutzbar sein +**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. -## Idempotenz +**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. -Das `|| true` verhindert Script-Abbruch wenn Benutzer bereits existieren: +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 ```bash -groupadd _furt 2>/dev/null || true -# Läuft durch auch wenn Gruppe bereits existiert +# Als Teil der manuellen Installation +sudo ./scripts/setup-user.sh # Linux +doas ./scripts/setup-user.sh # OpenBSD ``` -Das Script kann mehrfach ausgeführt werden ohne Schaden anzurichten. +Die Ausgabe bestätigt welcher Benutzer auf welchem System erstellt wurde: +``` +Created BSD system user: _furt +User setup completed successfully +``` + +### Orchestrierte Installation +```bash +# 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 +```bash +# 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: + +```bash +# 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" -Normal bei mehrfacher Ausführung - wird durch `|| true` abgefangen. +``` +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" -Script benötigt Root-Rechte: +``` +groupadd: Permission denied +``` +Das Script benötigt Root-Rechte um System-Benutzer zu erstellen: ```bash -sudo ./scripts/setup-user.sh # Linux -doas ./scripts/setup-user.sh # OpenBSD +sudo ./scripts/setup-user.sh # Linux mit sudo +doas ./scripts/setup-user.sh # OpenBSD mit doas ``` -### Benutzer prüfen +### 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: ```bash -# BSD -id _furt - -# Linux -id furt - -# Cross-platform -getent passwd | grep furt +uname +# Sollte "OpenBSD" oder "Linux" zurückgeben ``` -## Erweiterungen +## Script erweitern ### Zusätzliche Betriebssysteme ```bash elif [ "$(uname)" = "NetBSD" ]; then - # NetBSD-spezifische User-Erstellung + # 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" ``` -### Custom UID/GID +### Konsistente UIDs zwischen Servern ```bash -# Feste UIDs für Konsistenz 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 -``` \ No newline at end of file +``` + +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. \ No newline at end of file