docs(adr): ADR-0016 — notfallhandbuch stays lab-internal, no mirror

Standing exception to ADR-0001 (everything is push-mirrored to Gitea). The
handbook necessarily maps the infrastructure, the backup locations and where the
keys are kept; mirroring it onto the internet-facing host that is itself one of
the covered failure cases would hand a post-compromise attacker their next step.
Confidentiality over availability, with a local clone closing the availability
gap. Records the rejected alternatives so the question does not reopen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Thore Cimbal
2026-08-14 12:00:00 +00:00
co-authored by Claude Opus 4.8
parent 546e444a14
commit 6f74642659
3 changed files with 77 additions and 5 deletions
+2 -1
View File
@@ -45,7 +45,7 @@ Verteilung: M1 7 · M2 19 · M4 2 · M5 4
_none active_ _none active_
## ADRs (15) ## ADRs (16)
| ADR | Status | Title | | ADR | Status | Title |
|---|---|---| |---|---|---|
@@ -64,6 +64,7 @@ _none active_
| [0013](docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md) | accepted | ADR-0013: Gruppenregeln kanonisch im management-Repo, Komponenten zeigen und werden geprüft | | [0013](docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md) | accepted | ADR-0013: Gruppenregeln kanonisch im management-Repo, Komponenten zeigen und werden geprüft |
| [0014](docs/adr/0014-wikijs-loest-docusaurus-ab.md) | accepted | 0014 — Wiki.js löst Docusaurus ab: abgeschottete Betriebs-/Anwenderdoku, docs-as-code | | [0014](docs/adr/0014-wikijs-loest-docusaurus-ab.md) | accepted | 0014 — Wiki.js löst Docusaurus ab: abgeschottete Betriebs-/Anwenderdoku, docs-as-code |
| [0015](docs/adr/0015-wiki-git-storage-ueber-gitea-kanonisieren.md) | accepted | 0015 — Wiki.js Git-Storage: Inhalt fließt Cluster→Gitea→kanonisiert nach git.lab | | [0015](docs/adr/0015-wiki-git-storage-ueber-gitea-kanonisieren.md) | accepted | 0015 — Wiki.js Git-Storage: Inhalt fließt Cluster→Gitea→kanonisiert nach git.lab |
| [0016](docs/adr/0016-notfallhandbuch-nicht-spiegeln.md) | accepted | 0016 — Das Notfallhandbuch bleibt lab-intern und wird nicht gespiegelt |
## Open AARs (2) ## Open AARs (2)
@@ -0,0 +1,72 @@
---
type: adr
id: "0016"
status: accepted
date: 2026-08-14
supersedes: null
superseded_by: null
related:
- "docs/adr/0001-gitlab-kanonisch-push-mirror.md"
- "docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md"
---
# 0016 — Das Notfallhandbuch bleibt lab-intern und wird nicht gespiegelt
**Status:** akzeptiert · **Datum:** 2026-08-14 · **Entscheider:** sorb
## Kontext
ADR-0001 legt fest: git.lab ist kanonisch, **alle** Repos werden per Push-Mirror nach
Gitea (`rohana.axion1337.de`) beliefert. Das dient der Verfügbarkeit — Gitea ist von
überall erreichbar, git.lab nur im Lab bzw. über VPN.
Am 2026-08-14 entstand mit `axion1337.chat/notfallhandbuch` ein Repo, dessen Inhalt
qualitativ anders ist als Code oder Konfiguration: Es beschreibt die Wiederherstellung
der Plattform und damit zwangsläufig **den Aufbau der Infrastruktur, den Ablageort der
Sicherungen (Storage Box, Borg-Repos) und wo die Schlüssel zu finden sind** (Vault,
`sops-age`, die Kette bis zur Borg-Passphrase). Werte enthält es nicht — aber die
vollständige Landkarte dorthin.
Rein aus Verfügbarkeitssicht wäre ein Mirror besonders naheliegend: git.lab ist genau
dann nicht erreichbar, wenn man das Handbuch am dringendsten braucht. Diese Empfehlung
wurde in #0030 zunächst auch so gegeben.
## Entscheidung
**Das Notfallhandbuch wird bewusst NICHT nach Gitea gespiegelt** und bleibt
ausschließlich auf git.lab — eine dauerhafte Ausnahme von ADR-0001.
Begründung: Gitea/rohana ist aus dem Internet erreichbar und Teil des Stacks, den das
Handbuch wiederherstellen soll. Wird dieser Stack kompromittiert, wäre ein dort
gespiegeltes Notfallhandbuch genau die Aufklärung, die ein Angreifer für den nächsten
Schritt braucht — Backup-Ziele, Schlüsselverwahrung, Wiederanlaufpfade. Ein Angreifer
mit rohana-Zugriff soll **nicht** zusätzlich erfahren, wo die Sicherungen liegen.
**Vertraulichkeit geht hier vor Verfügbarkeit.**
Die Verfügbarkeitslücke wird stattdessen über einen **lokalen Clone** geschlossen
(Laptop, verschlüsselter Datenträger), der nach Änderungen aktualisiert wird. Das ist
eine Kopie unter eigener Kontrolle, kein öffentlich erreichbarer Spiegel.
## Konsequenzen
- **Kein Mirror einrichten** — auch nicht „der Vollständigkeit halber" oder beim
Vereinheitlichen der Mirror-Konfiguration. Die Begründung steht zusätzlich im README
des Repos, weil dort zuerst hinschaut, wer die Lücke bemerkt.
- Ohne Lab-Zugang (unterwegs, Lab offline) ist das Repo nicht abrufbar. **Der lokale
Clone ist damit Teil des Notfallkonzepts**, nicht bloß Bequemlichkeit — veraltet er,
verliert man im Ernstfall den aktuellen Stand.
- Das Handbuch darf weiterhin **keine Secret-Werte** enthalten, nur Fundorte. Die
Vertraulichkeit dieses Repos ist eine zusätzliche Schutzschicht, kein Ersatz für die
Secrets-Hygiene.
- Andere Repos bleiben von dieser Ausnahme unberührt; ADR-0001 gilt für sie weiter.
## Verworfene Alternativen
- **Mirror wie bei allen anderen Repos:** verworfen — verlagert das Handbuch auf genau
den Host, dessen Kompromittierung einer der abgedeckten Fälle ist.
- **Mirror in ein privates Gitea-Repo:** verworfen — der Schutz stünde und fiele mit der
Gitea-Rechteverwaltung, also erneut mit der Integrität des kompromittierten Systems.
- **Handbuch ohne Fundorte schreiben** (damit es gefahrlos spiegelbar wäre): verworfen —
ein Notfallhandbuch, das verschweigt, wo die Sicherungen und Schlüssel liegen, ist im
Ernstfall wertlos.
@@ -7,7 +7,7 @@ milestone: M1
priority: medium priority: medium
area: security area: security
gitlab_iid: "30" gitlab_iid: "30"
related: [] related: [docs/adr/0016-notfallhandbuch-nicht-spiegeln.md]
--- ---
# Der Restore ist nie geprobt — Sicherungen sind bisher eine Vermutung # Der Restore ist nie geprobt — Sicherungen sind bisher eine Vermutung
@@ -187,6 +187,5 @@ spiegeln, war damit falsch — sie hatte nur die Verfügbarkeit im Blick.) Die V
einen Mirror. Begründung steht im README des Notfallhandbuchs, damit sie nicht erneut einen Mirror. Begründung steht im README des Notfallhandbuchs, damit sie nicht erneut
"wegoptimiert" wird. "wegoptimiert" wird.
Das ist eine **dauerhafte Ausnahme von der Spiegel-Topologie** (ADR-0001) — nach dem Framework Das ist eine **dauerhafte Ausnahme von der Spiegel-Topologie** (ADR-0001) und daher als
(ADR-Pflicht auch für dauerhafte Regel-Ausnahmen) wäre dafür ein eigener ADR fällig; bislang nur **ADR-0016** festgehalten.
hier und im README festgehalten.