Īsi sakot: Oficiālais PHP attēls Docker Hub ir pieejams daudzos tagos, kas apvieno versiju, variantu (piemēram, cli, fpm, apache) un bāzes sistēmu. Tags ir rādītājs, kas pēc pārbūvēm pārvietojas uz jauniem stāvokļiem; tikai digest apzīmē tieši vienu stāvokli. Pret PHP2Shell vajadzīgs attēls ar PHP 8.5.12, 8.4.27, 8.3.36 vai 8.2.35, pārbaudīts ar php -v, un savu attēlu pārbūve uz tā.
Kāpēc tags vien atklāj maz
Daudzas komandas savā Dockerfile ieraksta rindu, piemēram, FROM php:8.3-fpm, un tad to aizmirst. Tas darbojas, kamēr neviens nejautā, kura PHP versija patiesībā darbojas. Kopš PHP2Shell jautā ikviens.
Atbilde nav Dockerfile. Tags, piemēram, 8.3-fpm, lejupielādes brīdī norāda uz šī atzara jaunāko stāvokli. Ja attēls tika lejupielādēts pirms 21. oktobra un kopš tā laika nav atjaunots, tajā ir ievainojama versija, kaut arī tags šodien norāda uz labotu stāvokli. Saskaņā ar Docker Official Images vadlīnijām attēli tiek aktīvi pārbūvēti, arī drošības labojumu dēļ. Jūsu lokālo stāvokli tas neskar.
Pilnu gaitu no pārbūves līdz no jauna izveidotam konteineram apraksta PHP ielāpošana Docker konteineros. Šeit runa ir par priekšjautājumu: kurš attēls ir pareizais un kā pierādīt tā stāvokli?
PHP Docker attēlu tagi: kā tie ir uzbūvēti
Tagi sastāv no līdz trim daļām. Docker Hub rāda piemērus, piemēram, php:8.2-cli, php:8.2-fpm-alpine vai php:8.4.27-zts-alpine3.24.
| Sastāvdaļa | Piemērs | Nozīme |
|---|---|---|
| Versijas norāde | 8.4.27 vai 8.4 |
pilnā versija paliek pie šī stāvokļa, atzara norāde pārvietojas ar jauniem ielāpiem |
| Variants | cli, fpm, apache, zts |
PHP darbības režīms konteinerā |
| Bāzes sistēma | alpine3.24, bookworm, trixie |
pamatā esošā Alpine vai Debian versija |
PHP2Shell gadījumā varianti nav līdzvērtīgi. fpm darbina PHP-FPM, apache darbina PHP kā Apache moduli, tātad mod_php. Šo darbības režīmu PHP komanda vērtē augstāk, jo tur tika demonstrēts exploit, vēl pirms tiek izpildīts lietojumprogrammas kods. Vairāk sadaļā Kāpēc mod_php ir īpaši apdraudēts. Variants cli paredzēts komandrindas uzdevumiem.
Arī bāzes sistēmai ir sekas. Alpine attēli ir mazi, bet izmanto citu C bibliotēku nekā Debian attēli; daži paplašinājumi vai iepriekš kompilētas bibliotēkas tur uzvedas citādi. Bāzes sistēmu tāpēc nemainiet starp citu kopā ar drošības atjauninājumu, bet vispirms paliekiet pie tā, ko jūsu lietojumprogramma pazīst.
Svarīgi izpratnei: oficiālajā attēlā PHP nenāk no bāzes distributīva pakotnēm. Docker Hub apraksta, ka PHP pirmkods atrodas attēlā un paplašinājumi tiek iebūvēti ar palīgskriptiem, piemēram, docker-php-ext-install. Bāzes sistēmas pakotņu atjauninājums jūsu Dockerfile tāpēc PHP versiju nemaina. Izšķirošs ir tikai tas, uz kura oficiālā attēla stāvokļa jūs būvējat.
Tags vai digest: kas kad mainās
Digest ir kontrolsumma par attēla saturu, rakstīta kā sha256: ar garu rakstzīmju virkni. Tas mainās ar katru pārbūvi. Tāpēc tas der kā pierādījums: kas zina digest, zina precīzi, kurš stāvoklis darbojas.
Praksē labi darbojas darba sadale:
- Dockerfile izmantot atzara tagu, piemēram,
php:8.4-fpm, lai pārbūve automātiski saņemtu šī atzara jaunāko ielāpu. - Izvietojumā izmantot gatavā paša attēla digest, lai būtu nepārprotami skaidrs, kas tiek piegādāts.
- Dokumentācijā fiksēt abus: tagu, digest un ar
php -vpārbaudīto versiju.
Kas tā vietā fiksē pilnu versijas tagu, piemēram, 8.3.35-fpm, nekad automātiski nesaņem ielāpu. Tas var būt vēlams, bet prasa procesu, kas tagu paaugstina pie katra drošības paziņojuma.
PHP2Shell: attēla pārbaude pirms lietošanas
Šīs komandas lejupielādē attēlu un nolasa informāciju. Tās nemaina darbojošos konteinerus.
# Lejupielādēt atzara taga pašreizējo stāvokli
docker pull php:8.4-fpm
# Kura PHP versija ir attēlā?
docker run --rm php:8.4-fpm php -v
# Parādīt lejupielādētā attēla digest
docker image inspect php:8.4-fpm --format '{{index .RepoDigests 0}}'
# Digest un platformas pieprasīt tieši reģistrā
docker buildx imagetools inspect php:8.4-fpm
Pieprasījums ar imagetools multiplatformu attēliem parāda augstāka līmeņa digest un zem tā katrai platformai, piemēram, linux/amd64 vai linux/arm64, savu digest. Dokumentējiet digest, ko jūsu serveri patiešām lejupielādē, un ņemiet vērā, ka izstrādātāju datori ar citu arhitektūru saņem citu platformas digest.
Ja php -v nerāda vismaz atzara labotu versiju, attēls ir novecojis vai nāk no starpatmiņas. Tad pārbaudiet, vai jūsu vide neizmanto reģistra spoguli, kas piegādā vecus stāvokļus.
PHP 8.1 un vecākām versijām PHP projekts oficiālus izlaidumus vairs nepiegādā. Šo atzaru oficiāls attēls tāpēc nevar saturēt parastu labotu versiju. Tagi, kas vairs netiek uzturēti, saskaņā ar Docker vadlīnijām paliek pieejami, bet vairs netiek atjaunināti.
Attēls saskaņā ar Docker Hub nes līdzi php.ini-development un php.ini-production un produkcijai noteikti iesaka produkcijas variantu. Savus iestatījumus novietojiet kā failu direktorijā $PHP_INI_DIR/conf.d/, arī php.net pagaidu vērtības.
Tipiskas kļūdas attēla izvēlē
- Variants pēc ieraduma: apache variants tiek izvēlēts, jo tas vienkārši startē, kaut gan iespējams fpm ar atsevišķu tīmekļa serveri.
- Nav pašu attēlu pārbūves: bāzes attēls ir aktuāls, no tā uzbūvētais lietojumprogrammas attēls nav.
- Nepamanīti daudzpakāpju būvējumi: Dockerfile ar vairākām
FROMrindām tiek pielāgota tikai viena. - Aizmirsti blakus attēli: worker, cron konteineri un administrēšanas rīki izmanto savus tagus.
- Paļaušanās tikai uz
latest: tags neko nesaka par atzaru un variantu, un jauna galvenā atzara gadījumā var negaidīti pārlēkt.
Kā automatizēt pārbūves, lai novecojis attēls ilgi nedarbotos, apraksta CI/CD: PHP attēlu automātiska pārbūve. PHP konteineru pamatus izskaidro PHP konteineros.
Kā PHP SOS palīdz konkrēti?
- Pārbaudīt krājumu: Mēs nolasām, kādi tagi, digest un PHP versijas ir jūsu attēlos un darbojošajos konteineros.
- Novērtēt variantu: Mēs pārbaudām, vai mod_php ir nepieciešams vai arī fpm ar atsevišķu tīmekļa serveri samazina risku.
- Pārbūvēt un apliecināt: Ar PHP ielāpu pakalpojumu mēs attēlus pārbūvējam uz labota pamata un dokumentējam tagu, digest un versiju.
- Nostiprināt procesu: Mēs Dockerfile un izvietojumus iestatām tā, lai nākamais ielāps ierastos plānoti.
Biežāk uzdotie jautājumi
Kāda ir atšķirība starp tagu un digest?
Tags, piemēram, php:8.4-fpm, ir nosaukums, kas pēc katras pārbūves var norādīt uz jaunu stāvokli. Digest ir kontrolsumma, kas apzīmē tieši vienu nemaināmu stāvokli. Pierādījumiem un reproducējamiem izvietojumiem digest ir uzticamāks apzīmējums.
Kurš tags satur PHP2Shell labojumu?
Labotas ir PHP 8.5.12, 8.4.27, 8.3.36 un 8.2.35. Tags ar pilnu versijas numuru stāvokli rāda tieši. Īsākiem tagiem, piemēram, 8.4-fpm, pēc lejupielādes ar php -v pārbaudiet, kura versija tajā patiešām ir.
Vai ir ielāpots oficiāls attēls PHP 8.1?
PHP projekts versijām 8.1 un vecākām oficiālus izlaidumus vairs nepiegādā. Šo atzaru oficiāls attēls tāpēc nevar saturēt parastu labotu versiju. Plānojiet pāreju uz atbalstītu atzaru.
Vai apache variants ir riskantāks nekā fpm?
Apache variants darbina PHP kā Apache moduli, tātad mod_php. Šo darbības režīmu PHP komanda PHP2Shell gadījumā vērtē visaugstāk. Abiem variantiem vajadzīgs atjauninājums; mod_php gadījumā steidzamība ir īpaši liela.