setup user sh aktualisiert
parent
b55d3aea2d
commit
61a239775c
1 changed files with 125 additions and 51 deletions
190
setup-user-sh.md
190
setup-user-sh.md
|
|
@ -1,103 +1,177 @@
|
||||||
# setup-user.sh
|
# 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
|
```bash
|
||||||
#!/bin/sh
|
|
||||||
# scripts/setup-user.sh - Create _furt system user and group
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Detect operating system
|
|
||||||
if [ "$(uname)" = "OpenBSD" ] || [ "$(uname)" = "FreeBSD" ]; then
|
if [ "$(uname)" = "OpenBSD" ] || [ "$(uname)" = "FreeBSD" ]; then
|
||||||
# BSD systems use _furt user convention
|
# BSD-Pfad: _furt Benutzer
|
||||||
groupadd _furt 2>/dev/null || true
|
groupadd _furt 2>/dev/null || true
|
||||||
useradd -g _furt -s /bin/false -d /var/empty _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
|
else
|
||||||
# Linux systems use furt user with --system flag
|
# Linux-Pfad: furt mit --system Flag
|
||||||
groupadd --system furt 2>/dev/null || true
|
groupadd --system furt 2>/dev/null || true
|
||||||
useradd --system -g furt -s /bin/false -d /var/empty 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
|
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
|
## Betriebssystem-Philosophien verstehen
|
||||||
- **Benutzer:** `_furt` (Underscore-Präfix für System-Services)
|
|
||||||
- **Gruppe:** `_furt`
|
|
||||||
- **UID-Bereich:** System wählt automatisch freie UID
|
|
||||||
|
|
||||||
### Linux (Debian, Arch)
|
Die unterschiedlichen Benutzerkonventionen spiegeln verschiedene System-Philosophien wider:
|
||||||
- **Benutzer:** `furt` (Service-Name direkt)
|
|
||||||
- **Gruppe:** `furt`
|
### BSD-Ansatz (OpenBSD, FreeBSD)
|
||||||
- **UID-Bereich:** `--system` Flag verwendet niedrige UIDs (< 1000)
|
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
|
## 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
|
```bash
|
||||||
groupadd _furt 2>/dev/null || true
|
# Als Teil der manuellen Installation
|
||||||
# Läuft durch auch wenn Gruppe bereits existiert
|
|
||||||
```
|
|
||||||
|
|
||||||
Das Script kann mehrfach ausgeführt werden ohne Schaden anzurichten.
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### "User already exists"
|
|
||||||
Normal bei mehrfacher Ausführung - wird durch `|| true` abgefangen.
|
|
||||||
|
|
||||||
### "Permission denied"
|
|
||||||
Script benötigt Root-Rechte:
|
|
||||||
```bash
|
|
||||||
sudo ./scripts/setup-user.sh # Linux
|
sudo ./scripts/setup-user.sh # Linux
|
||||||
doas ./scripts/setup-user.sh # OpenBSD
|
doas ./scripts/setup-user.sh # OpenBSD
|
||||||
```
|
```
|
||||||
|
|
||||||
### Benutzer prüfen
|
Die Ausgabe bestätigt welcher Benutzer auf welchem System erstellt wurde:
|
||||||
```bash
|
```
|
||||||
# BSD
|
Created BSD system user: _furt
|
||||||
id _furt
|
User setup completed successfully
|
||||||
|
|
||||||
# Linux
|
|
||||||
id furt
|
|
||||||
|
|
||||||
# Cross-platform
|
|
||||||
getent passwd | grep furt
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Erweiterungen
|
### 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"
|
||||||
|
```
|
||||||
|
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:
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
```bash
|
||||||
|
uname
|
||||||
|
# Sollte "OpenBSD" oder "Linux" zurückgeben
|
||||||
|
```
|
||||||
|
|
||||||
|
## Script erweitern
|
||||||
|
|
||||||
### Zusätzliche Betriebssysteme
|
### Zusätzliche Betriebssysteme
|
||||||
```bash
|
```bash
|
||||||
elif [ "$(uname)" = "NetBSD" ]; then
|
elif [ "$(uname)" = "NetBSD" ]; then
|
||||||
# NetBSD-spezifische User-Erstellung
|
# NetBSD nutzt ebenfalls _furt Konvention
|
||||||
groupadd _furt 2>/dev/null || true
|
groupadd _furt 2>/dev/null || true
|
||||||
useradd -g _furt -s /bin/false -d /var/empty _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
|
```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
|
groupadd -g 1100 _furt 2>/dev/null || true
|
||||||
useradd -u 1100 -g _furt -s /bin/false -d /var/empty _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.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue