Benutzer, Rollen, TLS
Betriebsarten der Anmeldung
| Art | Aufruf | Anmeldung |
|---|---|---|
| offen | ohne --token/--users | keine; nur auf der Loopback-Adresse erlaubt |
| gemeinsames Token | --token … (oder RAILIT_TOKEN) | Authorization: Bearer <token>, alle Rechte |
| Benutzerverwaltung | --users users.toml --audit audit.log | Token oder Client-Zertifikat je Benutzer, Rollen |
Benutzerdatei
[[user]]
name = "fdl-adorf"
roles = ["fahrdienstleiter"]
operator = 101 # Bedienernummer für Hilfshandlungen (eindeutig)
areas = ["Adorf"] # optional: nur diese Stellbereiche bedienen
token_sha256 = "<64 Hex>" # Anmeldung mit Token (railit auth token)
cert_cn = "fdl-adorf" # oder mit Client-Zertifikat (mTLS)railit auth token fdl-adorf # erzeugt ein Token und gibt dessen Hash für die Datei ausDetails: Benutzerdatei.
Rollen
| Rolle | Rechte |
|---|---|
beobachter | lesen |
fahrdienstleiter | lesen, Stellwerk bedienen, Hilfshandlungen |
disponent | lesen, Betriebsführung |
instandhaltung | lesen, Simulation, Auditprotokoll, Sicherheitsschicht |
projektierer | lesen, Auditprotokoll |
bereitschaft | lesen, Journal quittieren (Bereitschaftsrechner) |
administration | alles |
Fehlende Rechte ergeben 403. Jede Bedienung – auch eine abgewiesene – steht im Auditprotokoll (JSON Lines mit Hashkette):
railit audit verify audit.log # Kette prüfen (offline)
railit audit show --last 50 # letzte Einträge (online)Kann das Auditprotokoll nicht geschrieben werden, sperrt der Dienst alle weiteren Bedienungen (fail closed).
TLS und mTLS
railitd … --users users.toml --audit audit.log \
--tls-cert server.pem --tls-key server.key --tls-client-ca ca.pem
railit --server https://stw:7878 --ca ca.pem --cert fdl.pem --key fdl.key stateMit --tls-client-ca verlangt der Dienst ein Client-Zertifikat; dessen CN identifiziert den Benutzer (cert_cn).
Sperrlisten
Ein verlorenes oder kompromittiertes Zertifikat sperrt die CA in ihrer Sperrliste (CRL, PEM). Der Dienst prüft jede Anmeldung dagegen:
railitd … --tls-client-ca ca.pem --tls-crl ca.crl.pemDer Dienst prüft die Datei alle zwei Sekunden auf Änderungen und lädt sie ohne Neustart neu; bestehende Verbindungen bleiben bis zu ihrem Ende bestehen. Eine Sperrliste, deren nextUpdate überschritten ist, gilt nicht: Dann – wie bei einer unlesbaren Datei – weist der Dienst jede Anmeldung mit Zertifikat ab, bis eine gültige Sperrliste vorliegt. Die CA muss die Sperrliste also rechtzeitig neu ausstellen.
Siegel
Mit --seal-key siegelt der Dienst Journal und Auditprotokoll mit dem Schlüssel des Stellwerks (Ed25519 über den Stand der Hashkette). Die Kette zeigt jede veränderte Zeile, das Siegel zeigt, dass niemand die Datei als Ganzes neu geschrieben hat:
railit journal verify betrieb.journal --key railit.pub --require-seal
railit audit verify audit.log --key railit.pubJedes Siegel trägt die Uhrzeit des Stellwerks (UTC) unter der Signatur; die Prüfung zeigt die Zeitspanne der Siegel und lehnt Siegel ab, deren Zeit zurückläuft (REQ-JRN-010). Weil sich das Stellwerk damit nur selbst bezeugt, kann ein Zeuge mit eigenem Schlüssel – ein Zeitserver, die Revision, ein Rechner außerhalb des Stellwerks – den Stand zusätzlich bestätigen:
railit plan keygen notar # einmal
railit journal witness betrieb.journal --key notar.key # z. B. stündlich per cron
railit journal verify betrieb.journal --key railit.pub --witness-key notar.pub
railit audit verify audit.log --witness-key notar.pub # gleiches für das AuditprotokollEin Zeugnis bindet den Hash der letzten Zeile an die Uhrzeit des Zeugen und steht in <Datei>.witness. Wer das Journal später neu schreibt, erzeugt eine andere Kette – alte Zeugnisse passen dann nicht mehr.