Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

Oficialūs PHP Docker atvaizdai: žymės, santraukos ir perkūrimas

Oficialaus PHP atvaizdo žymė yra rodyklė, kuri laikui bėgant keliauja į naujas būsenas. Kas supranta, ką reiškia žymė, variantas ir santrauka, pasirenka tinkamą atvaizdą ir gali įrodyti pataisų būseną.

Būsena 5 min. skaitymoHostingas ir distribucijos

Trumpai: oficialus PHP atvaizdas Docker Hub turi daug žymių, kurios sujungia versiją, variantą (pavyzdžiui, cli, fpm, apache) ir bazinę sistemą. Žymė yra rodyklė, kuri po perkūrimų keliauja į naujas būsenas; tik santrauka nurodo tiksliai vieną būseną. Nuo PHP2Shell jums reikia atvaizdo su PHP 8.5.12, 8.4.27, 8.3.36 ar 8.2.35, patikrinto su php -v, ir savo atvaizdų perkūrimo ant jo.

Kodėl vien žymė mažai ką išduoda

Daug komandų savo Dockerfile įrašo eilutę, pavyzdžiui, FROM php:8.3-fpm, ir ją pamiršta. Tai veikia tol, kol niekas neklausia, kokia PHP versija iš tikrųjų veikia. Nuo PHP2Shell klausia visi.

Atsakymo Dockerfile nėra. Žymė, pavyzdžiui, 8.3-fpm, atsisiuntimo momentu rodo į naujausią šios šakos būseną. Jei atvaizdas buvo atsisiųstas iki spalio 21 d. ir nuo to laiko neatnaujintas, jame yra pažeidžiama versija, nors žymė šiandien rodo į ištaisytą būseną. Pagal Docker Official Images gaires atvaizdai aktyviai perkuriami, taip pat dėl saugumo pataisų. Tačiau jūsų vietinė būsena dėl to nesikeičia.

Visą eigą nuo perkūrimo iki naujai sukurto konteinerio aprašo PHP pataisymas Docker konteineriuose. Čia kalbama apie išankstinį klausimą: kuris atvaizdas tinkamas ir kaip įrodyti jo būseną?

PHP Docker atvaizdo žymės: kaip jos sudarytos

Žymės sudarytos iš iki trijų dalių. Docker Hub rodo pavyzdžius, tokius kaip php:8.2-cli, php:8.2-fpm-alpine ar php:8.4.27-zts-alpine3.24.

Dalis Pavyzdys Reikšmė
Versijos nuoroda 8.4.27 arba 8.4 pilna versija lieka šioje būsenoje, šakos nuoroda keliauja su naujomis pataisomis
Variantas cli, fpm, apache, zts PHP veikimo režimas konteineryje
Bazinė sistema alpine3.24, bookworm, trixie pagrindinė Alpine ar Debian versija

PHP2Shell atžvilgiu variantai nėra lygiaverčiai. fpm eksploatuoja PHP-FPM, apache eksploatuoja PHP kaip Apache modulį, t. y. mod_php. Šį veikimo režimą PHP komanda vertina didžiausiu rizikos lygiu, nes ten išnaudojimas buvo parodytas dar prieš pradedant vykdyti programos kodą. Daugiau skiltyje Kodėl mod_php ypač pažeidžiamas. Variantas cli skirtas komandinės eilutės užduotims.

Svarbi ir bazinė sistema. Alpine atvaizdai maži, bet naudoja kitą C biblioteką nei Debian atvaizdai; kai kurie plėtiniai ar iš anksto sukompiliuotos bibliotekos ten elgiasi kitaip. Todėl bazinės sistemos nekeiskite šalia saugumo atnaujinimo, o pirmiausia pasilikite prie to, ką jūsų programa pažįsta.

Svarbu suprasti: oficialiame atvaizde PHP nėra iš bazinės distribucijos paketų. Docker Hub aprašo, kad PHP šaltinio kodas yra atvaizde, o plėtiniai įtraukiami pagalbiniais skriptais, tokiais kaip docker-php-ext-install. Todėl bazinės sistemos paketų atnaujinimas jūsų Dockerfile PHP versijos nekeičia. Lemia tik tai, kurioje oficialaus atvaizdo būsenoje statote.

Žymė ar santrauka: kas kada keičiasi

Santrauka yra atvaizdo turinio kontrolinė suma, rašoma kaip sha256: su ilga simbolių eilute. Ji keičiasi su kiekvienu perkūrimu. Todėl tinka kaip įrodymas: kas žino santrauką, tiksliai žino, kuri būsena veikia.

Praktikoje pasiteisino toks darbo pasidalijimas:

  • Dockerfile naudoti šakos žymę, pavyzdžiui, php:8.4-fpm, kad perkūrimas automatiškai gautų naujausią šios šakos pataisą.
  • Diegiant (rollout) naudoti paties sukurto atvaizdo santrauką, kad būtų aiškiai žinoma, kas pateikiama.
  • Dokumentacijoje užfiksuoti abu: žymę, santrauką ir su php -v patikrintą versiją.

Kas vietoj to užfiksuoja pilną versijos žymę, pavyzdžiui, 8.3.35-fpm, niekada automatiškai negauna pataisos. Tai gali būti norima, bet reikalauja proceso, kuris žymę pakelia po kiekvieno saugumo pranešimo.

