Linux
如何防止虛擬主機/網站上的 PHP 寫入同一 Apache 伺服器上另一個虛擬主機/網站的目錄?
我想阻止 virtualhost #1 寫入或讀取 virtualhost #2 而不會失去對 www-data 的寫入訪問權限(因為應用程序需要寫入目錄)。
我目前的站點配置如下所示:
<VirtualHost *:80> ServerName example.com ... DocumentRoot /var/www/example.com/public/ ... </VirtualHost> <VirtualHost *:80> ServerName example.org ... DocumentRoot /var/www/example.org/public/ ... </VirtualHost>
兩者都具有以下類型的權限:
drwxrws--- webmaster-com www-data example.com drwxrws--- webmaster-org www-data example.org
我的問題是執行的 PHP 程式碼/腳本
example.org
可以讀取example.com
網站的配置,其中通常包含 MySQL 密碼。
使用 PHP 配置指令
open_basedir
。
open_basedir string
將 PHP 可以訪問的文件限制在指定的目錄樹中,包括文件本身。該指令不受安全模式是打開還是關閉的影響。
要為每個虛擬主機配置它,請使用
php_admin_value
如下配置指令:<VirtualHost *:80> ServerName example.com ... DocumentRoot /var/www/example.com/public/ php_admin_value "open_basedir" "/var/www/example.com/" ... </VirtualHost> <VirtualHost *:80> ServerName example.org ... DocumentRoot /var/www/example.org/public/ php_admin_value "open_basedir" "/var/www/example.org/" ... </VirtualHost>
一定要使用
php_admin_value
而不是簡單php_value
,因為:
php_admin_value name value
設置指定指令的值。這不能在 .htaccess 文件中使用。任何使用 php_admin_value 設置的指令類型都不能被 .htaccess 或 ini_set() 覆蓋。