đ HANDOUT & REVIEW â PHP im RZ vs. Rust im Terminal: Read-Only fĂŒr die Maschine im Raum
Datum: 19. Oktober 2026 (#verbindung #schlĂŒssel #local #oldschool #mcp #nullfeld)
Autoren / Crew: Branko · GeminiCrew (Antigravity Audit & Build) · Bugsy đ · Schnecki đ · GitBadger đŠĄ
GeprĂŒfte Repositories:
TLS-NativePHP_v1_gemini_rmx (Commit 3fe364a â Live verifiziert auf rmx01)
Ansible-Crumbforest-Rust (#local â crumb-local + ansible.builtin Host-VertrĂ€ge)
0. Der SchlĂŒsselmoment (Warum sich das heute so stimmig anfĂŒhlt)
Nach 24 Monden Architektur, HĂ€rtung und Nachbau standen heute im Browser auf http://rmx01.localhost:18080 genau diese zwei Tabellen untereinander â live erzeugt aus dem frisch geklonten TLS-NativePHP_v1_gemini_rmx-Repo:
Beweis 1: Das kryptographische GedÀchtnis der Menschen (audit_log)
Zeit (UTC) Wer Gruppe Aktion Ergebnis Ziel IP Kontext
2026-10-19T18:58:41Z admin@rmx01.localhost rmx01 auth.login ok admin@rmx01.localhost 172.22.0.1 {"role":"admin"}
2026-10-19T18:58:41Z admin@rmx01.localhost rmx01 auth.mfa_enroll ok admin@rmx01.localhost 172.22.0.1
2026-10-19T18:58:15Z â â auth.password ok admin@rmx01.localhost 172.22.0.1 {"next":"enroll"}
Beweis 2: Das physische GedÀchtnis der Maschinen (netbox_events / DeviceMirror)
Zeit Art GerÀt Detail von
19.10.2026 18:47 back #103 pi.test cli:rmx01
19.10.2026 18:47 changed #101 zero01.test {"macs":[["02:FA:CE:00:01:99"],["02:FA:CE:00:01:01"]]} cli:rmx01
Was diese zwei Tabellen zusammen bedeuten:
Wenn sich ein Mensch anmeldet (auth.mfa_enroll+ atomarer TOTP-Replay-Schutz) und wenn an einem Raspi Zero im Baumhaus oder Container die Hardware-MAC wechselt (changed #101 zero01.test) oder ein Pi wieder auftaucht (back #103 pi.test), sprechen beide Ereignisse dieselbe Sprache, liegen im selben unauslöschlichen GedĂ€chtnis (Append-Only SQL-Trigger) und sind durch denselben WurzelschlĂŒssel (root.key0400, HKDF-SHA256tg1:) geschĂŒtzt.
1. Die Grundsatzfrage gelöst: Warum PHP im RZ â und warum Rust im Terminal im Raum?
Lange schien es ein Entweder-Oder zu sein: âBauen wir TLS-Gate in PHP weiter oder schreiben wir alles in Rust/Tokio neu?â
Die Antwort aus der Praxis im Rechenzentrum (BSI/NIS2) und im physischen Raum (OZM / 40-FuĂ-Container / Baumhaus) lautet: Kein Entweder-Oder, sondern eine glasklare Rollenteilung an der Kante (#verbindung #schlĂŒssel).
+=========================================================================================+
| PHP IM RECHENZENTRUM vs. RUST IM TERMINAL IM RAUM |
+=========================================================================================+
| |
| đïž NEWSCHOOL NATIVE PHP (`TLS-Gate` RC1.0) đŠ RUST IM TERMINAL (`crumb-local` / TUI) |
| ------------------------------------------ -------------------------------------- |
| ORT: Im Rechenzentrum (RZ) / Strato ORT: Lokal auf der Maschine im |
| (`onezeromore.com`, `crumbforest.io`) Raum / Container / VPN (`wg0`)|
| |
| UNTERBAU: Apache 2.4 / Nginx + PHP 8.4 FPM UNTERBAU: 1 statisches Binary (glibc/ |
| + MySQL 8.4 / MariaDB 11.8 musl), 0 Python-`.venv`! |
| (Debian, Gentoo, Arch, FreeBSD) |
| |
| WARUM?: BSI-Grundschutz & NIS2-konform! WARUM?: Kein offener Webport im Raum!|
| Jeder Auditor versteht Apache/FPM, Kein Browser-XSS, kein |
| UNIX-Sockets (`0660`), `open_basedir` Session-Klau, direkt an |
| und SQL-Trigger. ARP, `wg0` und Dateisystem. |
| |
| ROLLE: DER KANONISCHE SERVER & NOTAR ROLLE: DER LOKALE WĂCHTER & SPIEGEL |
| - Spricht als EINZIGER aktiv SOAP - Liest den RZ-Stand |
| mit dem Registrar (AutoDNS). STRIKT READ-ONLY! |
| - Spiegelt NetBox (`DeviceMirror`). - PrĂŒft lokale MAC-RealitĂ€t |
| - FĂŒhrt Katalog, Buchungen & Audit. (`ip neigh` vs. Spiegel). |
| - Versiegelt Secrets mit `tg1:`. - Verwaltet die lokale |
| Raum-CA (`Slot 4: 'ca'`). |
+=========================================================================================+
2. #verbindung & #schlĂŒssel: Wie RZ und Maschine im Raum miteinander sprechen
Das gröĂte Risiko klassischer Infrastrukturen ist, dass AuĂenstellen (ein Museum, ein Container auf dem Parkplatz, ein Raspi Zero im Feld) Schreibrechte oder direkte Datenbank-Tunnel zurĂŒck ins Rechenzentrum haben. Wird ein GerĂ€t vor Ort kompromittiert, brennt das RZ.
Im Crumbforest-/OZM-Modell gilt das EinbahnstraĂen-Prinzip fĂŒr das RZ und das Schwere-TĂŒr-Prinzip fĂŒr den Raum:
+=========================================================================================+
| 1. IM RECHENZENTRUM (DER SERVER â `TLS-NativePHP_v1`) |
| `onezeromore.com` · `crumbforest.io` · `backbone` (87.106.12.97) |
+=========================================================================================+
| |
| [Registrar SOAP] ---> [PHP SslHandler + CredentialStore (`tg1:` Slot 1 'cred')] |
| [NetBox 4.6 API] ---> [PHP NetBoxClient + DeviceMirror (`tg1:` Slot 3 'netbox')] |
| | |
| v |
| [MySQL/MariaDB: `registrar_inventory`, |
| `netbox_devices`, `netbox_events`, `audit_log` (Append-Only)] |
| | |
| +---> [Borgmatic ("Alter Wald")]: | |
| Sichert alte StÀnde | Stellt an der HTTPS-Kante bereit: |
| verschlĂŒsselt & NUR LESBAR. | Signierter / mTLS-geschĂŒtzter JSON-Spiegel |
+=======================================|=================================================+
^
|
| #VERBINDUNG:
| 100 % READ-ONLY PULL (HTTPS + TLS-Login / `wg0`)
| Die Maschine im Raum HOLT sich nur das Wissen.
| Sie kann im RZ NICHTS ĂŒberschreiben oder löschen!
|
+=======================================|=================================================+
| 2. DIE MASCHINE IM RAUM (`container01.crumbforest.org` · `cruncher` · Ansible-Node) |
| Von auĂen (Internet) UNSICHTBAR (0 offene Ports auf 0.0.0.0!) |
+=========================================================================================+
| |
| [Physischer Besuch im Container / Museum / Raspi Zero (`crumbzero00`, `crumbzero01`)] |
| | |
| v |
| +-----------------------------------------------------------------------------------+ |
| | đ SCHRITT 1: DER PHYSISCHE SCHLĂSSEL (`crumb-local mac-gate`) | |
| | Vergleicht `ip neigh` / `arp` im Raum mit den aus dem RZ gelesenen | |
| | `netbox_devices` (`changed #101 zero01.test`, `back #103 pi.test`): | |
| | * MAC bekannt & aktiv? ---> TĂŒr geht auf. | |
| | * MAC geĂ€ndert / fremd? ---> SOFORT BLOCKIERT + Alarm (`ninja.sh` / Bugsy đ) | |
| +-----------------------------------------------------------------------------------+ |
| | |
| v |
| +-----------------------------------------------------------------------------------+ |
| | đïž SCHRITT 2: DIE STILLE TĂR (`crumbconnect.sh` + WireGuard `/32`) | |
| | Jeder Baum im Raum hat genau eine `/32` (`10.42.0.19/32` `cruncher`, | |
| | `10.42.0.21/32` `zero01`). Private Key verlÀsst NIEMALS die Maschine! | |
| +-----------------------------------------------------------------------------------+ |
| | |
| v |
| +-----------------------------------------------------------------------------------+ |
| | đ SCHRITT 3: DIE LOKALE RAUM-CA (`Slot 4: 'ca'` â Offline-autark!) | |
| | BestÀtigt durch die Domain-VPN-CA, stellt die Maschine im Raum lokale | |
| | Kurzzeit-Zertifikate fĂŒr die Sensoren, Roboter und den lokalen Baum | |
| | (Qdrant `musl` 16K-safe auf `127.0.0.1:6333` + Ollama `127.0.0.1:11434`) aus. | |
| +-----------------------------------------------------------------------------------+ |
+=========================================================================================+
3. Warum der Read-Only-Spiegel fĂŒr die Maschine im Raum alles verĂ€ndert
Schauen wir uns den konkreten Eintrag aus unserem heutigen Live-Test auf rmx01 noch einmal genau an:
19.10.2026 18:47 changed #101 zero01.test {"macs":[["02:FA:CE:00:01:99"],["02:FA:CE:00:01:01"]]} cli:rmx01
Was passiert hier im Zusammenspiel zwischen PHP (TLS-Gate) und Rust (crumb-local im Raum)?
- In NetBox (
seeds.crumbforest.io) ist dokumentiert, welche Hardware-MAC zuzero01gehört. - PHP (
netbox_cli.php sync/DeviceMirror.php) holt diesen Stand rein lesend (GET) ab, prĂŒft, dass kein fremder Tenant (Szenario C) und kein manipulierter Pagination-Host (Szenario N) eingeschleust wurde, und protokolliert jede Hardware-Ănderung (changed) oder Abwesenheit (gone/back) revisionssicher innetbox_events. - Die Maschine im Raum (
crumb-local/ Rust im Terminal) liest diesen Spiegel ebenfalls rein lesend und hÀlt ihn neben die echte Physik im Raum (ip neigh show/wg show wg0): - Kein blindes Vertrauen ins Netz:
IN_HOTSPOT(device) â ACCESS_GRANT(device) - Kein blindes Vertrauen in die Datenbank:
NETBOX_RECORD(dev) â OBSERVED_PHYSICAL_DEVICE(dev) - Nur wenn beides ĂŒbereinstimmt (der Eintrag im lesenden Spiegel und die echte MAC am Kabel/Funk im Raum), bekommt das GerĂ€t Zugang zum lokalen Wissen.
4. GegenĂŒberstellung der Werkzeuge im Terminal (Wann nutzt die Crew was?)
Im Sinne des #schreibmaschine- und #crumbfu-Prinzips (âComputer ohne Maus/Klick/Touch â Einzeiler, die ĂŒber die Bash entscheidenâ) hat jedes Werkzeug auf der Maschine seinen klaren Platz:
| Werkzeug | Sprache | LĂ€uft wo? | Modus | Aufgabe fĂŒr die Crew |
|---|---|---|---|---|
bin/tg & bin/tg-dash |
PHP + Bash | Auf der TLS-Gate-Node (RZ / cruncher / tlsgate-vm) |
CLI (Guard: nur root/Instanz-Owner) |
Verwaltet Gruppen, Rollen, TOTP, Katalog, Buchungen, versiegelte SOAP-/NetBox-ZugÀnge und zeigt den Bestand im Terminal. |
bin/TLS-node-doktor.bash & bin/TLS-app-scan.bash |
Bash | Auf der TLS-Gate-Node |
100 % Read-Only (auĂer write beim Deploy) |
PrĂŒft Rechte (root.key 0400/0640), FPM-Pool, DB-Grants, Append-Only-Trigger und vergleicht alle 171 App-Dateien per SHA-256 gegen das Manifest. |
backbone_doktor.sh & ninja.sh |
Bash | Auf jedem Linux-Host (backbone, nullfeld, Raum-Node) |
100 % Read-Only | Akut-Triage bei Load/Angriffen (probe(), clean(), is_self()). FĂŒhrt niemals selbst zerstörerische Befehle aus, sondern liefert Copy-Paste-VorschlĂ€ge fĂŒr die 2. Shell. |
crumb-local (Ansible-Crumbforest-Rust) |
Rust (#local) |
Auf der lokalen Ansible-Node / Maschine im Raum | Read-Only Default (--check --diff) |
PrĂŒft mac-gate (ARP vs. Spiegel), wg-audit (/32-Regel), inbox-verify (wg0-Bind + sync_all() DURABLE_LOCAL) und startet ansible.builtin-Playbooks im Schnecki-Modus. |
tg-tui / ozmai / Bugsy đ |
Rust (OZM_Nullfeld_v1) |
Lokal im Container / Raum / VPN | Lokal / Offline-First | Terminal-Cockpit (im lazydocker-Stil), lokale Raum-CA (Slot 4: 'ca') und lokaler RAG-Baum (Ollama + Qdrant musl auf 127.0.0.1) fĂŒr Kinderfragen zu 0,00 ⏠Cloud-Kosten. |
5. Abnahme-Checkliste des heutigen Live-Tests (rmx01 in tlsgate-vm)
Alle Annahmen aus dem Code-Audit (AUDIT_2026_10_GEMINI.md) und der Prozesskette (ASCII_PROZESSKETTE_WALD_CA.md) sind heute praktisch bewiesen worden:
- [x] Nachbau direkt aus Git (
https://git.crumbforest.org/branko/TLS-NativePHP_v1_gemini_rmx): In einer frischen Systemd-Container-VM (Debian 13 trixie,PHP 8.4.26,MariaDB 11.8.6,nginx) ohne Docker-in-Docker-KrĂŒcken als isolierte Instanzrmx01ausgerollt (38 Ănderungen, alle 10 SelbstprĂŒfungen ok). - [x] Kryptographie & SchlĂŒssel-Trennung (
#schlĂŒssel):root.key(0400 rmx01) versiegelt TOTP (Slot 0), SOAP (Slot 1) und NetBox (Slot 3) mitAES-256-GCM+HKDF-SHA256und tabellengebundener AAD (user_id/group_id/label). - [x] Audit-Patches
AUD-01bisAUD-05live verifiziert: AUD-01: Unsichere/lokale WSDL-URLs (http://127.0.0.1/wsdl) werden vor dem Speichern abgewiesen.AUD-02:soap.fake.testĂŒber HTTPS/TLS synchronisiert 7 Zertifikate inkl.FAKE-OBJ(stdClass-Strukturen invalidationDNSohne 500er-Crash).AUD-04: Atomarer TOTP-Replay-Schutz (WHERE totp_last_step < ?) lĂ€sst jeden 6-stelligen Code pro 30-Sekunden-Fenster exakt einmal zu.AUD-05:auditlog.phpzeigt im Browser deinen echten Login (admin@rmx01.localhostvon172.22.0.1) sowie alle neuen Filter-Kategorien (booking.,catalog.,web.,module.).- [x] Maschinen-Spiegel & MAC-WĂ€chter (
#verbindung):netbox.fake.testerkennt neue/geĂ€nderte Hardware-MACs (changed #101 zero01.test), verschwundene und zurĂŒckgekehrte Knoten (gone/back #103 pi.test) und wehrt fremde Tenants (Szenario C) sowie manipulierte Pagination-Links (Szenario N) kompromisslos ab. - [x] SHA-256-Manifest & Append-Only-Beweis:
TLS-app-scan.bashbestÀtigt171 Dateien unverÀndert; einDELETE FROM audit_logscheitert hart am Datenbank-Trigger.
6. Das Rust-Dummy-Target (crumb-local tapi) & die Passive Instinktbewegung
Inspiration: Crumbforest · Martial â Passive Instinktbewegung (OZM Hamburg)
âWas weiĂ dein Körper, bevor dein Kopf denkt? Sinawali · Redonda · Ginga · Takt · Synkopeâ
â01 Bewege dich immer · 02 Leite weiter · 03 Einmal · laut · wegâ
âTapi-Tapi: BerĂŒhren statt Blockieren. PrĂŒfhand klebt â freie Hand antwortet.â
Wie sieht nun das konkrete Rust-Dummy-Target aus, das im Raum steht und mit unserer laufenden VM (tlsgate-vm / Instanz rmx01) sprechen und rein lesend lernen darf?
Es ist direkt als Subcommand crumb-local tapi in Ansible-Crumbforest-Rust/src/main.rs implementiert und tanzt die 4 Takte der Passiven Instinktbewegung:
+=========================================================================================+
| đ„đŠ RUST DUMMY TARGET (`crumb-local tapi`) <---> đïž VM `tlsgate-vm` (`rmx01`) |
| "Partner als Spiegel, nicht als Feind. PrĂŒfhand klebt â 0 Schreibrechte!" |
+=========================================================================================+
[TAKT 1 · đŠ EULE (Lauschen vor der Antwort)]
PrĂŒft passiv den HTTP-Puls (`rmx01.localhost:18080/login.php` -> 200 OK)
und das SHA-256-Manifest (`TLS-app-scan.bash` -> 171 Dateien unverÀndert).
|
v
[TAKT 2 · đ€ TAPI-TAPI (PrĂŒfhand klebt am SchlĂŒssel â Read-Only Pull)]
Liest aus `rmx01` ausschlieĂlich ĂŒber den lesenden Spiegel (`netbox_cli.php geraete`
+ `events`):
- `#101 zero01.test` (`02:FA:CE:00:01:01`, `10.42.0.21/32`)
- `#102 laptop.test` (`10.42.0.10/32`)
- `#103 pi.test` (`02:FA:CE:00:01:03`)
|
v
[TAKT 3 · đ€đ€ SINAWALI DOUBLE (Partner als Spiegel -> DURABLE_LOCAL)]
Schreibt den gelesenen Spiegel lokal nach `mirror/rmx01_live_mirror.json`
und zwingt ihn mit `File::sync_all()` auf die Platte (Tokio-Kanon).
|
v
[TAKT 4 · đŸ DREI PRINZIPIEN DER PASSIVEN INSTINKTBEWEGUNG]
+-- 01 BEWEGE DICH IMMER : Kein blinder Alt-Cache; jeder Takt prĂŒft den frischen Spiegel.
+-- 02 LEITE WEITER : Bekannte MAC (`02:FA:CE:00:01:01` = `zero01.test`) wird ohne
| Widerstand an Raum-CA & lokalen Baum (Qdrant/Ollama) geleitet.
+-- 03 EINMAL · LAUT · WEG: Fremde/ausgetauschte MAC (`02:FA:CE:00:01:99`) ->
Kein Kampf am offenen Port! 1x lauter Alarm + sofort Exit 2!
Live-Protokoll des Rust-Dummy-Targets gegen die laufende rmx01-VM
Lauf A â Bekannte MAC (02:FA:CE:00:01:01 $\rightarrow$ Prinzip 02: Leite weiter):
$ cargo run -- tapi --vm tlsgate-vm --instance rmx01 --port 18080 --probe-mac 02:FA:CE:00:01:01
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
đ„đŠ crumb-local tapi · RUST DUMMY TARGET (Passive Instinktbewegung)
Ziel-VM: tlsgate-vm · Instanz: rmx01 · Modus: 100% READ-ONLY
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
[TAKT 1 · đŠ EULE] Lauschen vor der Antwort (Puls & Integritaet der VM)
â
HTTP-Puls auf rmx01.localhost:18080/login.php -> 200 OK
â
SHA-256 App-Manifest : unveraendert: 171 Dateien wie im Manifest (app=/home/rmx01/app geschrieben=2026-10-19T18:50:24Z build=commit=3fe364a5b0364e3cae7f0b48d5a410e9b6384bca dirty=0 )
[TAKT 2 · đ€ TAPI-TAPI] Pruefhand klebt â Lese Spiegel aus rmx01 (0 Schreibrechte)
đȘ Gelesen aus rmx01: laptop.test status=active site=roaming mac=- wg_ip=10.42.0.10/32
đȘ Gelesen aus rmx01: pi.test status=active site=baumhaus mac=02:FA:CE:00:01:03 wg_ip=-
đȘ Gelesen aus rmx01: zero01.test status=active site=baumhaus mac=02:FA:CE:00:01:01 wg_ip=10.42.0.21/32
đ Letzte Spiegel-Bewegungen (`netbox_events` in rmx01):
2026-10-19 18:47:04 baseline #- - {"rows":3}
2026-10-19 18:47:04 changed #101 zero01.test {"macs":[["02:FA:CE:00:01:01"],["02:FA:CE:00:01:99"]]}
2026-10-19 18:47:04 gone #103 pi.test
2026-10-19 18:47:04 changed #101 zero01.test {"macs":[["02:FA:CE:00:01:99"],["02:FA:CE:00:01:01"]]}
2026-10-19 18:47:04 back #103 pi.test
[TAKT 3 · đ€đ€ SINAWALI DOUBLE] Partner als Spiegel â Speichere lokal mit sync_all()
â
DURABLE_LOCAL Spiegel geschrieben: mirror/rmx01_live_mirror.json (3 Geraete)
[TAKT 4 · đŸ PASSIVE INSTINKTBEWEGUNG] 01 Bewege dich · 02 Leite weiter · 03 Einmal laut weg
đą [01 BEWEGE DICH IMMER] Spiegel ist frisch aus `rmx01` synchronisiert.
đ [02 LEITE WEITER] MAC 02:FA:CE:00:01:01 gehoert zu `zero01.test` -> Energie fliesst weiter an Raum-CA & lokalen Baum (Qdrant/Ollama)!
đČ Raum-Tuer fuer `zero01.test` offen (Read-Only verifiziert).
Lauf B â Fremde/ausgetauschte MAC (02:FA:CE:00:01:99 $\rightarrow$ Prinzip 03: Einmal · laut · weg):
$ cargo run -- tapi --vm tlsgate-vm --instance rmx01 --port 18080 --probe-mac 02:FA:CE:00:01:99
...
[TAKT 4 · đŸ PASSIVE INSTINKTBEWEGUNG] 01 Bewege dich · 02 Leite weiter · 03 Einmal laut weg
đš [03 EINMAL · LAUT · WEG] MAC 02:FA:CE:00:01:99 ist im Spiegel von `rmx01` UNBEKANNT (oder ausgetauscht)!
-> Kein Kampf am offenen Port. 1x lauter Alarm an Bugsy/Monitoring -> Verbindung sofort gekappt!
(Exit-Code 2)
7. Merksatz fĂŒr das Handbuch & die Crew
Im Rechenzentrum steht der Notar (PHP, Apache, MySQL â BSI/NIS2-klar).
Im Backup schlĂ€ft der alte Wald (Borgmatic â verschlĂŒsselt, nur lesbar).
Durch die Wurzel flieĂt nur ein lesender Spiegel (HTTPS / WireGuard /32).
Und im Raum an der schweren TĂŒr wacht die Maschine im Terminal (Rust & Bash):
PrĂŒfhand klebt (Tapi-Tapi), bekannte MAC flieĂt weiter, fremde MAC: einmal · laut · weg.
#verbindung #schlĂŒssel #local #oldschool #crewlove đČđŠđđïž