Demomodus für Hoster
Diese Seite ist für die Systemadministratoren eines Hosters, der eine öffentliche Demonstrations-Website von Exponential betreibt, eine,
deren Anmeldung als Administrator veröffentlicht ist. Der Demomodus wird durch die Umgebungsvariable EXP_DEMO_MODE=1 eingeschaltet.
Solange er an ist, kann niemand das Passwort eines Administrators ändern oder zurücksetzen (damit der nächste Besucher sich weiterhin
anmelden kann), die Installer akzeptieren das veröffentlichte Demo-Passwort, und die Administration zeigt ein Banner Demo-Modus.
Warnung: Der Demomodus sagt der Welt, dass das Administratorpasswort bekannt ist. Setzen Sie ihn nur für eine Website, deren Inhalte, Benutzer und Einstellungen alle wegwerfbar sind, mit eigenem Systembenutzer, eigenem Pool und eigener Datenbank, und nie für einen geteilten Pool, eine serverweite Umgebung oder eine Vorlage, aus der andere Websites gebaut werden.
Inhalt
- Die Regeln der Variablen
- Sie für jeden Server setzen
- Eine Demo installieren
- Sie prüfen
- Sie von der Produktion fernhalten
- Risiken, die Sie dem Eigentümer der Demo nennen
- Verwandte Seiten
Die Regeln der Variablen
- Nur Umgebung. Keine INI-Einstellung, kein Anfrageparameter und keine Seite der Administration kann ihn einschalten, sodass eine Einstellungsdatei oder eine Datenbank, die von einer Demo kopiert wird, ihn nicht auf eine andere Website trägt.
- Nur der genaue Wert
1.0,true,yes,onund ein leerer Wert lassen ihn aus. - Pro Prozess. PHP liest ihn bei jedem Aufruf zuerst mit
getenv(), dann aus$_SERVER. Jeder Prozess, der die Demo ausliefert oder pflegt, braucht ihn: das PHP des Webservers, Exponential Velocity, wenn er die Website ausliefert, Cronjobs und Konsolenbefehle. Ein Prozess ohne ihn läuft mit ausgeschaltetem Demomodus.
Sie für jeden Server setzen
| Wo PHP läuft | Wie Sie sie setzen, nur für die Demo |
|---|---|
| PHP-FPM | in der eigenen Pool-Datei der Demo: env[EXP_DEMO_MODE] = 1, dann den Master des Pools neu laden |
| Apache (mod_php oder PHP-FPM über mod_proxy_fcgi) | im virtuellen Host der Demo: SetEnv EXP_DEMO_MODE 1 |
| LiteSpeed / OpenLiteSpeed (lsphp) | im virtuellen Host der Demo oder in der Umgebung der externen Anwendung: EXP_DEMO_MODE=1 |
| Exponential Velocity | export EXP_DEMO_MODE=1 in den Site-envvars der Demo, /etc/vc/sites-available/<site>.envvars (<site> zeigt ./console exp:velocity layout), die exp:velocity start nur für den Server dieser Installation liest; oder die Umgebung des Prozesses, der den Server dieser Installation startet: Environment=EXP_DEMO_MODE=1 in seiner eigenen systemd-Unit oder einem Drop-in. Die Worker erben sie. Nie in der gemeinsamen /etc/vc/envvars |
| FrankenPHP oder ein anderer Anwendungsserver | die Umgebung des Serverprozesses |
| Cron | eine Zeile EXP_DEMO_MODE=1 oben in der Crontab des Benutzers der Demo |
| Konsole | export EXP_DEMO_MODE=1 im Shell-Profil des Benutzers der Demo oder vor jedem Befehl |
| Container | ENV EXP_DEMO_MODE=1 im Image der Demo oder -e EXP_DEMO_MODE=1 / environment: nur für den Dienst der Demo |
Neustarts von Velocity. exp:velocity restart und exp:velocity deploy lesen die Site-envvars der Demo bei jedem Start, gleich
aus welcher Shell; die Variable dort überdauert also Neustarts. Ein Neustart mit dem eigenen qbixctl der Engine liest sie nicht: Der
Demomodus ist dann bis zum nächsten exp:velocity restart aus. Die gemeinsame /etc/vc/envvars liest der Server jeder Installation
auf dem Host, sodass der Demomodus dort auch Produktions-Websites erreichen würde: exp:velocity start übergibt EXP_DEMO_MODE von dort
nie, und ein Worker lehnt einen solchen Wert ab und schreibt einmal pro Prozess eine Zeile demo/refused in var/log/security.log. Eine
Demo, die die Zeile aus einem früheren Release noch in /etc/vc/envvars hat, läuft nach dem Neustart des Updates mit ausgeschaltetem
Demomodus, bis die Zeile in die Site-envvars verschoben ist
(Velocity: nur eine Installation).
Eine Demo installieren
Setzen Sie die Variable auch für die Installation. Die Installer (Setup-Assistent, Kickstarter, exp:install) akzeptieren dann das
veröffentlichte Administratorpasswort, obwohl es ein bekanntes Wort und kürzer als MinPasswordLength ist, statt es durch ein zufälliges
zu ersetzen:
EXP_DEMO_MODE=1 ./console exp:install --apply --db=sqlite --password='<the published demo password>' ...Jedes nicht leere Passwort funktioniert, also sowohl publish (sieben Zeichen) als auch publishing; ein leeres wird weiterhin
abgelehnt. Nur das Administratorpasswort der neuen Installation wird gelockert: Jedes andere Konto behält [UserSettings] MinPasswordLength
(10 in der Auslieferung) und die Liste bekannter Passwörter. Setzen Sie das Passwort nach der Installation nicht mit
exp:resetuserpassword zurück: Im Demomodus wird das verweigert, und es ist nicht mehr nötig.
Eine Demo, die nach Zeitplan neu aufgebaut wird (alle paar Stunden, aus dem aktuellen Code), tut das in ihrem Skript für den Aufbau: mit
der Variablen installieren, die neue Website einsetzen, die Variable in der PHP-Umgebung und der Crontab der laufenden Website behalten.
Das Skript darf die Variable nicht in config.php, settings/ oder irgendetwas schreiben, das auf andere Websites kopiert wird.
Sie prüfen
- Die Administration zeigt auf jeder Seite das Banner Demo-Modus.
grep 'demo/mode' var/log/security.loglistet jeden Prozess auf, der damit gestartet ist (eine Zeile pro Prozess, mit seiner PID und SAPI); Setup > Logdateien gruppiert sie alsdemo/mode.- Das Audit hat ein Ereignis
system.demo.modepro Prozess (immer festgehalten). - Ein Konsolenbefehl gibt
Demo mode is on (EXP_DEMO_MODE=1) ...auf der Standardfehlerausgabe aus.
Sie von der Produktion fernhalten
- Setzen Sie sie nie serverweit (
/etc/environment, ein globalesSetEnv, der Standard-Pool, ein Basis-Image) oder in einer Vorlage für die Bereitstellung. - Lösen Sie darauf einen Alarm aus: Eine Zeile
demo/modeinsecurity.logeiner Produktions-Website oder ein Audit-Ereignissystem.demo.modebedeutet, dass die Variable einen Prozess erreicht hat, den sie nicht hätte erreichen dürfen. - Nehmen Sie sie in die Sicherheitsprüfung auf:
grep -r EXP_DEMO_MODEüber die PHP-FPM-Pools, die virtuellen Hosts, die Dienst-Units und die Crontabs von Produktionsmaschinen darf nichts finden.
Risiken, die Sie dem Eigentümer der Demo nennen
- Der Demomodus schützt nur Administratorpasswörter. Ein als Administrator angemeldeter Besucher kann weiterhin Konten anlegen, Rollen und Einstellungen ändern, Pakete installieren und Dateien hochladen: Bauen Sie die Demo nach Zeitplan neu auf.
- Halten Sie echte Daten, echte Mailadressen und Geheimnisse aus der Demo heraus, und schicken Sie ihre Mail in eine Datei oder eine Senke.
- Andere veröffentlichte Anmeldungen (ein Redakteur, ein Mitglied) sind nicht geschützt.
- Wenn die Variable verloren geht (ein Neustart aus einer Shell ohne sie), ist der Demomodus aus, ohne ein anderes Zeichen als das fehlende Banner.
Verwandte Seiten
- Demomodus (für Administratoren), Häufige Fragen zum Demomodus
- Rezept: eine öffentliche Demo auf LiteSpeed und Plesk betreiben, Probleme mit dem Demomodus, Beispiele für den Demomodus
- Demomodus: der Hinweis zum Upgrade
- Erste Anmeldung und Standardpasswörter
- Härtung für Hoster, Sicherheit für Hoster: Überblick
- Eine Demo-Installation einrichten
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.