PHP iestatījums open_basedir ierobežo PHP piekļuvi failiem norādītajās direktorijās. Tas ir papildu aizsardzības līdzeklis, nevis pilnīga vietņu izolācija vai pareizu failu piekļuves tiesību aizstājējs. PHP
Šajā piemērā konfigurēsim divus domēnus: vienu ar FCGId / FastCGI, otru ar PHP-FPM. Vispirms noskaidrosim, kuru režīmu katrs izmanto.
Komandas izpildi SSH terminālī kā root. Domēnu nosaukumi pirmais.lv un otrais.lv ir piemēri — aizstāj tos ar savējiem. Pirms izmaiņām saglabā esošās konfigurācijas rezerves kopiju. GitHub
1. Noskaidro katra domēna PHP režīmu
FCGId / FastCGI domēnu saraksts:
virtualmin list-domains --php-mode fcgid --name-only
PHP-FPM domēnu saraksts:
virtualmin list-domains --php-mode fpm --name-only
Šajās divās komandās nekas nav jāaizstāj. Tās parāda attiecīgā režīma domēnu nosaukumus un konfigurācijā neko nemaina. virtualmin.com
Turpmāk pieņemsim, ka pirmais.lv parādās FCGId sarakstā, bet otrais.lv — PHP-FPM sarakstā.
Katram domēnam izmanto tikai tā režīmam atbilstošo iestatīšanas komandu. Ja abi domēni ir FCGId sarakstā, abiem izmanto 3. sadaļas variantu. Ja abi izmanto PHP-FPM, abiem izmanto 4. sadaļas variantu.
2. Noskaidro domēnu mājas direktorijas
Izpildi, aizstājot domēnu nosaukumus:
virtualmin list-domains --domain pirmais.lv --home-only
virtualmin list-domains --domain otrais.lv --home-only
Katra komanda parādīs attiecīgā domēna mājas direktoriju. virtualmin.com
Tālākajos piemēros pieņemsim, ka tās ir /home/pirmais un /home/otrais.
Izmanto komandu parādītos ceļus, nevis izveido tos pēc domēna nosaukuma. Virtualmin mājas direktorijas nosaukums ne vienmēr sakrīt ar domēna nosaukumu. Pasted markdown
3. Ieslēdz open_basedir FCGId / FastCGI domēnam
Aizstāj domēnu un mājas direktorijas ceļu ar savējiem:
virtualmin modify-php-ini --domain pirmais.lv \
--ini-name open_basedir \
--ini-value "/home/pirmais:/tmp"
Komanda iestata open_basedir konkrētā domēna PHP konfigurācijā. Ja šim iestatījumam jau bija vērtība, tā tiek aizstāta. virtualmin.com
Vērtība /home/pirmais:/tmp nosaka divas atļautās direktorijas: /home/pirmais un /tmp, ieskaitot to apakšdirektorijas. Linux sistēmā ceļus atdala ar kolu :. PHP
4. Ieslēdz open_basedir PHP-FPM domēnam
PHP-FPM gadījumā pievieno parametru --fpm-admin-value:
virtualmin modify-php-ini --domain otrais.lv \
--ini-name open_basedir \
--ini-value "/home/otrais:/tmp" \
--fpm-admin-value
Šis parametrs nodrošina iestatījuma ierakstīšanu FPM konfigurācijā kā php_admin_value. Šādi iestatītu vērtību PHP skripts nevar mainīt ar ini_set(). GitHub
Vecākās Virtualmin versijās parametrs var nebūt pieejams. Ja saņem kļūdu Unknown parameter --fpm-admin-value, pirms turpināšanas nepieciešama Virtualmin versija, kas šo parametru atbalsta. Virtualmin Community
5. Pārbaudi rezultātu abās vietnēs
Katra domēna vietnes direktorijā izveido pagaidu failu check-basedir.php ar šādu saturu. Nodrošini, ka pārbaudes fails ir pieejams tikai administratoram:
<?php
header('Content-Type: text/plain; charset=utf-8');
echo 'open_basedir: ' . ini_get('open_basedir') . "\n";
Pārbaude jāveic, atverot failu pārlūkā attiecīgajā domēnā, lai redzētu vietnes PHP izpildē izmantoto vērtību. Pasted markdown
Piemēra adreses:
https://pirmais.lv/check-basedir.php
https://otrais.lv/check-basedir.php
Pirmajā vietnē sagaidāms:
open_basedir: /home/pirmais:/tmp
Otrajā vietnē sagaidāms:
open_basedir: /home/otrais:/tmp
Ja aiz open_basedir: vērtība ir tukša, šajā PHP pieprasījumā ierobežojums nav aktīvs. Pēc pārbaudes abus testa failus nekavējoties izdzēs. Pasted markdown
Ja izmaiņas nav redzamas
Pārbaudi, vai iestatījums piemērots pareizajam domēnam un PHP režīmam. Ja konfigurācija ir saglabāta, bet vietne vēl rāda iepriekšējo vērtību, pārstartē attiecīgā domēna FCGId PHP procesus vai pārlādē atbilstošo PHP-FPM servisu un atkārto pārbaudi. PHP galvenais konfigurācijas fails tiek nolasīts PHP palaišanas laikā. PHP Pasted markdown
Kas jāņem vērā pēc ieslēgšanas
Šajos piemēros /tmp ir atļauta pagaidu failiem, taču tā ir koplietota direktorija, nevis katra domēna privāta failu glabātuve. Ja lietojumprogrammai nepieciešama piekļuve vēl kādai direktorijai, pievieno tikai konkrēto nepieciešamo ceļu. Pasted markdown
Noslēgumā pārbaudi arī abu vietņu darbību. Ar pareizu vērtību konfigurācijā vien nepietiek — jāpārliecinās, ka vietnes turpina darboties bez failu piekļuves kļūdām. Pasted markdown
