Het PHP-beleid van een server
Elke machine bepaalt zelf wat klanten aan hun PHP mogen veranderen. Die beslissing staat in één bestand, /etc/corecp/php-policy.yaml, en dit scherm ís dat bestand.
Geschreven voor: Beheerder
Elke machine bepaalt zelf wat klanten aan hun PHP mogen veranderen. Die beslissing staat in één bestand, /etc/corecp/php-policy.yaml, en dit scherm ís dat bestand.
Het is een toelatingslijst. Een directive die er niet in staat kan door niemand gezet worden, wat de PHP-build ook ondersteunt, en een extensie die er niet in staat kan niet aangezet worden. Verruimen is een beslissing van de beheerder en van niemand anders: een reseller versmalt wat zijn klanten krijgen via een pakket, en kan nooit verruimen wat jouw machine toestaat.
Openen
- Ga naar Servers en open de machine.
- Kies onder Snelle acties de optie PHP-beleid instellen.
Of ga er rechtstreeks naartoe:
https://paneel.voorbeeld.nl/nodes/stck1.voorbeeld.nl/php-policyWaar een node mee begint
Een verse node heeft elf directives — die waar hostingklanten echt om vragen, op plafonds die een gedeelde machine aankan:
corectl php policy showPHP POLICY (/etc/corecp/php-policy.yaml)
DIRECTIVE SCOPE BOUND
display_errors request On | Off
error_reporting request E_ALL | E_ALL & ~E_DEPRECATED | …
max_execution_time request max 600
max_input_vars request max 20000
memory_limit request max 512M
opcache.max_accelerated_files pool max 100000
opcache.memory_consumption pool max 512
post_max_size request max 512M
session.save_handler pool files | redis | memcached
session.save_path pool starts with tcp:// or redis:// or unix://
upload_max_filesize request max 512M
extensions: apcu, igbinary, imagick, memcached, opcache, redisDe drie soorten grens
Een directive heeft er precies één, en de machine leest er precies één — een plafond naast een keuzelijst zou nooit gebruikt worden, dus het formulier laat je kiezen.
| Soort | Voor | Voorbeeld |
|---|---|---|
| Plafond | een hoeveelheid | memory_limit, maximaal 512M |
| Keuzelijst | een keuze | display_errors, On of Off |
| Begint met | vrije tekst die binnen een vorm moet blijven | session.save_path, beginnend met tcp:// |
De derde bestaat om één reden. Het paar session.save_handler / session.save_path zit in de klantenset zodat redis-sessies mogelijk zijn, en een pad op jouw machine mag nooit iets zijn dat een klant kan intypen. De prefix-grens houdt het een sessieopslag-URL en verder niets.
Bereik is een feit, geen keuze
request betekent dat PHP de waarde per verzoek leest. pool betekent dat hij één keer gelezen wordt, als de interpreter start — alles van opcache, en de sessie-handler. Een pool-waarde is voor elke website van één account op één PHP-versie hetzelfde, en dat staat aan de klantkant onder het veld.
Dit verkeerd zetten is een stille fout: een opcache-instelling die per verzoek wordt toegepast, komt aan nadat het geheugen dat hij instelt al gereserveerd is.
Een directive toevoegen of wijzigen
Klik op Directive toevoegen, of klik op een rij om er een te wijzigen.
# een plafond
corectl php policy set memory_limit --scope request --max 512M
# een keuzelijst
corectl php policy set display_errors --scope request --values "On,Off"
# vrije tekst binnen een vorm
corectl php policy set session.save_path --scope pool \
--prefixes "tcp://,redis://,unix://" \
--note "the session store, never a directory"Elke wijziging reconcilet de node meteen, zodat een versmalling nu effect heeft en niet pas bij de volgende wijziging die er toevallig langskomt.
Versmallen, en wat er gebeurt met websites die eroverheen zitten
Haal een directive weg, of verlaag een plafond onder een waarde die iemand al gezet had:
corectl php policy unset max_input_time
corectl php policy set memory_limit --scope request --max 256MBij de eerstvolgende reconcile wordt de waarde in geen enkele pool meer gerenderd. De website houdt hem wel in zijn eigen administratie — verruim je het beleid later weer, dan komt hij terug zonder dat iemand de site aanraakt — en op het PHP-scherm van die website staat Niet actief met de reden erbij, in plaats van een instelling die niets doet.
Extensies
De schakelaars zijn wat klanten mogen aanzetten. Toestaan is niet installeren: alleen wat de PHP-builds op deze machine meeleveren kan echt geladen worden, en een schakelaar voor een module die geen enkele build heeft is als zodanig gemarkeerd.
corectl php policy ext-allow redis
corectl php policy ext-deny imagickWeghalen herstart de pools die hem hadden, zonder hem.
Wat geen beleid mag bevatten
Tien directives worden botweg geweigerd, op de node, vanaf dit scherm én vanaf de commandoregel:
open_basedir, disable_functions, disable_classes, sys_temp_dir,
upload_tmp_dir, error_log, extension_dir, include_path,
auto_prepend_file, auto_append_fileDe eerste drie zijn de isolatie van een account, opgeschreven — PHP zelf laat open_basedir alleen aanscherpen, nooit verruimen — en de rest wijst naar een plek op jouw machine. Ze worden allemaal door de reconcile gerenderd uit de eigen home van het account, en geen ervan is van de klant om te verplaatsen.
corectl php policy set open_basedir --max 1G
# open_basedir is never a customer setting on a shared node: it is the
# isolation of an account …Pakketten zijn de andere helft
Een pakket kan per directive strenger zijn dan de machine, via het instellingenregister (php.max.memory_limit en zijn broertjes). De effectieve grens voor een website is de strengste van de twee, en het paneel noemt altijd welke van de twee het was. Zie Pakketten en limieten voor de pakketkant.
Je werk controleren
# het bestand, zoals de node het leest
corectl php policy show --json | jq .directives.memory_limit
# wat één website daadwerkelijk krijgt
corectl php override list voorbeeld.nl
# en dat een tweede reconcile niets verandert
corectl reconcile && corectl reconcile