Files
infrastructure/docs/GNAI-002-INFRA_Users.md
T

226 lines
5.7 KiB
Markdown

# Standard Operating Procedure
**Dokumenten-ID:** GNAI-002-INFRA
**Titel:** Benutzerverwaltung, SSH-Härtung & Netzwerkkonfiguration (Phase 2)
**Version:** 1.0
---
## 1. Zweck und Geltungsbereich
Dieses Dokument beschreibt die Erstellung von Systembenutzern mit Berechtigungen, die Härtung des SSH-Dienstes (Abschaltung von Root-Login und Passwort-Authentifizierung), die Umstellung auf eine statische IP-Adresse sowie die Konfiguration des SSH-Zugriffs von Admin-Workstations auf LLM-Servern.
---
## 2. Voraussetzungen & Berechtigungen
* Bereits installiertes Debian-Grundsystem gemäß **GNAI-INFRA-001**.
* Root-Zugriff oder Benutzer mit `sudo`-Rechten.
* Admin-Workstation mit lokal installierter SSH-Suite (`ssh-keygen`, `ssh-copy-id`).
---
## 3. Prozessbeschreibung
### 3.1 Benutzerverwaltung & Sudo-Berechtigungen (Server-Seite)
#### 1. Sudo-Paket installieren & prüfen (falls noch nicht geschehen)
Als `root` am Server anmelden:
```bash
su -
apt update && apt install -y sudo
```
#### 2. Benutzer anlegen & Berechtigungen vergeben
> **Wichtig:** Beim Anlegen von Benutzern immer `adduser` verwenden (interaktive Eingabe von Passwort und Benutzerdaten). Falls versehentlich `userdel` benötigt wird, zwingend die Option `-r` nutzen, um das Home-Verzeichnis mit aufzuräumen (`sudo userdel -r <username>`).
Neuen Benutzer anlegen und zur `sudo`-Gruppe hinzufügen:
```bash
# Beispiel für Benutzer 'ghost' oder 'debugofen'
sudo adduser debugofen
sudo usermod -aG sudo debugofen
```
---
### 3.2 Statische Netzwerkkonfiguration (Server-Seite)
#### 1. Netzschnittstelle ermitteln & anpassen
Primäre Netzwerkschnittstelle anzeigen lassen (z. B. `enp8s0`):
```bash
ip addr show
```
Datei bearbeiten: `/etc/network/interfaces`:
```bash
sudo nano /etc/network/interfaces
```
Netzwerkkonfiguration für statische IP eintragen:
```text
# Loopback Interface
auto lo
iface lo inet loopback
# Primary Network Interface
allow-hotplug enp8s0
iface enp8s0 inet static
address 10.0.0.90/24
gateway 10.0.0.1
dns-nameservers 10.0.0.1 1.1.1.1
```
#### 2. DNS-Resolver prüfen/anpassen
Datei überprüfen `/etc/resolv.conf`:
```bash
sudo nano /etc/resolv.conf
```
Sicherstellen, dass folgende Nameserver eingetragen sind:
```text
nameserver 10.0.0.1
nameserver 1.1.1.1
```
#### 3. Netzwerkdienst neustarten & Funktion prüfen
```bash
sudo systemctl restart networking
ip -4 addr
ping -c 4 google.com
```
*(Tritt ein Konfigurationskonflikt auf, das System einmal per `sudo reboot` neustarten).*
---
### 3.3 SSH-Key-Generierung & Übertragung (Workstation-Seite)
Die folgenden Schritte werden auf der **lokalen Workstation** ausgeführt.
#### 1. Ed25519 SSH-Schlüsselpaar erzeugen
```bash
ssh-keygen -t ed25519 -C "ghost@ghostnet-ki" -f ~/.ssh/id_ed25519_ghost
ssh-keygen -t ed25519 -C "debugofen@ghostnet-ki" -f ~/.ssh/id_ed25519_debugofen
```
#### 2. Public Keys auf den Server übertragen
Der Befehl `ssh-copy-id` wird verwendet, um die öffentlichen Schlüssel auf den Server zu kopieren (vorläufig noch mit Passwort-Authentifizierung):
```bash
ssh-copy-id -i ~/.ssh/id_ed25519_ghost.pub ghost@10.0.0.90
ssh-copy-id -i ~/.ssh/id_ed25519_debugofen.pub debugofen@10.0.0.90
```
#### 3. Schlüsselbasierten Login testen
```bash
ssh -i ~/.ssh/id_ed25519_ghost ghost@10.0.0.90
ssh -i ~/.ssh/id_ed25519_debugofen debugofen@10.0.0.90
```
#### 4. Workstation Client-Config einrichten (`~/.ssh/config`)
Die Datei `~/.ssh/config` auf der Workstation erstellen/bearbeiten, um Kurznamen für Verbindungen zu nutzen:
```bash
nano ~/.ssh/config
```
Inhalt eintragen:
```text
Host *
AddKeysToAgent yes
IdentitiesOnly yes
Host ghostnet.ki
Hostname 10.0.0.90
User ghost
IdentityFile ~/.ssh/id_ed25519_ghost
```
Berechtigungen auf der Workstation korrigieren:
```bash
chmod 600 ~/.ssh/config
```
Verbindung über den Alias testen:
```bash
ssh ghostnet.ki
```
---
### 3.4 SSH-Dienst härten (Server-Seite)
Sobald der SSH-Key-Login erfolgreich getestet wurde, wird die Passwort-Authentifizierung aus Sicherheitsgründen serverseitig komplett deaktiviert.
#### 1. Drop-in-Konfiguration für SSH erstellen
```bash
sudo nano /etc/ssh/sshd_config.d/99-security.conf
```
Den folgenden Inhalt einfügen:
```text
# Root-Login über SSH komplett verbieten
PermitRootLogin no
# Passwort-Authentifizierung deaktivieren (nur SSH-Keys erlauben)
PasswordAuthentication no
KbdInteractiveAuthentication no
# Leere Passwörter verbieten
PermitEmptyPasswords no
# Nur explizite SSH-Key Methoden erlauben
PubkeyAuthentication yes
```
#### 2. SSH-Konfiguration prüfen und Dienst neustarten
> **Achtung:** Die bestehende SSH-Sitzung **nicht** schließen, bevor der Login in einem zweiten Terminalfenster erfolgreich verifiziert wurde!
```bash
# Syntaktische Prüfung der Konfiguration
sudo sshd -t
# Wenn sshd -t keine Fehler ausgibt, Dienst neustarten
sudo systemctl restart sshd
```
---
## 4. Abnahmekriterien (Checkliste für den Junior-Admin)
* [ ] **Benutzerprüfung:** Der Benutzer kann sich mit `sudo` administrative Rechte verschaffen (`whoami` nach `sudo` ergibt `root`).
* [ ] **Netzwerk:** Server ist unter der statischen IP `10.0.0.90` erreichbar. Ausgehender Datenverkehr funktioniert (`ping google.com`).
* [ ] **SSH-Alias:** Der Login von der Workstation über `ssh ghostnet.ki` funktioniert ohne Passworteingabe.
* [ ] **Root-Sperre:** Direct-Login als Root per SSH wird abgelehnt (`ssh root@10.0.0.90` -> *Permission denied*).
* [ ] **Passwort-Sperre:** Login-Versuch ohne hinterlegten SSH-Key wird direkt abgelehnt (keine Passwort-Aufforderung mehr).
---
## 5. Dokumentation der Änderungen
| Datum | Version | Geändert von | Beschreibung der Änderung |
| --- | --- | --- | --- |
| 2026-08-26 | 1.0 | spektr | Erstellung des Dokuments (Benutzer, Netzwerkkonfiguration, SSH-Härtung) |