Apache可写目录的权限最佳实践是什么?

6
有时我想允许用户通过Apache上传文件。我可以通过两种不同的方式设置权限,以便Apache可以将上传的文件写入目录。
1. 我可以使Apache正在运行的用户成为目录的所有者,使其看起来像这样: drwxr-xr-x 2 www admin 68 Sep 24 2007 uploadedfiles
2. 我可以给“其他人”写入权限,其中Apache是其他人之一: drwxr-xrwx 35 egbert admin 1190 Mar 9 13:17 uploadedfiles
这两个选项中哪一个更安全?

1
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。另请参阅我应该在哪里发布Dev Ops相关问题? - jww
5个回答

4
在IT技术中,最严格的访问权限是独占访问 www/admin,并设置权限为 0750,这样做总是最安全的。请注意,在上述权限掩码中,既不属于 www 也不是 admin 成员的用户根本无法访问目录内容;这是为了降低未经授权登录系统的非法用户获得用户上传的潜在机密信息的可能性
不要忘记,在大多数*nix平台上,您还有第三个极其灵活的选项,即使用setfacl设置ACL。 ACL是可以通过常规权限位和所有权方法实现的超集。当面对复杂的安全设置(包括每个用户的权限、默认所有权等)时,ACL是首选的选项 - 但您可能需要先在托管目录的卷的挂载选项中添加acl/etc/fstab中,参见man mount。如果两个或更多用户需要访问该目录而又不属于例如admin组,则可以选择使用ACL。

2

这里有两个问题需要问 - 首先,还有谁(如果有的话)需要访问这些文件?如果有其他处理这些文件的进程,它们运行为何种身份,并且如何与所选解决方案互动?如果没有其他进程或用户访问这些文件,我建议将apache用户设置为所有者,因为这是唯一需要的,并且遵循安全性中最古老的原则之一 - 只允许那些需要访问某些东西的人访问。


1
给他人读取权限也是一种安全风险。例如,WordPress中有一个包含数据库用户名和密码的文件。

1

如果该系统用于其他目的,您应该避免通过“其他人”授予权限。在此处允许权限基本上意味着运行在该计算机上或具有对该计算机的访问权限的任何其他内容都将具有对这些文件的权利。

另外,您可以创建一个附加组,并使Apache成为组成员,以及谁是管理员并更改组所有权为该组,然后给该组授予权限。如果使用组,则可能还需要在目录上设置“setgid”位。当设置了setgid位时,创建的任何文件都将获得父目录的相同组成员身份。


1
安全的一般规则是最小权限原则。您希望尽可能使用最少的权限。在这种情况下,第一个选项(由Apache可写)意味着只有在通过Apache用户入侵您的系统时才能将目录写入,而对于第二个选项(由所有人可写),任何帐户都可以被入侵并写入该目录。在这种情况下,我会选择第一个选项:
drwxr-xr-x 2 www admin 68 Sep 24 2007 uploadedfiles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接