我怎么能像这样写open_basedir - > open_basedir ='var / home / * /'

时间:2010-01-14 09:43:36

标签: security php open-basedir

如你所知。你必须写open_basedir = '/var/home'

我想这样写:open_basedir = '/var/home/*/'

我想要的是php应该限制每个不同目录的主目录中的每个目录。

简短的问题:我怎么能这样写open_basediropen_basedir = 'var/home/*/'

非常感谢。

2 个答案:

答案 0 :(得分:1)

如果要将PHP限制为每个用户自己的主目录,则需要进行PHP设置:

  1. PHP使用用户凭据运行
  2. PHP接受每用户配置
  3. 典型情况是CGI(或FastCGI)设置,而不是将PHP作为Apache模块运行。然后,您可以为每个用户提供自定义的php.ini文件。

    顺便说一下,我还没有测试过,但也许open_basedir = "~"按预期工作......

    ======编辑======

    OP的评论引起的一些澄清:

    1. 在Unix shell中,“〜”是“当前用户的主目录”的同义词,所以如果你是john则是“/ var / home / john”,如果你是“/ var / home / michael”迈克尔。 “var / home /〜/”没有特殊含义:它只是一个名为〜的目录。

    2. 许多程序都使用此shell约定。我不知道PHP是否会这样做。

    3. CGI允许在服务器上执行任意程序,因此它不如静态HTML安全,就像滑板比航天飞机安全性差一样。但我们不是在谈论执行任意程序:我们正在谈论执行PHP解释器。它将像PHP和您的环境一样安全。

    4. 如果您对此主题感兴趣,可以使用Google FastCGI(具有增强性能的CGI实施)。许多托管服务提供商都在使用它。

答案 1 :(得分:0)

你可以。您必须在指令中指定每个路径:

open_basedir = "/var/home/path1/:/var/home/path2/:/var/home/path3/"