我想阻止虚拟主机#1写入或读取虚拟主机#2,同时又完全不失去对 www 数据的写入权限(因为应用程序需要写入目录)。
我当前的站点配置如下:
<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 密码。
答案1
使用 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() 覆盖。