Fil-qosor: open_basedir jillimita d-direttorji li PHP jista' jaċċessa. Waħdu huwa biss ostaklu addizzjonali. Iżolament effettiv għal kull websajt jinħoloq biss bl-interazzjoni: utent proprju tas-sistema, pool PHP-FPM proprju, folder tmp proprju u aċċessi proprji għad-database. Imbagħad dħul f'websajt jibqa' llimitat għal dik il-websajt.
Għaliex wara PHP2Shell l-iżolament jiddeċiedi dwar il-ħsara
Fuq ħafna servers jaħdmu diversi websajts maġenb xulxin: il-paġna tal-kumpanija, ħanut, paġna qadima ta' kampanja, għand l-aġenziji spiss għexieren ta' proġetti tal-klijenti. Ħafna drabi jaqsmu utent tas-sistema u proċess ta' PHP. Jekk waħda minnhom tiġi kompromessa, l-oħrajn kollha jkunu esposti.
PHP2Shell jagħmel dan ir-riskju tanġibbli. Il-vulnerabbiltajiet CVE-2026-109618 u CVE-2026-109619 jippermettu l-eżekuzzjoni ta' kodiċi malizzjuż mingħajr login, indipendentement mis-CMS. Skont rapporti tal-midja kien hemm diġà fis-17/10/2026 l-ewwel tentattiv ta' attakk, u l-patches ġew fil-21/10. Ir-rimedju huwa l-aġġornament. Jekk attakk fiż-żmien ta' qabel jolqotx websajt waħda jew għaxra, madankollu, jiddeċiedi l-iżolament.
Speċjalment mat-tieni vulnerabbiltà jiżdied ħsieb ieħor: skont il-proġett PHP, stat intern ta' talba jista' jibqa' f'worker u jintuża minn talba aktar tard fl-istess worker. Pools separati għal kull websajt jiżguraw li l-websajts, ukoll hekk, ma jaqsmux workers.
X'jagħmel open_basedir
B'open_basedir tiffissaw lista ta' direttorji. Funzjonijiet tal-fajls ta' PHP bħal fopen, include jew file_get_contents imbagħad jirrifjutaw l-aċċess għal kull ħaġa barra minn din il-lista. Skript introdott għalhekk ma jistax faċilment jaqra l-fajls ta' konfigurazzjoni tal-websajt ġirien.
Il-limiti huma importanti: il-verifika sseħħ ġewwa PHP. Programmi mibdija barra minn PHP ma jkunux soġġetti għaliha, u żbalji fl-interpretatur jistgħu jiċċirkumvenjawha. Għalhekk open_basedir dejjem jappartjeni flimkien ma' funzjonijiet tas-sistema msakkra, kif deskritt fil-gwida Kif tużaw disable_functions sewwa, u fuq kollox ma' separazzjoni fil-livell tas-sistema operattiva.
Iżolament għal kull websajt f'erba' saffi
Separazzjoni solida tinbena fuq diversi saffi. Kull wieħed jaqbad dak li s-saff ta' qablu ma jilħaqx.
| Saff | Miżura | Effett |
|---|---|---|
| Sistema operattiva | utent proprju tas-sistema għal kull websajt | Il-fajls ta' websajts oħra ma jistgħux jinqraw |
| Proċessi ta' PHP | pool PHP-FPM proprju b'socket proprju | l-ebda worker komuni, issettjar proprju |
| Konfigurazzjoni ta' PHP | open_basedir, folders tmp u tas-session proprji |
ostaklu addizzjonali, l-ebda fajls temporanji komuni |
| Data | utent proprju tad-database b'drittijiet biss fuq id-database proprja | l-ebda aċċess għal data barranija tal-klijenti |
Meta l-ħtieġa ta' protezzjoni hija għolja, pereżempju għal ħwienet bl-ipproċessar tal-ħlasijiet jew portals b'data tas-saħħa, jiżdiedu containers jew servers separati.
Kif tikkonfiguraw open_basedir fil-pool PHP-FPM
L-eżempju li ġej juri pool għal websajt b'utent proprju seite1. Adattaw il-mogħdijiet u n-numru tal-verżjoni għas-sistema tagħkom.
; /etc/php/8.3/fpm/pool.d/seite1.conf
[seite1]
user = seite1
group = seite1
listen = /run/php/seite1.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = ondemand
pm.max_children = 10
php_admin_value[open_basedir] = /var/www/seite1/:/var/www/seite1-tmp/
php_admin_value[upload_tmp_dir] = /var/www/seite1-tmp/
php_admin_value[sys_temp_dir] = /var/www/seite1-tmp/
php_admin_value[session.save_path] = /var/www/seite1-tmp/sessions
php_admin_value[error_log] = /var/log/php/seite1.error.log
php_admin_flag[session.upload_progress.enabled] = off
L-aħħar linja tapplika fl-istess ħin il-miżura temporanja ta' php.net dwar PHP2Shell. Taħdem biss mill-pool, mill-php.ini jew mill-konfigurazzjoni tas-server, mhux permezz ta' ini_set() jew .user.ini. Il-folders toħolquhom b'drittijiet xierqa:
sudo useradd --system --home /var/www/seite1 --shell /usr/sbin/nologin seite1
sudo mkdir -p /var/www/seite1-tmp/sessions
sudo chown -R seite1:seite1 /var/www/seite1-tmp
sudo chmod 700 /var/www/seite1-tmp
Kif għandhom jidhru d-drittijiet fid-direttorju attwali tal-web tiddeskrivi l-gwida Drittijiet tal-fajls fuq is-server tal-web.
Qabbdu s-server tal-web u ivverifikaw ir-riżultat
F'Nginx kull websajt tindika lejn is-socket proprju tagħha. B'hekk l-ebda talba ma tispiċċa fil-pool ta' websajt oħra.
server {
server_name seite1.example;
root /var/www/seite1/public;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/seite1.sock;
}
}
Aktar tagħrif dwar din il-kombinazzjoni issibu taħt Kif tassiguraw Nginx ma' PHP-FPM. Wara r-restart ivverifikaw jekk il-pools verament jaħdmu separati:
sudo systemctl restart php8.3-fpm
# Kull pool għandu jaħdem taħt l-utent proprju tiegħu
ps -eo user,pid,cmd | grep "[p]hp-fpm: pool"
Wara ttestjaw il-funzjonijiet kollha tal-websajt: uploads, ipproċessar tal-immaġini, caches, kompiti skedati. Messaġġi ta' żball bl-indikazzjoni ta' open_basedir restriction fil-log tal-iżbalji juru liema mogħdija għadha nieqsa. Żidu biss mogħdijiet li l-applikazzjoni verament teħtieġ, u qatt is-sistema kollha tal-fajls.
L-aġenziji b'ħafna paġni tal-klijenti għandhom iżommu l-konfigurazzjoni tal-pool bħala mudell. Hekk kull websajt ġdida tikseb is-separazzjoni awtomatikament, minflok ma jkollha tiġi miżjuda aktar tard. Sfond għal dan il-każ jinsab taħt Sieħeb tas-sigurtà għall-aġenziji.
Ostakli tipiċi waqt il-migrazzjoni
Il-migrazzjoni għal pools separati tista' tiġi ppjanata, imma għandha xi nases li jerġgħu jidhru. L-aktar komuni tolqot libreriji maqsuma: jekk pereżempju framework jew folder b'tipi ta' ittri jinsab barra mid-direttorju tal-websajt, din il-mogħdija trid tiddaħħal għall-qari f'open_basedir. Aħjar huwa li tinġiebu dawn id-dipendenzi fil-proġett innifsu.
It-tieni nassa huma s-sessions. Jekk il-post tal-ħażna jinbidel, il-viżitaturi kollha jiġu mneħħija darba mill-login, u l-baskits li għaddejjin jintilfu. Ippjanaw għalhekk il-migrazzjoni f'ħin kwiet u ħabbruha internament.
It-tielet, kompiti skedati ħafna drabi jaħdmu mil-linja tal-kmand u għalhekk taħt utent differenti mill-websajt. Ivverifikaw il-cronjobs u l-kjuwijiet u ħallu jaħdmu taħt l-utent il-ġdid tal-websajt, inkella jinħolqu fajls b'sid żbaljat li PHP aktar tard ma jistax jibdel.
Fl-aħħar, kull pool għandu jkollu limiti proprji għal proċessi u memorja. Websajt li tkun taħt tagħbija jew attakk ma tistax hekk iġġiegħel lill-oħrajn jinżlu mhux jaħdmu magħha.
Kif tgħin PHP SOS b'mod konkret?
- Nirreġistraw liema websajts illum jaqsmu utenti, proċessi u databases.
- Niffissaw għal kull websajt utenti, pools, folders tmp u aċċessi tad-database proprji, mingħajr ma nibdlu l-applikazzjonijiet.
- Nittestjaw kull websajt wara l-migrazzjoni u nirranġaw mogħdijiet neqsin b'mod immirat.
- Niddokumentaw is-separazzjoni bħala mudell għal proġetti futuri.
Kif dan jidħol f'kunċett sħiħ jiddeskrivih is-servizz Tisħiħ tas-server għal servers tal-web bi PHP.
Mistoqsijiet frekwenti
open_basedir huwa biżżejjed biex jifred il-websajts minn xulxin?
Le. open_basedir huwa ostaklu addizzjonali ġewwa PHP, mhux separazzjoni iebsa. L-iżolament isir affidabbli biss b'utenti tas-sistema u pools proprji għal kull websajt, u b'ħtieġa ta' protezzjoni ogħla b'containers jew servers separati.
Għaliex l-uploads ma jibqgħux jaħdmu wara li nissettja open_basedir?
Ġeneralment il-folder għal fajls temporanji jonqos mil-lista. Oħolqu folder tmp proprju għal kull websajt, daħħluh f'open_basedir u ffissaw upload_tmp_dir u sys_temp_dir fuq dan il-folder.
Applikazzjoni tista' tneħħi open_basedir waħedha?
Applikazzjoni tista' waqt it-tħaddim biss tkompli tillimita l-issettjar, mhux tarħih. Madankollu ffissaw open_basedir permezz ta' php_admin_value fil-pool, biex il-valur ikun definit b'mod ċar.
L-iżolament huwa possibbli wkoll f'shared hosting?
Dan jiddependi mill-hoster. Ħafna offerti jifirdu l-klijenti permezz ta' utenti u proċessi ta' PHP proprji. Staqsu kif hija implimentata s-separazzjoni, speċjalment jekk diversi websajts tagħkom jinsabu f'pakkett wieħed.