PHP 配置open_basedir 让各虚拟站点独立运行

2015-01-24信息快讯网

好几年前,我在抱怨Apache运行PHP的安全性不行,只要一个站点被人拿下,服务器上的其他站点就会跟着遭殃。

当时觉得这跟IIS相比,实在太差了,因为在IIS里,可以在安全性里设置一个站点甚至一个目录访问时使用的匿名账号,只要各个站点使用的账号不一样,站点间的安全就不会互相影响。这几天才发现,原来当时的想法是错的,在Apache下,也可以配置PHP来实现各站点间的相互独立运行,虽然不能详细控制以某个用户运行某个站点,但至少不会再出现整个服务器被拿下的局面。

通过配置PHP的open_basedir即可以实现该控制,这个配置在IIS下也有用,但这里只讲Apache下的配置。

open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也
可用符号"."来代表当前目录。open_basedir也可以同时设置多个目录, 在Windows中用分号分隔目录,在任何其它系统中用
冒号分隔目录。当其作用于Apache模块时,父目录中的open_basedir路径自动被继承。以下以Linux系统下的配置为例

方法一:在php.ini里配置
open_basedir = .:/tmp/

方法二:在Apache配置的VirtualHost里设置
php_admin_value open_basedir .:/tmp/

方法三:在Apache配置的Direcotry里设置
php_admin_value open_basedir .:/tmp/

关于三个配置方法的解释:
a、方法二的优先级高于方法一,也就是说方法二会覆盖方法一;方法三的优先级高于方法二,也就是说方法三会覆盖方法二;
b、配置目录里加了“/tmp/”是因为php默认的临时文件(如上传的文件、session等)会放在该目录,所以一般需要添加该目录,否则部分功能将无法使用;
c、配置目录里加了“.”是指运行php文件的当前目录,这样做可以避免每个站点一个一个设置;
d、如果站点还使用了站点目录外的文件,需要单独在对应VirtualHost设置该目录;

设置完成后,记得找个PHP网马(如:phpspy)来玩一玩,测试一下有没有问题,不出意外,权限应该是控制得相当好的。
大家还有什么PHP安全配置的经验,欢迎分享交流。
php控制linux服务器常用功能 关机 重启 开新站点等
PHP动态创建Web站点的方法
php连接数据库代码应用分析
PHP文件上传原理简单分析
php修改时间格式的代码
PHP第一季视频教程(李炎恢+php100 不断更新)
PHP获取文件绝对路径的代码(上一级目录)
mac下使用brew配置环境的步骤分享
rrmdir php中递归删除目录及目录下的文件
FirePHP 推荐一款PHP调试工具
关于session在PHP5的配置文件中的详细设置参数说明
php下安装配置fckeditor编辑器的方法
zend framework多模块多布局配置
php5 apache 2.2 webservice 创建与配置(java)
从php核心代码分析require和include的区别
深入理解PHP之require/include顺序 推荐
《Head First 设计模式》代码之PHP版(面向对象学习)第1/2页
PHP 程序员的调试技术小结
php $_SERVER当前完整url的写法
php利用header函数实现文件下载时直接提示保存
php header 详细使用说明与使用心得第1/2页
计算一段日期内的周末天数的php代码(星期六,星期日总和)
php 分库分表hash算法
php download.php实现代码 跳转到下载文件(response.redirect)
PHP 配置文件中open_basedir选项作用
phpmyadmin MySQL 加密配置方法
Windows PHP5和Apache的安装与配置
phpMyAdmin 安装配置方法和问题解决
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
PHP mkdir()定义和用法
php include,include_once,require,require_once
PHP下用rmdir实现删除目录的三种方法小结
如何跨站抓取别的站点的页面的补充
建立动态的WML站点(二)
建立动态的WML站点(一)
建立动态的WML站点(三)
用PHP实现小型站点广告管理
©2014-2024 dbsqp.com