docker_vm â RZ-Setup im Container durchspielen
Ziel: ein Container, der sich wie die RZ-Node verhÀlt (Debian Trixie, nginx, MariaDB, php-fpm), mit mehreren Betriebs-Usern, in dem
native_php und native_bash_cli so laufen wie dort â und in dem sich der 500er und der fehlende QR nachstellen lassen, bevor wieder
auf der Node getestet wird. Nur Mockdaten, kein echter Registrar, keine CA.
Stand: P0 bis P6 abgenommen (1.10.). Quelle der Software: ../native_php, ../native_bash_cli (unverÀndert, nur kopiert).
1. Was geprĂŒft ist (Trixie-Image, 2026-10-01, aarch64)
| Paket | Version in Trixie |
|---|---|
php8.4-fpm, -cli, -soap, -mysql, -sqlite3, -mbstring, -xml |
8.4.26 |
php8.5-fpm |
nicht im Archiv (nur ĂŒber Fremd-Repo) |
mariadb-server |
11.8.6 |
nginx |
1.26.3 |
- Entscheidung: PHP 8.4 aus dem Debian-Archiv. Der Code lÀuft laut
composer.jsonab 8.1 und ist unter 8.2 und 8.5 grĂŒn; 8.4 ist die echte Zielversion und wird in P3 geprĂŒft. php8.4-clibringtsodium,openssl,PDO,ctypemit.mbstringfehlt in einer Minimalinstallation, der Code ruft abermb_strlen,mb_str_split
(Auth.php:307,314) undmb_substr(SslHandler.php:25) auf, undcomposer.jsonfĂŒhrtext-mbstringnicht. Auf einer Node ohnephp-mbstringgĂ€be
das einen fatalen Fehler = HTTP 500 beim Passwortwechsel. Hypothese, nicht belegt â der 500er im View kann trotzdem etwas anderes sein. P3 stellt es nach.- Docker Desktop lĂ€uft hier auf aarch64, die RZ-Node ist vermutlich x86_64. Im Code ist nichts architekturabhĂ€ngig; das Image wird nicht an
arm64gebunden.
2. Aufbau: ein Container, drei Dienste
docker_vm/
Dockerfile debian:trixie + Pakete, COPY der beiden native_*-Verzeichnisse nach /opt/tlsgate-src (Vorlage, nicht lauffÀhig)
compose.yml ein Dienst, Port 18080 -> 80, benannte Volumes: /var/lib/mysql, /home
provision/
instance.sh <name> legt EINE Instanz an (idempotent), siehe 4.
templates/ pool.conf, vhost.conf, mariadb-grants.sql mit Platzhaltern
fake-soap/ Fake-Registrar (nur im Container, 127.0.0.1:443): WSDL, Szenarien je Order-Nummer, Fake-CA
tests/ run.sh = P2, p3.sh = P3, lib.sh = gemeinsame Hilfen (von auĂen per curl, nach innen per docker exec)
PLAN.md README.md
Init-System (Entscheidung nach einem kleinen Spike, P0): Ziel ist systemd als PID 1, weil die RZ-Node so lÀuft (systemctl reload php8.4-fpm, journalctl).
systemd im Container braucht unter Docker Desktop --cgroupns=host bzw. --tmpfs /run. Ergebnis P0: systemd lĂ€uft. Nötig ist cgroup: host mit /sys/fs/cgroup rw und tmpfs auf /run, /run/lock, /tmp â ohne privileged
(--cgroupns=private allein bricht ohne Ausgabe mit Exit 255 ab; privileged startet zwar, meldet aber degraded). Klappt es auf einem anderen Host nicht, fÀllt P0 auf einen schlanken
Supervisor (mariadbd, php-fpm8.4 -F, nginx -g 'daemon off;') zurĂŒck. Das Ă€ndert nichts an Pools, Vhosts und Rechten â nur systemctl fehlt dann im Test.
3. Benutzer und Verzeichnisse
| User | Rolle |
|---|---|
root |
Betrieb: Pakete, Dienste, instance.sh, migrate als root-Pfad des Guards |
ozm01 |
Hauptinstanz: wird zuerst und vollstÀndig getestet (Web, CLI, Bash-Dashboard) |
ozm02 |
zweite, gleich gebaute Instanz; nur fĂŒr Isolation, Logs, Schreibrechte (4.3). Keine CA nötig |
Je Instanz, alles unter dem Heimverzeichnis (/home/<name>):
app/ native_php (Webroot = app/public, src/ bin/ database/ templates/ davor unerreichbar)
bin/ native_bash_cli (dashboard.sh, soap_cli.php, âŠ), spĂ€ter SSH-Bash
state/ 0700, Besitzer <name>: root.key (0400), Dateien, keine SQLite (MariaDB)
logs/ php-fpm error + slow, nginx access/error der Instanz, 0750 <name>:adm
- php-fpm-Pool je Instanz: eigener User/Gruppe, Socket
/run/php/<name>.sock(<name>:www-data 0660),clear_env = yes, Konfiguration (TLS_GATE_STATE_DIR,
TLSGATE_DB_*) nur alsenv[...]in der Pool-Datei (root-lesbar),open_basediraufapp/+state/+/tmp, eigenererror_loginlogs/. disable_functionsim Pool ist Pflicht (docs/SECURITY.md, AUD-33): Ein Web-User, dem alles gehört, ist auch CLI-Operator des Guards. Ohneexec,shell_exec,
system,passthru,proc_open,popenim Pool kann ein Webshell-Fundbin/user_cli.phpaufrufen. P3 prĂŒft das.- nginx: ein
serverje Instanz,server_name <name>.localhost, Rootapp/public,fastcgi_passauf den Socket der Instanz. Im Test per
curl --resolve ozm01.localhost:18080:127.0.0.1. TLS gehört nicht zu diesem Plan (die Vorlagedeploy/nginx.conf.examplebleibt Referenz).
3a. Abweichungen vom ersten Entwurf (P1)
- nginx-Logs liegen doch in
/home/<name>/logs/, aber alswww-data:<name> 0640vorab angelegt: nginx öffnet sie als root, so kann die Instanz sie lesen, die andere nicht.php-error.loggehört der Instanz. - Drittes Volume
/root/.provision(Zugangsdaten je Instanz). Ohne es passten nachcompose downdie DB-Passwörter inmysqlnicht mehr zu den Dateien. Benutzer und UIDs sind nicht im Volume:instance.shlegt sie mit fester UID neu an (ozm01= 2001,ozm02= 2002). - Immer ein Pool vorhanden: php-fpm startet ohne Pool nicht, systemd meldete
degraded. Das ĂŒbernimmt der Poolfakesoapdes Fake-Registrars (vorher ein Leerlauf-Poolidle). TLSGATE_COOKIE_SECURE=0im Pool: die Testinstanz hat kein TLS, der__Host--Cookie der App braucht https. Im Betrieb entfernen./home/<name>ist710 <name>:www-data: nginx darf hinein, eine andere Instanz nicht.app/undbin/gehören root und sind fĂŒr den Web-User nicht schreibbar.disable_functionsim Pool:exec, passthru, shell_exec, system, proc_open, popen, pcntl_exec, pcntl_fork, dl, putenv, mailâ der Web-Code nutzt keine davon (geprĂŒft pergrep).
4. Datenbank â die Entscheidung
Frage war: eine DB fĂŒr alle, oder eine je User? Antwort: ein MariaDB-Server, ein Schema je Instanz, kein gemeinsames Schema fĂŒr Mandantendaten.
BegrĂŒndung aus dem Code, nicht aus Geschmack:
- Jede Instanz hat einen eigenen WurzelschlĂŒssel (state/root.key). ZugĂ€nge (soap_credentials) und TOTP-Secrets sind damit versiegelt und an <group_id>|<label>
gebunden. Ein gemeinsames Schema wĂŒrde Zeilen enthalten, die die jeweils andere Instanz nicht öffnen kann â das ist beabsichtigt, aber dann ist es kein gemeinsamer Bestand.
- Mandanten (Gruppen, Reseller) liegen schon in der Instanz (groups, users). âEin Reseller mit Schreibrechtenâ ist eine Zeile in groups, kein zweiter DB-User.
- âEine DB fĂŒr alleâ gilt deshalb fĂŒr das Betriebsmittel: ein Prozess, ein Backup, ein Monitoring â nicht fĂŒr das Schema.
Je Instanz zwei DB-Benutzer (schlieĂt den offenen Punkt âDML-only-Grantsâ):
| DB-User | Rechte | Wer nutzt ihn |
|---|---|---|
<name>_ddl |
alles auf <name> (CREATE, ALTER, TRIGGER, âŠ) |
nur bin/user_cli.php migrate, Passwort nur im Env des CLI-Aufrufs |
<name>_app |
SELECT, INSERT, UPDATE, DELETE auf <name>.* |
der php-fpm-Pool |
Der Web-Prozess kann dadurch keine Tabelle Àndern und keine Trigger anfassen (die Audit-Tabellen sind per Trigger append-only; unter MariaDB 11.8 ist das neu zu belegen, siehe 7).
Gemeinsam wird erst etwas, wenn echte Mehr-Node-Logs gebraucht werden: ein eigenes Schema ozm_logs mit INSERT-only fĂŒr jede Instanz. Das ist ein Feature von
native_php, nicht von diesem Container, und bleibt hier ungebaut. ozm02 reicht aber, um die Frage vorher greifbar zu machen: Welche Logs der zweiten Instanz sieht die erste (soll: keine)?
4.3 Was ozm02 konkret prĂŒft
- Isolation:
ozm01kann wederozm02/state/, noch dessen Socket, noch dessen Schema lesen (Datei-, Socket- und DB-Rechte). - Der Guard:
ozm02darfbin/user_cli.phpauf seiner Instanz als Besitzer ausfĂŒhren, auf der vonozm01nicht (Exit 3). - Logs: Audit, php-fpm-, nginx-Logs liegen je Instanz getrennt; ein Fehler in
ozm02taucht nicht in den Logs vonozm01auf. - Schreibrechte âResellerâ: eine Gruppe vom Typ Reseller in
ozm02kann (noch) kein SSL bestellen (Auth::sslAllowed()), siehedocs/SECURITY.md; Test prĂŒft, dass das so bleibt.
5. Phasen mit Abnahme
| Phase | Inhalt | Abgenommen, wenn |
|---|---|---|
| P0 Spike â erledigt | Image mit Paketen, Init-System (systemd, sonst Supervisor), MariaDB, nginx, php-fpm starten | curl localhost:18080 antwortet (zuerst 8080, dort lag aber der Dev-Server), mariadb -e 'select 1' lĂ€uft, drei Dienste sind oben. Belegt: systemctl is-system-running = running, keine fehlgeschlagene Unit; /healthz und /php.json (PHP 8.4.26, fpm-fcgi; sodium, openssl, pdo_mysql, pdo_sqlite, soap, mbstring, ctype geladen); MariaDB 11.8.6; ein Neustart (compose restart) behĂ€lt die Datenbank |
| P1 Instanz â erledigt | instance.sh ozm01: User, Verzeichnisse, Schema + zwei DB-User, Pool, Vhost, migrate, erster Admin, Enroll-Code |
zweiter Lauf Ă€ndert nichts (idempotent); migrate meldet Version aktuell; Pool und Vhost laden. Belegt: Lauf 1 frisch = 34 Ănderungen, alle 8 SelbstprĂŒfungen ok; Lauf 2 = âkeine Ănderungâ; nach compose down + up (Volumes bleiben) Ă€ndert Lauf 3 nur Benutzer (gleiche uid 2001), Pool und Vhost, nicht DB, Secrets, Gruppe, Admin, root.key |
| P2 ozm01 komplett â erledigt | Web: Login, Enrollment (QR), Konsole mit Mockdaten, Benutzer, Audit, ZugĂ€nge. Bash: native_bash_cli unter /home/ozm01/bin |
Login-Ablauf per curl mit Cookie-Jar gelingt; Konsole liefert 200; dashboard.sh zeigt farbige geparste Liste. Belegt: docker_vm/tests/run.sh = 52 PrĂŒfungen grĂŒn (wiederholbar, auch auf frischen Volumes): Enrollment mit QR (SVG, Secret, otpauth-URI), MFA, Konsole mit den drei Mock-Bestellungen, getOrder, users/auditlog/credentials, Abmelden, zweiter Login ohne QR, Fehlversuch im Audit, src/, bin/, state/, .git nicht ausgeliefert, php- und nginx-Error-Log leer, kein 5xx; Bash-Dashboard als ozm01 (Tabelle, Farben, stats, details) |
| P3 Fehler nachstellen â erledigt | (a) 500 im View mit Listenwerten, (b) Node ohne php8.4-mbstring, (c) QR nach dem Enroll, (d) TLSGATE_MOCK an/aus |
jeder Fall ist reproduziert und im error_log der Instanz sichtbar; Ergebnis steht in README.md. Belegt: docker_vm/tests/p3.sh = 43 PrĂŒfungen grĂŒn (auch auf frischen Volumes): (a) Detailansicht mit Text, nil, Liste, Struktur, verschachtelt; der alte View.php aus v3.0.1 liefert mit validationDNS als Struktur HTTP 500 und im Log âstdClass could not be converted to stringâ â der RZ-Fehler ist nachgestellt; (b) ohne php8.4-mbstring; (c) QR in P2 belegt; (d) Mock an/aus und fehlender Zugang |
| P4 ozm02 â erledigt | instance.sh ozm02, PrĂŒfungen aus 4.3 |
alle vier Punkte grĂŒn, Gegenprobe (ozm01 liest ozm02) schlĂ€gt wie vorgesehen fehl. Belegt: docker_vm/tests/p4.sh = 52 PrĂŒfungen grĂŒn (wiederholbar), P2 (52) und P3 (43) unverĂ€ndert grĂŒn. Dazu neu: ssh nur mit SchlĂŒssel (siehe 5c) |
| P5 Betrieb â erledigt | Drills: root.key auf 0644, DB gestoppt/falsches DB-Passwort, Besitz von state/ gemischt, Guard aus; bin/TLS-doktor.bash erkennt sie |
der Doktor meldet jeden Fall mit Klartext und Exit > 0, im Sollstand Exit 0. Belegt: docker_vm/tests/p5.sh = 22 PrĂŒfungen grĂŒn. Der Doktor kennt jetzt beide Treiber (TLSGATE_DB_DRIVER=sqlite|mysql); auf der VM ist SQLite abgewĂ€hlt, im Offline-Dev bleibt es. P6 (Pool-Check): der Doktor liest den wirksamen Pool (php-fpm -tt) des Webserver-Benutzers und prĂŒft disable_functions, clear_env, open_basedir, display_errors; p5.sh Abschnitt 6, 31 PrĂŒfungen insgesamt |
tests/run.sh fĂŒhrt P1 bis P5 maschinenlesbar aus (gruen: N rot: M), damit ein Stand reproduzierbar ist. Die Suites aus native_php/tests/ laufen zusĂ€tzlich
im Container als ozm01 gegen MariaDB (TLSGATE_DB_DRIVER=mysql) mit PHP 8.4.
5a. Befunde aus P2
- Echter Fehler, behoben:
UPDATE ⊠RETURNINGinAuth::accountFail()ist SQLite-Syntax. Unter MariaDB lieferte jeder Fehlversuch bei einem bestehenden Konto (falsches Passwort, falscher TOTP-Code) einenPDOException= HTTP 500; nur unbekannte Konten kamen durch. Gefunden, weil der Test einen falschen Code schickt. Behoben inmainundnative_php(UPDATE, dannSELECT);tests/test_sql_portable.shverhindert die RĂŒckkehr (und schlĂ€gt auf dem alten Code an). Betrifft jede Installation mitTLSGATE_DB_DRIVER=mysql. - Port-Falle: Auf dem Host lauscht oft
serve.shauf127.0.0.1:8080und ĂŒberdeckt das Docker-Mapping. Der Container nutzt deshalb 18080, und der Test prĂŒft zuerst, dass auf dem Port wirklich nginx antwortet. - QR nur beim ersten Mal (Absicht,
Auth::enrollmentData()): belegt, der zweite Login zeigt den Code-Schritt ohne QR und ohne Secret. Ein neuer QR geht nur ĂŒberuser reset-mfa(dann zeigt der nĂ€chste Login ihn wieder). Seit v3.1.0 geht ein neuer QR auch angemeldet ĂŒbermfa.php(Passwort, QR, erster Code; das alte Secret gilt bis dahin), Alltagsbefehle: HANDBUCH §4. - Abmelden ist nur POST mit CSRF-Token (GET â 405). Ein TOTP-Code gilt nur einmal (Replay-Sperre): zwei Logins im selben 30-s-Fenster scheitern, der Test wartet aufs nĂ€chste Fenster.
- Bash-Dashboard: ohne erreichbares SOAP fĂ€llt es auf den Mock zurĂŒck. Mit installiertem
php-soapversucht es dafĂŒr zuerst die echte WSDL (BWA_SOAP_WSDL-Standard) mit Dummy-Zugang; der Test setzt deshalb eine unerreichbare WSDL, damit nichts den echten Registrar erreicht.
5b. Befunde aus P3 (Fake-Registrar)
Der Fake (docker_vm/fake-soap, WSDL im Stil des echten Dienstes, rpc/encoded) liefert je Order-Nummer eine andere Datenform: FAKE-1 Text und Chain, FAKE-NOCHAIN, FAKE-NIL, FAKE-OBJ (Struktur), FAKE-LIST, FAKE-NEST, FAKE-STRUCT, FAKE-ERR (2303), FAKE-FAULT. Bis v3.1.0 durfte die Instanz per TLSGATE_SOAP_HOSTS nur dorthin (instance.sh ozm01 fake); der Modus ist abgeschafft, weil er das Anlegen eines echten Zugangs verhinderte. Den Fake-Zugang legt der Test selbst an (cred add).
1. Der 500 der Node ist nachgestellt: eine SOAP-Struktur (stdClass) in validationDNS wirft im alten e() Error: Object of class stdClass could not be converted to string, das <dt> ist schon ausgegeben. Mit Listen allein (v3.0.1) lief es. Behoben in v3.0.2.
2. Weiterer echter Fehler, behoben: 21 Stellen in den Templates castelten selbst mit (string) vor ->e() und umgingen damit den Fix. Eine Struktur in domain, status oder reseller gab weiterhin einen 500 (result_details.php:24). Die Casts sind weg, tests/test_view.sh verbietet sie.
3. Ohne php-mbstring fiel die ganze Detailansicht aus, nicht nur der Fehlerpfad: SslController.php:86 ruft mb_substr im Normalfall, Auth.php mb_strlen/mb_str_split beim Passwortwechsel. Folge: fataler Fehler mitten in der Seite (HTTP 500), composer.json und Doktor kannten die AbhĂ€ngigkeit nicht. Jetzt meldet bootstrap.php fehlendes mbstring/sodium sofort mit 503 und Paketnamen (Log + Antwort), composer.json verlangt ext-mbstring, der Doktor prĂŒft es.
4. Kein stiller Mock: ohne Zugang und ohne TLSGATE_MOCK=1 zeigt die Konsole âSOAP nicht verfĂŒgbarâ, nie Beispieldaten; mit mock sind sie als Mock gekennzeichnet.
5. Falle im Test, nicht im Code: opcache prĂŒft Zeitstempel nur alle 2 s; wer View.php austauscht und sofort anfragt, bekommt noch den alten Stand. Der Test wartet drei Sekunden.
5c. Befunde und Entscheidungen aus P4
- ssh:
openssh-serverim Image, Port 2222. sshd: kein root, kein Passwort, kein Tunnel/Forwarding,AllowGroups ssh-instances.instance.shnimmt die Instanz in die Gruppe auf und setztauthorized_keys(Besitzer root, der User kann seine SchlĂŒssel nicht Ă€ndern) aus/root/.provision/ssh/<name>.pub; ohne diese Datei kein Zugang. Die Login-Shell kenntdashboard.shim PATH und fragt nur den Fake-Registrar. SchlĂŒssel sind Wegwerf-TestschlĂŒssel (docker_vm/.demo-key, gitignored). - Fehler im Image, behoben: Mein AufrĂ€umen der systemd-Units entfernte
systemd-user-sessions;/run/nologinblieb stehen, PAM wies jeden ssh-Login ab (âAccess denied by PAM account configurationâ). Jetzt aktiviert. - Isolation belegt (je Richtung): fremdes Home,
root.key, Logs, php-fpm-Socket und/root/.provisionsind nicht les-/erreichbar;ozm01_appöffnetozm02nicht und umgekehrt; verschiedeneroot.key; verschiedene Benutzerdaten (Admin von ozm01 kann sich am Vhost von ozm02 nicht anmelden). - Guard:
ozm02darfuser_cli.phpauf der eigenen Instanz; mit dem State-Pfad vonozm01Exit 3, keine Daten. - Reseller: Admin-Rolle in Reseller-Gruppen ist verboten (nur
group_admin); die Konsole zeigt âNoch nicht freigeschaltetâ, ein POSTgetOrderliefert nichts, beim Registrar kommt kein Aufruf an. - Beobachtet, kein Fehler: Die App sperrt eine IP nach 10 Fehlversuchen in 15 min (
Auth::IP_MAX_FAILS); der Test setzt die ZĂ€hler vor dem Abschnitt zurĂŒck.group addmit bereits vorhandenem Slug endet mit einemPDOException-Stacktrace statt einer Meldung (kleiner Schönheitsfehler; behoben in v3.2.1). - Fund im Bash-Dashboard, behoben: Gegen den (Fake-)Live-SOAP zeigte
dashboard.shin âExpire (Rest)â und âGĂŒltig ab/bisâ rohe Unix-Zeitstempel ohne Resttage und Farbe:days_left()riefdate -d "$exp", das nur ISO-Datum versteht; die API liefert laut SOAP-Doku Unix-Sekunden (0= kein Datum), nur der Mock ISO. Neuto_epoch/fmt_ts(Unix, ISO, openssl-Format; GNU- und BSD-date,LC_ALL=CfĂŒr Monatsnamen), in Liste, Details und Cross-Check eingesetzt. Innative_bash_cli/(einzige Abweichung vom Stand3dec8a8, siehe dessen README) und inbin/dashboard.sh;test_dates.sh(16 PrĂŒfungen),p4.shprĂŒft es per ssh. - Image, zwei weitere Funde:
systemd-user-sessionsstartet im Container nicht von selbst (Boot-Links entfernt) â/run/nologinblockiert ssh; jetzt Drop-inssh.service.d(Wants=/After=).calls.logdes Fake-Registrars musswww-datagehören, sonst schreibt der Dienst still nichts. P2 ist jetzt unabhĂ€ngig vom Zustand (deaktiviert den Zugangfake). - Hinweis: Ein Neubau des Images erzeugt neue ssh-HostschlĂŒssel; bekannte EintrĂ€ge dann mit
ssh-keygen -R "[127.0.0.1]:2222"entfernen.
6. Nicht Teil dieses Plans
Rust, Node-CA, echte SOAP-Aufrufe, TLS-Terminierung, ein gemeinsames Mandantenschema, SSH-Zugang fĂŒr die Instanzen (steht langfristig an; der Aufbau mit /home/<name>/bin
ist dafĂŒr vorbereitet), Entfernen der Bestelltabellen aus dem Schema.
7. Offene Punkte und Risiken
- systemd im Container kann unter Docker Desktop scheitern â Supervisor-Fallback (2).
- MariaDB statt MySQL 8: Die Trigger der Audit-Tabellen (append-only) und die CHECK-PrĂŒfung des Migrators sind bisher nur gegen ein MariaDB-Docker auf
:3307belegt. In 11.8.6 neu prĂŒfen. - Der echte 500er der Node fehlt uns. Ohne
error_logder Node bleibt P3 eine Nachstellung. Wenn möglich, vorher von der Node holen:journalctl -u php8.4-fpm,/var/log/nginx/error.log,
php -v && php -mundsudo -u <user> php bin/TLS-doktor.bash. Das ist die schnellste AbkĂŒrzung und kostet keinen Bau. - QR im Browser ist nur wĂ€hrend der Einrichtung vorgesehen.
Auth::enrollmentData()liefert Secret undotpauth-URI nur, solange der User eine offene Anmeldesitzung hat
undtotp_enabled = 0. Wer vorher peruser_cli.php enroll(Terminal-QR) eingerichtet hat oder schon einmal angemeldet war, sieht im Browser nie wieder einen QR; ein neuer kommt dann
nur ĂŒberuser_cli.php(Code neu erzeugen). Das passt zu deiner Beobachtung (ânach dem Enroll kam nichts mehrâ) und ist laut Code Absicht, kein Fehler â P3(c) belegt es im Container.
Falls im RZ vor dem ersten Login schon kein QR kam, ist das ein anderer Fehler (z. B.Qr::svgodermbstring). ext-mbstringgehört incomposer.jsonund in den Doktor, sobald P3(b) bestĂ€tigt ist (Ănderung innative_php, nicht im SOT).- Zugangsdaten im Pool stehen im Klartext in der Pool-Datei (root-lesbar). FĂŒr den Test ist das gewollt; fĂŒr den Betrieb ist
LoadCredentialbzw. ein Secret-Mount der nÀchste Schritt.