Red Hat 8.0上有运行PHP权限的Apache的虚拟主机安全问题。

发表于:2007-05-25来源:作者:点击数: 标签:
我先简单说说我的配置过程一下: A、我在/etc/hosts文件中添加了如下内容 127.0.0.1www.aaa.com 127.0.0.1www.bbb.com B、我在/var/www/html/下建了www.aaa.com及www.bbb.com两个目录,在www.aaa.com下有个 PHP 文件(1.php)内容如下: ?php include"../w

我先简单说说我的配置过程一下: 

A、我在 /etc/hosts 文件中添加了如下内容 
127.0.0.1 www.aaa.com 
127.0.0.1 www.bbb.com 

B、我在 /var/www/html/ 下建了 www.aaa.com 及 www.bbb.com 两个目录,在 www.aaa.com 下有个PHP文件(1.php)内容如下: 
<?php 
include "../www.bbb.com/2.php"; 
echo $file; 
?> 
在 www.bbb.com 下有个2.php文件,内容如下: 
<?php 
$file="2.php"; 
?> 

C、apache的httpd.conf的虚拟主机设置如下


<VirtualHost 127.0.0.1>
ServerAdmin sc@lin.net.cn
DocumentRoot /var/www/html/www.aaa.com/
ServerName www.aaa.com 
</VirtualHost>

<VirtualHost 127.0.0.1>
ServerAdmin sc@lin.net.cn
DocumentRoot /var/www/html/www.bbb.com/
ServerName www.bbb.com 
</VirtualHost> 

重启动apache后,在IE中看http://www.aaa.com/1.php的输出结果是:2.php 
这说明 www.aaa.com 虚拟主机中的文件已经读取了它目录以外的文件。如何防止这种情况的出现? 

我试图将 
<VirtualHost 127.0.0.1> 
ServerAdmin sc@lin.net.cn 
DocumentRoot /var/www/html/www.aaa.com/
ServerName www.aaa.com 
</VirtualHost> 
改为 
<VirtualHost 127.0.0.1> 
ServerAdmin sc@lin.net.cn 
DocumentRoot /var/www/html/www.aaa.com/
ServerName www.aaa.com 
<Directory "/var/www/html/www.aaa.com/"> 
php_admin_value safe_mode 0 
php_admin_value open_basedir "/" 
</Directory> 
</VirtualHost> 

可是这样一改。Apache就报错,启动不了。 
请问我改怎么做?才能达到每个虚拟主机下的PHP文件只能读取其根文档下(如 /var/www/html/www.aaa.com/ )的文件,谢谢!



另:我在win2000上也遇到一样的情况:http://chinaunix.net/forum/viewtopic.php?t=158615&highlight=myblessu

 haohaoo 回复于:2003-09-18 17:52:22
2000的就容易解决,需要的话我可以帮你
linux的我就找不到办法,不过我代理了套软件就成功解决了这个问题。
好象要先实现apache的chroot,再实现单个虚拟主机的chroot

 myblessu 回复于:2003-09-19 08:01:42
haohaoo :
你好,你是说要那软件来解决吗? 那软件多少钱呀.

 HonestQiao 回复于:2003-09-19 12:27:15
apache2+php4.3>可以实现的哦,看看手册

 myblessu 回复于:2003-09-19 13:15:56
我的就是 apache 2.0.46 与php 4.3.3 ,我就是看到php.net上将的是

增加php_admin_value open_basedir "/" 
可我一加apache就报错。请各位帮忙。

 myblessu 回复于:2003-09-23 16:11:50
up

 HonestQiao 回复于:2003-09-23 18:33:04
报错可是我不知道你报的身边么错啊???

 haohaoo 回复于:2003-09-23 23:16:43
[quote:61ee40d2d0="myblessu"]haohaoo :
你好,你是说要那软件来解决吗? 那软件多少钱呀.[/quote:61ee40d2d0]     
2000多,需要的话可以联系我,我代理
可惜核心技术我不知道啊,知道的话大家有可以免费了。
QQ:9032121

 myblessu 回复于:2003-09-24 08:05:58
haohaoo:主要学学apache,花钱买软件就算了.

HonestQiao:

我不知道apache具体报什么错,只要我一加上php_admin_value open_basedir "/" 或加上php_admin_value safe_mode 0就起不来了,apache提示说:the requested operation has failed!

 myblessu 回复于:2003-09-24 08:41:58
在RedHat 8.0下

apache的报错信息是:

Syntax error on line 1042 of /etc/httpd/conf/httpd.conf:
php_admin_value not allowed here

怎么办?不支持php_admin_value呀?

 carolson 回复于:2003-09-25 18:41:08
up

 carolson 回复于:2003-09-25 19:01:03
我的问题更严重些
如果上面的虚拟主机不多 则可以 在 定义vhost 的时候定义每一个vhost的
base

我的问题是 php
vhost 只一个url
比如xxx.xx.com
则 xxx.xx.com/~user1
如何无法访问 xxx.xx.com/~user2 呢?

谢谢。

 freeand 回复于:2003-09-26 10:34:58
帮你T

 myblessu 回复于:2003-11-04 15:04:18
终于明白了,查看php文档后,原来是由于安装方式的不同引起的.

原来我的php是CGI方式安装的,所以下面的设置错误.

<VirtualHost 127.0.0.1>
    ServerAdmin sc@lin.net.cn
    DocumentRoot /var/www/html/www.aaa.com/
    ServerName www.aaa.com
    <Directory "/var/www/html/www.aaa.com/">
php_admin_value open_basedir /var/www/html/www.aaa.com/
    </Directory>
</VirtualHost>

当我把php该为模块方式安装时,上面的配置就成功了.而且我想到达的安全目的也到达了.

 geel 回复于:2003-11-04 15:30:59
???

open_basedir 记得在php.ini中也可以设置。

如果按照cgi方式,perfork的话用apache传统的suexec也可以

carolson  的问题;
可以不用vhost,在servername里面(等于win2k的默认站点)

 myblessu 回复于:2003-11-04 15:58:57
open_basedir 是在php.ini中也有这么一项,但如果在php.ini中设置是所有主机都同样一个设置,同样可以打开同一个目录,所以我要放在虚拟主机中去设置.

 geel 回复于:2003-11-05 09:00:07
是啊,这个问题我一直在想,不过没去做,今天你的帖子我收藏了,哈哈

不过如果还要支持perl cgi,怎么设置权限呢

 木目子 回复于:2003-11-06 15:56:25
<VirtualHost www.aaa.com> 
ServerAdmin sc@lin.net.cn 
DocumentRoot /var/www/html/www.aaa.com/ 
ServerName www.aaa.com 
</VirtualHost> 

<VirtualHost www.bbb.com> 
ServerAdmin sc@lin.net.cn 
DocumentRoot /var/www/html/www.bbb.com/ 
ServerName www.bbb.com 
</VirtualHost> 
试试,应该没有问题的!

 geel 回复于:2003-11-06 16:16:15
这样如果允许bbb.com execCGI的话还是可以读取到../html/www.aaa.com的东西

 jhsea3do 回复于:2003-11-08 00:26:01
我有些inc文件就是放在外面的阿....

原文转自:http://www.ltesting.net