用户和PHP创建的文件的权限

时间:2015-05-03 00:08:34

标签: php linux ubuntu

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

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

然后用户可以使用该文件/目录执行他们喜欢的操作。

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

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

然后允许用户使用该文件/目录执行他们喜欢的操作。

所以我有两个选择:

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

2 个答案:

答案 0 :(得分:0)

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

如果你运行php-fpm(通过FCGI而不是mod-php),另一种选择是将suEXEC与SuexecUserGroup结合使用。在虚拟主机文件中,您必须通过

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

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

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

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

答案 1 :(得分:0)

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

相同的概念适用于Apache。

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