Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

PHP paikamine Dockeri konteinerites

Konteinerid end ei paiga. PHP2Shelli vastu peate PHP tõmmise (image) uuesti ehitama või uuesti tõmbama ja iga konteineri uuest tõmmisest uuesti looma.

Seis Lugemisaeg 4 minPHP2Shell

Lühidalt: PHP Dockeri tõmmise uuendus on PHP2Shelli vastu kohustuslik ja see ei toimu iseenesest. Peate tõmmise parandatud PHP versiooniga uuesti ehitama või tõmbama, iga konteineri sellest uuesti looma ja kontrollima, et töötavas konteineris töötab 8.5.12, 8.4.27, 8.3.36 või 8.2.35. Konteineri lihtne taaskäivitus ei piisa.

Miks konteinerid ei ole automaatselt turvalised

Dockeri tõmmis on külmutatud hetktõmmis. PHP selles jääb seisu, mis sellel ehitamisel oli, ka siis, kui hostis on uuendused ammu paigaldatud. Paketiuuendus hostsüsteemis ei muuda konteineris olevat PHP-d.

Lisaks tulevad tüüpilised komistuskivid: mitu kuud tagasi ehitatud ja sestsaadik puutumata tõmmised, baastõmmised kindla sildiga nagu php:8.3.35-fpm, kohalikud vahemälud, mis ehitamisel taaskasutavad vana baastõmmist, ja konteinerid, mis on küll uuesti käivitatud, kuid mitte kunagi uuesti loodud. Mõjutatud on kõik konteinerites tavalised töörežiimid: PHP-FPM, Apache koos mod_php-ga ja FrankenPHP.

Lisaks tuleb vastutuse küsimus. Paljudes ettevõtetes on agentuur või arendaja tõmmise ühe korra ehitanud, kuid seda käitab sisemine IT või veebimajutaja. Siis ei tunne keegi end vastutavana tõmmise PHP seisu eest. Selgitage seetõttu kõigepealt, kes tõmmist ehitab, kus Dockerfile asub ja kes tohib uusi tõmmiseid juurutada.

PHP versiooni kontroll konteineris

Kontrollige töötavat konteinerit, mitte ainult Dockerfile'i. Käsud on puhtalt lugevad.

docker ps --format "table {{.Names}}\t{{.Image}}\t{{.CreatedAt}}"
docker exec <container> php -v
docker exec <container> php -i | grep -E "^PHP Version|Server API"
docker image inspect <image> --format "{{.Created}}"

Kui tõmmis kasutab ametlike PHP ehituste asemel distributsiooni pakette, kontrollige paketi seisu konteineris. Paketinimed erinevad baasdistributsiooni kaupa:

docker exec <container> sh -c "apt policy php8.3-fpm 2>/dev/null || apk info -v 2>/dev/null | grep php"

Distributsiooni pakettide puhul võib tagasiportimine olla paigaldatud, kuigi versiooninumber jääb vanaks. Siis loeb paketi muudatuslogi. Ametlikud PHP tõmmised toovad PHP-d seevastu enamasti ise kompileerituna kaasa; seal on käsu php -v versiooninumber määrav väärtus. Kuidas tagasiportimisi ära tunda, kirjeldab PHP versiooni ja paigatud seisu õige kontroll.

PHP Dockeri tõmmise uuendus: uuesti ehitamine ja juurutamine

Oma tõmmis PHP tõmmise baasil: tõmmake baastõmmis uuesti ja ehitage ilma vahemäluta.

docker build --pull --no-cache -t meine-app:2026-10-25 .
docker run --rm meine-app:2026-10-25 php -v      # kontrollige versiooni enne juurutamist

Docker Compose'iga: tõmmake või ehitage tõmmised ja looge konteinerid uuesti.

docker compose pull
docker compose build --pull --no-cache
docker compose up -d --force-recreate

Kontrollige seejärel uuesti käsuga docker exec <container> php -v, kas uus versioon töötab. Kui konteineril on Dockerfile'is kindel versioonisilt, näiteks FROM php:8.3.35-fpm, peate silti tõstma. Haru silt nagu php:8.3-fpm saab uusi paigatud seise, kuid ainult siis, kui tõmbate uuesti.

