From 6623036011bb213b7a41777f24723b9dcceeab0b Mon Sep 17 00:00:00 2001 From: Gordon Zimm Date: Fri, 25 Sep 2026 10:09:24 +0200 Subject: [PATCH] ESPO-01: sshd -t scheitert auf einer VM ohne bisherige SSH-Verbindung Gemeldet von der ersten Pilotkunden-VM: "Missing privilege separation directory: /run/sshd". Ubuntu 24.04 startet sshd ueber ssh.socket erst bei der ersten Verbindung; /run/sshd legt systemd dabei an (RuntimeDirectory). Auf einer frisch installierten VM, an der bisher nur die Hyper-V-Konsole benutzt wurde, existiert das Verzeichnis deshalb nicht - und sshd -t bricht ab, obwohl die Konfiguration einwandfrei ist. Auf der Test-VM fiel das nicht auf, weil dort per SSH gearbeitet wurde. Das Skript legt /run/sshd jetzt selbst an (0755, wie die Unit), laedt sshd nur neu, wenn er ueberhaupt als Dienst laeuft, und gibt die wirksamen Werte aus sshd -T aus. Sind sie nicht auslesbar, ist die Haertung unbewiesen und der Lauf ein Fehler. Co-Authored-By: Claude Opus 5 --- rmm-tasks/ESPO-01-Grundeinrichtung.sh | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/rmm-tasks/ESPO-01-Grundeinrichtung.sh b/rmm-tasks/ESPO-01-Grundeinrichtung.sh index 71edc5e..6ab5a05 100755 --- a/rmm-tasks/ESPO-01-Grundeinrichtung.sh +++ b/rmm-tasks/ESPO-01-Grundeinrichtung.sh @@ -9,7 +9,7 @@ set -u # Standzeile: zeigt im Protokoll, welche Fassung tatsaechlich gelaufen ist. -echo "ESPO-01-Grundeinrichtung, Skriptstand 2026-09-24" +echo "ESPO-01-Grundeinrichtung, Skriptstand 2026-09-25" KUERZEL_ROH="${1:-}" FEHLER=0 @@ -51,7 +51,28 @@ PermitRootLogin no MaxAuthTries 3 LoginGraceTime 20 CONF -if sshd -t; then systemctl reload ssh && echo "SSH: PermitRootLogin no, MaxAuthTries 3"; else echo "FEHLER: sshd-Konfiguration ungueltig"; FEHLER=1; fi +# /run/sshd muss dafuer existieren: `sshd -t` bricht ohne das Verzeichnis ab +# ("Missing privilege separation directory"). Ubuntu 24.04 startet sshd ueber ssh.socket +# erst bei der ersten Verbindung, und erst dann legt systemd (RuntimeDirectory=sshd) es an. +# Auf einer VM, auf der bisher nur die Konsole benutzt wurde, fehlt es deshalb. +install -d -m 0755 /run/sshd +if sshd -t; then + # Laeuft sshd als Dienst, muss er die Aenderung nachlesen. Unter ssh.socket laeuft er nicht + # dauerhaft - dort liest jede neue Verbindung die Konfiguration ohnehin neu. + if systemctl is-active --quiet ssh; then + systemctl reload ssh || { echo "FEHLER: sshd laedt die Konfiguration nicht neu"; FEHLER=1; } + fi + # Nachweis statt Zusicherung: die Werte so ausgeben, wie sshd sie tatsaechlich anwendet. + # Laesst sich das nicht auslesen, ist die Haertung unbewiesen - dann ist der Lauf ein Fehler. + SSH_IST="$(sshd -T | grep -iE '^(permitrootlogin|maxauthtries|logingracetime) ')" + if [ -n "$SSH_IST" ]; then + echo "$SSH_IST" | sed 's/^/SSH: /' + else + echo "FEHLER: wirksame SSH-Werte nicht auslesbar"; FEHLER=1 + fi +else + echo "FEHLER: sshd-Konfiguration ungueltig"; FEHLER=1 +fi # 5. Journal begrenzen, damit Logs das Wurzeldateisystem nicht fuellen koennen. install -d -m 755 /etc/systemd/journald.conf.d