alientimandClaude Opus 5 8b39bfaf10 Dateifeld sichtbar machen, RPC-Fehler verstaendlich melden
Der Knopf im Dateifeld kommt vom Browser und ignoriert jede Aussenfarbe: im
dunklen Thema ein hellgraues Kaestchen mit dunkler Schrift, kaum zu lesen und
passend zu nichts. Jetzt explizit wie ein Sekundaerknopf gestaltet -- einmal
zentral, denn es betrifft vier Felder (Sicherung, Lizenz, Profilbild,
Dateifreigaben).

Dazu zwei neue Hinweise fuer den Windows-Neustart. "Could not initialise pipe
winreg / NT_STATUS_OBJECT_NAME_NOT_FOUND" liest sich wie ein technisches
Detail, hat aber fast immer eine Ursache: das Konto ist auf dem Zielgeraet kein
Administrator. An einem echten Fall nachgemessen -- die Anmeldung gelang, aber
schon "net rpc info" und der Dienstmanager antworteten mit ACCESS_DENIED. Ein
Standardkonto bekommt die winreg-Pipe gar nicht zu sehen. Die Meldung sagt das
jetzt und nennt den Pruefbefehl.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-02 21:58:03 +02:00
2026-09-02 18:01:23 +02:00

TESM-Lizenzserver

Ausgabe und Verwaltung der Lizenzen fuer TESM: Kunde -> Ticket -> Lizenz, Aktivierung online und offline, Kundenportal, Selbstbedienung, Versand ueber MS Graph und eine Hierarchie aus Unter-Lizenzservern.

Dieses Repository enthaelt genau das, was zum Installieren und Betreiben des Lizenzservers gebraucht wird -- nichts darueber hinaus:

apps/tesm-license               die Anwendung
packages/tesm-core              gemeinsamer Kern (Anmeldung, Rechte, Sicherung, nginx, ...)
packages/tesm-licensing         Lizenzprotokoll, gemeinsame Haelfte
packages/tesm-licensing-server  Lizenzprotokoll, Serverhaelfte: ausstellen, erneuern, antworten
deploy/                         install.sh, update.sh, release.sh, systemd, privilegierter Helfer
docs/                           Betrieb und Sicherheit

Die verwaltete Anwendung liegt hier nicht mit drin.

Wo sonst noch
alientim/tesm TESM selbst
alientim/TESM-DEV Entwicklung: beide Anwendungen, Tests, Architekturdoku

Zweige

Zweig Inhalt
main dieser Neubau (Version 2.0.0)
SONNET5 der Stand davor, unveraendert aufbewahrt

Installation

sudo bash deploy/install.sh --app tesm-license --https --domain lizenz.firma.de
sudo -u tesm-license tesm-license-admin init-key
sudo -u tesm-license tesm-license-admin bootstrap
sudo -u tesm-license tesm-license-admin create-admin

init-key erzeugt den Signaturschluessel dieses Servers. Sichern Sie ihn sofort. Ohne ihn laesst sich keine ausgestellte Lizenz mehr erneuern, und Kunden muessten einen Ausstellerwechsel bestaetigen.

Zielzustand: Port 443 mit TLS, Port 80 leitet dorthin um -- ausser dem ACME-Pfad, der erreichbar bleiben muss, sonst kann Let's Encrypt nie erneuern. Sitzt ein eigener Reverse Proxy davor, der TLS beendet, laeuft der Dienst ohne --https schlicht auf Port 80.

Der Lizenzserver darf neben TESM auf demselben Host laufen; nginx unterscheidet die beiden am Servernamen, und jede Installation hat ihren eigenen SITE_KEY fuer nginx-Site, logrotate, Zertifikate und Sitzungscookie.

Aktualisieren

sudo bash deploy/update.sh --app tesm-license

Vor jedem Update entsteht ein vollstaendiges Backup, danach laeuft ein Health-Check mit automatischem Rollback.


Betrieb von der Kommandozeile

sudo -u tesm-license tesm-license-admin status
sudo -u tesm-license tesm-license-admin init-key       # Signaturschluessel
sudo -u tesm-license tesm-license-admin bootstrap      # Grunddaten
sudo -u tesm-license tesm-license-admin create-admin
sudo -u tesm-license tesm-license-admin migrate-legacy # Altbestand uebernehmen

migrate-legacy liest die SQLite-Datei eines alten Lizenzservers nur lesend, uebernimmt dessen Signaturschluessel und stellt die Lizenzen mit ihrer restlichen Laufzeit neu aus. Wird der Schluessel nicht uebernommen, muessen Kunden den Ausstellerwechsel einmal bestaetigen.


Release bauen

git tag -a v2.0.0 -m "TESM-Lizenzserver 2.0.0" && git push origin v2.0.0
bash deploy/release.sh v2.0.0

Heraus kommt tesm-license-v2.0.0.tar.gz samt SHA-256. Der Name kommt aus dem Repository -- ein Lizenzserver-Release, das tesm-... heisst, verwechselt man genau einmal.


Lizenzprotokoll in Kurzform

  • Ed25519, getrennte Signaturkontexte je Nachrichtenart (tesm/license-file/v2\0) -- eine Signatur aus einem Kontext ist in einem anderen nicht verwendbar.
  • Kanonisches JSON, damit dieselbe Aussage genau eine Signatur hat.
  • Nonce gegen Wiedereinspielung, seq gegen das Zurueckrollen auf eine aeltere Lizenz.
  • Aussteller wird beim ersten Kontakt gemerkt (TOFU); ein Wechsel muss ausdruecklich bestaetigt werden.
  • Der Fingerabdruck der Maschine enthaelt keinen Hostnamen -- Umbenennen brach im Vorgaenger die Bindung.
  • Offline-Aktivierung ueber einen kurzen Code in beide Richtungen; die Lizenz bleibt auf dem Server als "Aktivierung offen" markiert, bis sie zurueckkommt.
  • Keine Lizenz ohne master_endpoint: eine Ausstellung ohne Endpunkt wird abgelehnt statt eine Lizenz zu erzeugen, die sich nie aktivieren kann.

Dokumentation

docs/BETRIEB.md Installation, Update, HTTPS, Sicherung, Fehlersuche
docs/SICHERHEIT.md Anmeldung, Sitzungen, CSRF, Geheimnisse, Rechtetrennung

Aufbau und Entwurfsentscheidungen stehen in docs/ARCHITEKTUR.md im Entwicklungsrepository, ebenso die Tests.


Was diese Fassung anders macht

  • Keine doppelte licensing.py. Ein Paket, das beide Anwendungen installieren -- statt zweier Dateien, die byte-identisch bleiben sollen.
  • Kein root fuer die Anwendung. Ein einziger allowlisted Helfer mit Argumentpruefung.
  • CSRF-Schutz ueberhaupt. Der Vorgaenger hatte keinen.
  • Rechte werden serverseitig geprueft, nicht nur im Template ausgeblendet.
  • Verschachtelte Datenbankverbindungen sind ein Fehler, kein Deadlock.
S
Description
TESM-Lizenzserver -- Master-Lizenzserver fuer TESM (Kunden-/Lizenzverwaltung, Aktivierungs-/Heartbeat-API)
Readme
3.7 MiB
2026-09-03 16:18:55 +02:00
Languages
Python 62.4%
HTML 21.3%
Shell 7.7%
CSS 5.5%
JavaScript 3.1%