【问题标题】:Permissions for files created by the user and PHP用户和 PHP 创建的文件的权限
【发布时间】:2015-05-03 00:08:34
【问题描述】:

所以我有一个用户 foo 和组 www-data 当用户手动创建文件/目录时,权限是:

foo:www-data --> rwx:r-x

然后用户可以使用该文件/目录做他们喜欢的事情。

但是当我使用 PHP 创建文件或目录时,生成的权限是

www-data:www-data --> rwx:r-x

然后不允许用户使用该文件/目录做他们喜欢的事情。

所以我有两个选择:

  1. 我曾考虑将用户 foo 添加到组 www-data 但我有多个虚拟主机,我不希望他们能够编辑彼此的虚拟域(如果这甚至可能?!)
  2. 我还考虑过在使用 PHP 创建文件夹时,我会将权限设置为 777,但这似乎是一个很大的“不不”(是吗?)

我该怎么办?!

【问题讨论】:

  • 我不明白你在第一个选项中所说的......每个虚拟主机都有不同的用户吗?

标签: php linux ubuntu


【解决方案1】:

您真正想做的是将不同的虚拟主机作为不同的用户运行。这是 nginx 的一些有用答案的链接:https://serverfault.com/questions/370820/user-per-virtual-host-in-nginx

同样的概念也适用于 Apache。

编辑: 当我阅读它们时,我并不清楚答案,并且 cmets 中有很多信息。 @Ricalsin 的第二个答案非常有用,并且有一个我使用的链接。一定要重启php-fps和nginx!

【讨论】:

    【解决方案2】:

    您可以在创建目录后使用 phps chown() 函数更改所有者。见http://php.net/manual/en/function.chown.php。但是您可能需要特殊权限才能成功使用该功能,这可能会带来安全问题。


    如果您正在运行 php-fpm(通过 FCGI 而不是 mod-php),另一个选项是结合使用 suEXEC 和 SuexecUserGroup。在您的虚拟主机文件中,您必须通过

    将用户和组分配给虚拟主机
    SuexecUserGroup exampleuser examplegroup
    

    激活该指令后,php 创建的所有新目录和文件都将具有指定的用户/组组合。这就是来自德国的知名网络主机如何做到这一点,请参阅uberspace documentation(仅限德语​​)。更多一般信息可以在here找到。

    使用此解决方案,您将自动避免许多安全风险。不需要 777 权限,不可能看到彼此的文件等。

    因为使用这种方法,每个用户都将拥有自己的 php 实例运行,允许他们使用不同的 php 解释器版本或自己的 php.ini 文件非常简单和安全。

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多