背景 我最近在我有root权限的主机上设置了一个基于php的站点。我已经根据linode.com上的指南安装了一个灯泡设置,我现在想知道如何处理php文件权限,目录权限以及哪些用户应该在哪些组中运行哪些进程。
特别是我想回答一个问题“如何配置关于ACL,所有权和产品ID的标准php网站?”
目前,任何目录列表都会返回以下内容:
-rw-r--r-- 1 root root 70 Nov 8 17:17 index.php
即。 root
所有者,root
群组,模式644
/ uw & ar
。 ([编辑]不应该如何,因为不应该使用root创建文件 - 这个问题的部分原因)
运行ps -auxww
我看到Apache Web服务器以名为www-data
的用户身份运行,因此我可以假设php将以同一个用户身份运行(可能是一个将继承同一用户的子进程) )。
如果我在所有文件上设置chmod 640
,并将自己(用户bob
)设置为所有者,那么创建一个名为productionIDs
的组包含{{1} } user,将文件组设置为www-data
?
对我来说,这在最小特权方面会更安全;除了我自己和网络服务器之外还有谁?只有我需要编写文件,而Web服务器只需要阅读。没有其他人需要做任何事情。
我的设置无法处理有多个开发人员的情况,但我不确定这种情况应该是什么样的。
那么productionIDs
所有者我是组web服务器组有任何风险吗?如果是,相应的目录640
是否也安全?
如果没有,为什么没有更多人使用此配置?
[更新]在下试试看理论,它有效。所以问题现在包括“这个配置不允许什么/这个配置的缺点”方面。
答案 0 :(得分:2)
首先,您的文件绝对不应归root用户所有:root。从所有权的用户名和通用组开始。
虽然最初Web服务器用户只需要对您的文件进行读/执行访问,但肯定会出现该用户可能需要对特定文件夹进行写访问以进行上载或应用程序日志等的情况。
因此,我们对PHP应用程序的典型设置是文件644(640也很好)和文件夹755(750也可以)。请注意,出于几个原因,我们将文件保留为每个人都可读。首先,它允许其他用户在服务器上审计代码而无法修改它。其次,我们在生产托管服务器上只有开发人员用户,因此拥有帐户的任何人都具有查看所有代码的信任级别。这种情况可能在另一种情况下有所不同。
关于使用Web服务器组作为组所有者的问题,我们通常不会这样做。虽然您当然可以使用该组,但我们希望单独保留所有系统安装的组,并为应用程序文件创建特定的组。然后我们只需将Web服务器用户添加到新组中。