Linux

如何防止虛擬主機/網站上的 PHP 寫入同一 Apache 伺服器上另一個虛擬主機/網站的目錄?

  • December 12, 2018

我想阻止 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() 覆蓋。

引用自:https://serverfault.com/questions/944039