284354749 发表于 2018-11-25 12:39:00

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]
查看完整版本: apache+php虚拟机目录权限管理