0

对于我的虚拟主机面板,需要阻止用户访问他们自己目录之外的文件 ( /var/www/u/s/username)。我试图使用这一行httpd.conf来防止人们进入目录。

<Directory /var/www/users/>
php_admin_value open_basedir .:/usr/lib/php5
</Directory>

但是在php.ini,它似乎没有任何效果。我究竟做错了什么?

4

4 回答 4

2

这可能是一个愚蠢的建议,但您是否在更改 php.ini 后重新启动了网络服务器?

您可能会尝试使用的另一种方法是使用“auto_prepend_file”指令附加一个文件,以包含一个脚本以将 open_basedir 指令收紧到当前用户目录:

来自 PHP.net ( http://www.php.net/manual/en/ini.sect.safe-mode.php )

从 PHP 5.3.0 开始,open_basedir 可以在运行时收紧。这意味着如果在 php.ini 中将 open_basedir 设置为 /www/,则脚本可以在运行时使用 ini_set() 将配置收紧到 /www/tmp/

附加建议:

需要正确设置 Apache 配置以使 INI 覆盖生效。确保您在服务器或虚拟主机的 Apache 配置中设置了“AllowOverride Options”或“AllowOverride All”。

http://us2.php.net/configuration.changes

http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

于 2009-04-03T19:42:00.797 回答
1

您可能需要为每个用户目录添加一行:

<Directory /var/www/u/s/username>
php_admin_value open_basedir "/var/www/u/s/username/:/shared/path/"
</Directory>

请注意,尾部斜杠是为了防止用户“username”访问“username2”目录。

于 2009-04-14T11:08:16.340 回答
0
  1. 据我所知,它不是路径格式,它必须只是一个目录;
  2. 使用 ”。” 使用 open_basedir 完全没有意义,“。” 始终是当前目录。你可以chdir('/wherever/you/want'),有“。” 扩展为/wherever/you/want
于 2009-04-02T14:41:50.923 回答
0

很可能您正在修改错误的“php.ini”。

于 2009-04-02T15:57:39.253 回答