所以我有一个用户foo
和组www-data
当用户手动创建文件/目录时,权限是:
foo:www-data --> rwx:r-x
然后用户可以使用该文件/目录执行他们喜欢的操作。
但是当我使用php创建文件或目录时,生成的权限是
www-data:www-data --> rwx:r-x
然后不允许用户使用该文件/目录执行他们喜欢的操作。
所以我有两个选择:
foo
添加到群组www-data
,但我有多个虚拟主机,我不希望他们能够编辑彼此的虚拟域(如果是甚至可能吗?!)777
,但这似乎是一个很大的“不是没有”。 (是吗?)我该怎么办?!
答案 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!