PHP2Shell: atvaizdo patikra prieš naudojimą

Toliau pateiktos komandos atsisiunčia atvaizdą ir nuskaito informaciją. Jos nekeičia veikiančių konteinerių.

# Atsisiųsti dabartinę šakos žymės būseną
docker pull php:8.4-fpm

# Kokia PHP versija yra atvaizde?
docker run --rm php:8.4-fpm php -v

# Parodyti atsisiųsto atvaizdo santrauką
docker image inspect php:8.4-fpm --format '{{index .RepoDigests 0}}'

# Santrauką ir platformas užklausti tiesiai registre
docker buildx imagetools inspect php:8.4-fpm

Užklausa su imagetools kelių platformų atvaizdams parodo aukštesnio lygio santrauką ir po ja kiekvienai platformai, pavyzdžiui, linux/amd64 ar linux/arm64, atskirą. Dokumentuokite santrauką, kurią jūsų serveriai iš tikrųjų atsisiunčia, ir atminkite, kad kūrėjų kompiuteriai su kita architektūra gauna kitą platformos santrauką.

Jei php -v nerodo bent ištaisytos šakos versijos, atvaizdas pasenęs arba ateina iš tarpinės talpyklos. Tuomet patikrinkite, ar jūsų aplinka nenaudoja registro veidrodžio, kuris pateikia senas būsenas.

PHP 8.1 ir senesnėms PHP projektas oficialių leidimų nebeteikia. Todėl oficialus šių šakų atvaizdas negali turėti įprastos ištaisytos versijos. Žymės, kurios nebeprižiūrimos, pagal Docker gaires lieka prieinamos, bet nebeatnaujinamos.

Patarimas

Pasak Docker Hub, atvaizdas pateikia php.ini-development ir php.ini-production ir gamybai primygtinai rekomenduoja gamybinį variantą. Savo nustatymus, taip pat php.net pereinamąsias reikšmes, dėkite kaip failą į $PHP_INI_DIR/conf.d/.

Tipinės klaidos renkantis atvaizdą

  • Variantas iš įpročio: pasirenkamas apache variantas, nes jis paprastai paleidžiamas, nors galima fpm su atskiru žiniatinklio serveriu.
  • Nėra savų atvaizdų perkūrimo: bazinis atvaizdas yra naujausias, iš jo sukurtas programos atvaizdas ne.
  • Praleisti daugiapakopiai kūriniai: Dockerfile su keliomis FROM eilutėmis pakeičiama tik viena.
  • Pamirštos šalutinės paskirties atvaizdai: worker, cron konteineriai ir administravimo įrankiai naudoja savas žymes.
  • Pasikliauta tik latest: žymė nieko nesako apie šaką ir variantą ir gali netikėtai peršokti naujai pagrindinei šakai.

Kaip automatizuoti perkūrimus, kad pasenęs atvaizdas ilgai neveiktų, aprašo CI/CD: automatinis PHP atvaizdų perkūrimas. PHP konteineriuose pagrindus paaiškina PHP konteineriuose.

Kaip PHP SOS padeda konkrečiai?

  • Patikrinti turimą: nuskaitome, kokios žymės, santraukos ir PHP versijos yra jūsų atvaizduose ir veikiančiuose konteineriuose.
  • Įvertinti variantą: tikriname, ar mod_php reikalingas, ar fpm su atskiru žiniatinklio serveriu sumažina riziką.
  • Perkurti ir įrodyti: su PHP pataisų paslauga atvaizdus perkuriame ant ištaisyto pagrindo ir dokumentuojame žymę, santrauką bei versiją.
  • Įtvirtinti procesą: Dockerfile ir diegimus nustatome taip, kad kita pataisa atkeliautų planuotai.

Dažni klausimai

Kuo skiriasi žymė ir santrauka (digest)?

Žymė, pavyzdžiui, php:8.4-fpm, yra pavadinimas, kuris po kiekvieno perkūrimo gali rodyti į naują būseną. Santrauka yra kontrolinė suma, nurodanti tiksliai vieną nekintamą būseną. Įrodymams ir atkartojamam diegimui santrauka yra patikimesnis duomuo.

Kurioje žymėje yra PHP2Shell ištaisymas?

Ištaisytos PHP 8.5.12, 8.4.27, 8.3.36 ir 8.2.35. Žymė su pilnu versijos numeriu būseną rodo tiesiogiai. Su trumpesnėmis žymėmis, tokiomis kaip 8.4-fpm, po atsisiuntimo su php -v patikrinkite, kokia versija iš tikrųjų joje yra.

Ar yra pataisytas oficialus atvaizdas PHP 8.1?

PHP projektas 8.1 ir senesnėms oficialių leidimų nebeteikia. Todėl oficialus šių šakų atvaizdas negali turėti įprastos ištaisytos versijos. Planuokite perėjimą prie palaikomos šakos.

Ar apache variantas rizikingesnis nei fpm?

Apache variantas PHP eksploatuoja kaip Apache modulį, t. y. mod_php. Šį veikimo režimą PHP komanda esant PHP2Shell vertina didžiausiu rizikos lygiu. Abiem variantams reikia atnaujinimo; esant mod_php skubėti ypač reikia.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba