Миналата седмица конфигурирах един уеб сървър и тогава стигнах до тази настройка на php, на която ми се иска да обърна малко внимание. Използва се, за да се ограничи достъпа през php до една или повече дефинирани директории. С други думи, ако зададем open_basedir да бъде /var/www/myvhost/ то тогава през php ще имаме достъп единствено и само до файловете в директорията /var/www/myvhost/ и всички нейни поддиректории.
Особено полезно е, да не кажа задължително да прилагаме тези директива, когато използваме mod_php и имаме няколко виртуални хоста, принадлежащи на различни потребители. Проблема произтича от там, че файловете във всички виртуални хостове трябва да могат да бъдат достъпни чрез www потребителя (или друг, с който е конфигуриран да работи apache). Това означава, че всеки един потребител, може да напише php скрипт, който да чете файловете във виртуалните хостове на другите потребители. Става лошо, когато някой от тези „злонамерени“ потребители, прочете файла с настройките за достъп до базата от данни на някой друг потребител и съответно се сдобие с достъп до тази база от данни. За да предотвратим това да се случи, използваме open_basedir. За всеки един виртуален хост, задаваме open_basedir да бъде равно на съответната директория, в която е дефиниран този виртуален хост. По този начин всеки един потребител, ще може да достъпи само и единствено своите файлове посредством php.
Възможно е да задаваме повече от една директория за open_basedir, стига да ги отделим с две точки (или с точка и запетая, ако използваме windows). Всеки път, когато потребител се опита да достъпи файл извън директориите дефиниране чрез open_basedir, ще се генерира съобщение, което се записва в apache error лога. Хубаво е, в директориите които описваме да включим и директорията в която се съхранява session файловете. Ето и пример, за използването на open_basedir за произволен виртуален хост:
<VirtualHost *:80>
ServerAdmin my@email.com
DocumentRoot /www/saiman.thefreeart.com/httpd/
ServerName www.saiman.thefreeart.com
ServerAlias saiman.thefreeart.com<Directory /www/saiman.thefreeart.com/httpd/ >
php_admin_value open_basedir „/www/saiman.thefreeart.com/httpd/:/var/tmp/“Options Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
В заключение искам да кажа, че посредством open_basedir не се решават всички проблеми свързани със сигурността, safe_mode също не е достатъчно надежден, а и в php 6 ще бъде премахнат, остава Suhosin Patch, който според мен е задължителен за инсталиране.