apache+php虚拟机目录权限管理
如果一个apache服务器中存在多个虚拟主机,想在站点目录之间进行隔离,提高安全性,个人总结最完善的方法如下:一、修改php.ini添加所有php要涉及到的目录白名单
二、apache虚拟机再单独配置每个站点php程序需要涉及到的目录
例:对以下三个站点进行隔离
/data/webroot/web1 t1.com
/data/webroot/web2 t2.com
/data/webroot/web3 t3.com
一、修改php.ini
open_basedir = "/tmp:/data/webroot/web1:/data/webroot/web2:/data/webroot/web3"
注:
1、如果不想对某个站点进行权限限制,也必须存在此目录,否则php文件无法访问
2、如果只配置了此参数,apache中不对虚拟机做任何配置,则会影响全局
3、如果真的想只配置php.ini,不对apache中的每个站点进行配置,可以使用"目录+多位随机码"格式这种不易被猜到的同级站点目录名,如:
open_basedir = "/tmp:/data/webroot/web1_8DS932:/data/webroot/web2_SF3SKG:/data/webroot/web3_90DLFD"
这种方法可能对存在很多虚拟机的服务器中比较简便。不推荐……
二、修改apache虚拟机配置文件
ServerAdmin webmaster@m.cn
DocumentRoot "/data/webroot/web1"
ServerName t1.com
php_admin_value open_basedir "/tmp:/data/webroot/web1"
ServerAdmin webmaster@m.cn
DocumentRoot "/data/webroot/web2"
ServerName t2.com
php_admin_value open_basedir "/tmp:/data/webroot/web2"
ServerAdmin webmaster@m.cn
DocumentRoot "/data/webroot/web3"
ServerName t3.com
php_admin_value open_basedir "/tmp:/data/webroot/web3"
(完成)
注:
1、如果只配置了php.ini则会影响“全局没有使用php_admin_value配置的站点”,但所有含有php程序的站点目录必须存在于php.ini白名单中。
2、如果不配置php.ini,只配置其中一台虚拟主机,那么其它站点还是不安全的。
页:
[1]