# 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 `). 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) |