Fil-qosor: Biex tħaddmu PHP f'containers, agħżlu l-varjant xieraq tal-immaġni uffiċjali (fpm, apache jew cli), attivaw il-php.ini tal-produzzjoni, installaw biss l-estensjonijiet meħtieġa u ssettjaw limiti tal-memorja u tal-proċessi li jaqblu ma' xulxin. Il-containers huma immutabbli: aġġornament tas-sigurtà ta' PHP bħal dak għal PHP2Shell jaħdem biss meta l-immaġni tinbena mill-ġdid u kull container jerġa' jinbeda. Dan il-bini mill-ġdid għalhekk jappartjeni bħala proċess fiss f'kull tħaddim ta' containers.
Għaliex PHP f'containers?
Il-containers jippakkjaw PHP, l-estensjonijiet u l-konfigurazzjoni f'immaġni li taħdem l-istess fuq kull server. Għall-kumpaniji dan ifisser: inqas sorpriżi bejn it-test u l-produzzjoni, irkupru aktar mgħaġġel u stati ċari tal-verżjonijiet. Għas-sigurtà, madankollu, ifisser ukoll obbligu ġdid: ħadd ma japplika aġġornamenti awtomatikament f'container.
Din il-paġna tittratta t-tħaddim kurrenti. Kif tapplikaw patches konkreti kontra PHP2Shell fuq containers eżistenti tinsab taħt Applika patches għal PHP f'containers Docker.
L-għażla tal-varjant korrett tal-immaġni
| Varjant | Kontenut | Użu tipiku |
|---|---|---|
php:<version>-fpm |
PHP-FPM, jeħtieġ server tal-web quddiemu | Produzzjoni b'Nginx, Caddy jew Ingress |
php:<version>-apache |
Apache b'mod_php, b'mod awtomatiku mpm_prefork | strutturi sempliċi, applikazzjonijiet eqdem |
php:<version>-cli |
Linja tal-kmand, fiha bħala l-unika varjant ukoll php-cgi | Cronjobs, queue workers, passi ta' build |
…-alpine |
fuq Alpine Linux b'musl | immaġini żgħar, ma' xi estensjonijiet jinħtieġu aġġustamenti |
…-bookworm, …-trixie |
fuq il-verżjoni msemmija ta' Debian | bażi fissa għal builds riproduċibbli |
Għal proġetti ġodda ġeneralment huwa rakkomandat il-varjant fpm b'container separat tas-server tal-web. B'mod_php it-tim ta' PHP, b'rabta ma' PHP2Shell, jaraw l-ogħla riskju; min juża l-immaġni apache iħaddem eżatt din il-modalità tat-tħaddim.
Bini ta' immaġni tal-produzzjoni
Eżempju żgħir għal applikazzjoni b'aċċess għal MySQL:
FROM php:8.4-fpm-alpine
# Attiva l-konfigurazzjoni tal-produzzjoni (skont id-dokumentazzjoni tal-immaġni, rakkomandat bil-qawwa)
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# Biss l-estensjonijiet meħtieġa
RUN docker-php-ext-install -j"$(nproc)" pdo_mysql
# Issettjar proprju
COPY zz-sicherheit.ini "$PHP_INI_DIR/conf.d/"
# Il-kodiċi jappartjeni lil root; il-workers ta' FPM jaħdmu bħala www-data u jistgħu jaqrawh biss
COPY . /var/www/html
L-iskripts ta' għajnuna tal-immaġni jieħdu ħsieb il-bini tal-estensjonijiet: docker-php-ext-configure għall-għażliet, docker-php-ext-install għall-bini, docker-php-ext-enable biex jattiva, pereżempju wara pecl install. Jekk il-kodiċi sors jinfetaħ b'docker-php-source, skont id-dokumentazzjoni għandu jitħassar mill-ġdid fl-istess saff. Il-fajl zz-sicherheit.ini jista' jidher hekk:
expose_php = Off
display_errors = Off
log_errors = On
session.use_strict_mode = 1
session.cookie_httponly = 1
Żewġ prinċipji oħra jagħmlu l-immaġini aktar robusti. L-ewwel, l-immaġni kkonsenjata fiha biss dak li hemm bżonn waqt it-tħaddim; kompilaturi, caches tal-pakketti u fajls tat-test jappartjenu fi stadju separat ta' build. It-tieni, l-utent li taħtu jaħdem PHP għandu jikteb biss fejn hemm bżonn, pereżempju f'direttorji ta' upload jew cache fuq volumes imwaħħla. Ħafna timijiet iħaddmu l-container ukoll b'sistema tal-fajls protetta mill-kitba. Fajl PHP injettat mbagħad ikollu ħafna aktar diffikultà biex jibqa' b'mod permanenti, u kull restart jerġa' jwassal l-istat nadif tal-immaġni. Dan ma jissostitwixxix investigazzjoni wara inċident, imma jnaqqas b'mod notevoli s-superfiċje ta' attakk.
Proċessi, memorja u logs fil-container
Tliet viti jiddeterminaw jekk container ta' PHP jaħdimx b'mod stabbli.
- Għadd ta' workers:
pm.max_childrenfil-pool ta' FPM jistabbilixxi kemm talbiet jiġu ttrattati fl-istess ħin. Kull worker jista' jokkupa samemory_limit. - Limitu tal-memorja tal-container: Jillimita l-proċessi kollha flimkien. Bħala regola mhux eżatta japplika: għadd ta' workers darbiet il-memorja għal kull worker flimkien ma' riżerva jrid jidħol taħt il-limitu, inkella s-sistema ttemm proċessi.
- Logs: Il-containers jiktbu l-logs fuq l-output standard. F'PHP-FPM
catch_workers_output = yesjibgħat l-outputs tal-workers lejn il-log ewlieni; mingħajr l-issettjar, skont il-manwal, jispiċċaw fix-xejn.
Utli barra minn hekk huwa request_terminate_timeout, li jtemm talbiet individwali wara perjodu ta' żmien jekk max_execution_time ma jaħdimx. Kif tħaddmu containers f'cluster tiddeskrivih Applika patches għal PHP f'Kubernetes.
Containers u sigurtà: dak li wera PHP2Shell
F'PHP2Shell il-containers għandhom rwol doppju. Min-naħa waħda huma għajnuna: php.net jirrakkomanda bħala miżura temporanja għal CVE-2026-109618 li memory_limit=-1 jiġi kkombinat ma' limitu tal-memorja permezz ta' container jew cgroup, idealment b'mod li jintemm biss il-worker affettwat. RLIMIT_AS u RLIMIT_DATA huma, skont php.net, mhux adattati għal dan. Din il-miżura mhix protezzjoni sħiħa u ma tieħux post l-aġġornament.
Min-naħa l-oħra l-containers huma nassa jekk l-immaġini ma jinbnewx mill-ġdid. Immaġni b'PHP 8.4.26 tibqa' vulnerabbli, kemm-il darba jerġa' jibda l-container. Biss bini mill-ġdid għal 8.4.27 jew aktar ġdid u l-bdil tal-containers kollha li jaħdmu jagħlqu l-vulnerabbiltà. L-istat jista' jiġi kkontrollat direttament fil-container li jaħdem:
docker exec <container> php -v
docker exec <container> php-fpm -v
docker exec <container> php -r 'var_dump(ini_get("memory_hard_limit_percent"));'
Jekk l-aħħar kmand jirritorna bool(false), PHP ma jafx id-direttiva introdotta mal-verżjonijiet bil-korrezzjoni; skont il-manwal il-verżjoni mbagħad hija affettwata. B'mod permanenti jgħin biss bini awtomatiku mill-ġdid, kif deskritt taħt CI/CD: ibni mill-ġdid awtomatikament l-immaġini ta' PHP.
Stabbilixxu fid-Dockerfile il-verżjoni eżatta ta' PHP fit-tag u żiduha apposta. B'hekk fil-kodiċi jista' jiġi ntraċċat meta ġiet imqassma liema verżjoni.
Kif jgħin PHP SOS konkretament?
Fit-tishiħ tas-server għal servers tal-web ta' PHP nieħdu ħsieb ukoll il-containers:
- Niċċekkjaw l-immaġini: Immaġni bażi, verżjoni ta' PHP, estensjonijiet u konfigurazzjoni ta' kull immaġni.
- Insaħħu l-konfigurazzjoni: Ini tal-produzzjoni, lista irqiqa ta' estensjonijiet, limiti adattati ta' workers u memorja.
- Nwaqqfu l-bini mill-ġdid: Proċess li jibni u jrilaxxa mill-ġdid l-immaġini ma' rilaxxi ġodda ta' PHP.
- Nikkontrollaw it-tħaddim: Nuru li f'kull container li jaħdem taħdem il-verżjoni korretta.
Mistoqsijiet frekwenti
Liema varjant tal-immaġni ta' PHP huwa t-tajjeb?
Għal Nginx jew proxy ieħor il-varjant fpm, għal struttura sempliċi b'Apache il-varjant apache, għal skripts u cronjobs il-varjant cli. Il-varjanti Alpine huma iżgħar, imma jiddependu minn musl minflok glibc, li ma' xi estensjonijiet jinnota.
PHP f'container jiġi aġġornat awtomatikament?
Le. Container li jaħdem ma jinbidilx. Trid terġa' tibni l-immaġni bil-verżjoni l-ġdida ta' PHP u terġa' tibda l-containers. Biss imbagħad taħdem il-verżjoni korretta.
Kif iġibu ruħhom memory_limit u l-limitu tal-container?
memory_limit jillimita kull talba individwali ta' PHP, il-limitu tal-container il-container kollu. It-tnejn iridu jaqblu: l-għadd ta' workers darbiet il-memorja għal kull worker għandu jkun taħt il-limitu tal-container.
Għandi bżonn php.ini f'containers?
Iva. L-immaġini uffiċjali jiġu b'php.ini-development u php.ini-production bħala mudelli. Għall-produzzjoni d-dokumentazzjoni tal-immaġni tirrakkomanda espliċitament il-mudell tal-produzzjoni; l-issettjar proprju jidħol f'conf.d.