Hoidke eelmine tõmmis valmis, kuni uus versioon on testitud. Vea korral saate nii tagasi vahetada, ilma et rakendus kaua võrgust väljas oleks. Vana tõmmis sisaldab aga jälle haavatavat PHP-d; tagasitee on seetõttu õigustatud vaid lühiajaliselt ja ajutiste meetmetega.

Kes kasutab Kubernetes'it, juurutab uue tõmmise juurutuse (Deployment) kaudu. Üksikasjad lehel PHP paikamine Kubernetes'es. FrankenPHP tõmmiste puhul kehtib sama tegevus; märkusi töörežiimi kohta leiate lehelt FrankenPHP kaitsmine.

Oluline

Ärge unustage kõrvalkonteinereid: cron- ja järjekorra tööprotsessid, haldustööriistad või lavastuskeskkonnad (staging) kasutavad sageli sama PHP tõmmist, kuid töötavad oma konteinerites. Iga neist tuleb uuesti luua.

Ajutised meetmed konteineris

Kui uuendus veel ei õnnestu, kehtivad php.net-i ajutised meetmed ka konteineris. Need ei ole täielik kaitse. Mälupiirang kuulub seejuures konteinerile, sest php.net soovitab seda konteineri või cgroupi kaudu, mitte RLIMIT_AS või RLIMIT_DATA kaudu:

; nt failina tõmmises: /usr/local/etc/php/conf.d/zz-uebergang.ini
memory_limit = -1
post_max_size = 8M
upload_max_filesize = 6M
session.upload_progress.enabled = 0
docker run --memory=1g ...         # või Compose'is: deploy.resources.limits.memory

Kohandage väärtust oma rakendusele. Jälgige, et rakendus ei saaks memory_limit-i ise üle kirjutada; PHP-FPM-i puhul seadke väärtused selleks poolis php_admin_value abil. Uus seadistus rakendub alles siis, kui konteiner on uuesti loodud või uuesti käivitatud; taaskäivituse taust on kirjas lehel PHP-FPM-i ja kõigi tööprotsesside taaskäivitus.

Et järgmisel korral läheks kiiremini

  • Ehitage tõmmised regulaarselt ja automaatselt uuesti, mitte ainult koodimuudatuste korral.
  • Kasutage haru sildiga baastõmmiseid ja versioneerige ehitatud seisu kuupäeva või digestiga.
  • Laske tõmmised enne juurutamist teadaolevate turvaaukude suhtes kontrollida ja käitage konteinereid ilma root-õigusteta.
  • Pidage inventari, millised konteinerid millist tõmmist kasutavad.

Kuidas PHP SOS konkreetselt aitab?

  • Seisu kaardistamine: Kontrollime kõiki töötavaid konteinereid, nende tõmmiseid ja PHP versioone, ka kõrvalkonteinereid ja stagingut.
  • Uuesti ehitamine ja juurutamine: PHP paikamisteenuse kaudu ehitame tõmmised parandatud versiooniga ja loome konteinerid kontrollitult uuesti.
  • Ülemineku kindlustamine, kus uuendus sõltub rakendusest: php.net-i väärtused, mälupiirang konteineril.
  • Pidev jälgimine: Turvaseirega hoiame tõmmiste seisu ja konteinerite kahtlast käitumist silma peal.

Korduma kippuvad küsimused

Kas docker restart pärast uuendust piisab?

Ei. docker restart käivitab konteineri uuesti sama, vana tõmmisega. Peate uue tõmmise ehitama või tõmbama ja konteineri sellest uuesti looma, näiteks käsuga docker compose up -d --force-recreate.

Kas ametlik PHP tõmmis sisaldab juba parandatud versiooni?

Seda kontrollite kõige paremini otse: tõmmake tõmmis uuesti ja käivitage selles php -v. Oodatud on 8.5.12, 8.4.27, 8.3.36 või 8.2.35. Kui tõmmis näitab vanemat numbrit, ei ole see veel uuendatud või pärineb vahemälust.

Kas PHP on konteineris vähem ohustatud kui hostil?

Turvaauk ise mõjub konteineris täpselt samamoodi. Hästi ehitatud konteiner võib sissemurdmise tagajärgi piirata, näiteks ilma root-õigusteta kasutaja ja kirjutuskaitstud failisüsteemiga. Paiga see ei asenda.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi