有时我想允许用户通过Apache上传文件。我可以通过两种不同的方式设置权限,以便Apache可以将上传的文件写入目录。
我可以让用户Apache作为目录的所有者运行,所以它看起来像这样:
drwxr-xr-x 2 www admin 68 Sep 24 2007 uploadedfiles
我可以给“其他人”提供写入权限,其中Apache是其他人之一:
drwxr-xrwx 35 egbert admin 1190 Mar 9 13:17 uploadedfiles
其中一种比另一种更安全吗?
答案 0 :(得分:4)
限制性最强的访问,在这种情况下,对www/admin
的权限0750
进行独占访问,始终是最安全的。请注意,在上面的权限掩码中,不允许既不是www
也不是admin
成员的用户访问目录的内容;这是为了降低登录系统的未授权方获取用户上传的潜在机密信息的可能性。
不要忘记,在大多数* nix平台上,您还有第三个极其灵活的选项,即使用setfacl
设置ACL。 ACL是常规权限位和所有权方法可以实现的超集。在面对复杂的安全设置(包括每用户权限,默认所有权等)时,ACL是可供选择的选项 - 但您可能需要先在卷的安装选项中将acl
添加到/etc/fstab
托管您的目录,请参阅man mount
。如果两个或更多用户需要访问相关目录而不是admin
组的成员,则可以选择使用ACL。
答案 1 :(得分:2)
这里有两个问题要问 - 首先,还有谁(如果有人)需要访问这些文件?如果还有其他进程对这些文件起作用,那么它们是谁在运行,以及它将如何与所选解决方案进行交互?如果没有其他进程或用户访问文件,我会选择让apache用户成为所有者,因为这就是所有需要的,并且它遵循安全性中最古老的原则之一 - 只允许的人需要访问某些东西。
答案 2 :(得分:1)
如果系统用于其他目的,您应该避免通过“其他”授予权限。在此处允许权限基本上意味着在该计算机上运行的任何其他内容,或者访问该计算机将拥有这些文件的权限。
此外,您可以创建一个其他组,并使apache成为组成员,以及管理员,并将组所有权更改为该组,并授予该组权限。如果使用组,则可能还需要在目录上设置“setgid”位。设置setgid位后,创建的任何文件都将获得父目录的相同组成员身份。
答案 3 :(得分:1)
具有安全性的一般规则是至少是privilidge。您希望尽可能使用最小权限。在这种情况下,第一个选项(可由apache写入)意味着只有在您的系统通过apache用户泄露时才能写入目录,而使用选项二(每个人都可写),任何帐户都可能被泄露并写入目录。在这种情况下,我会选择选项一:
drwxr-xr-x 2 www admin 68 Sep 24 2007 uploadedfiles
答案 4 :(得分:1)
给予他人读取权限也存在安全风险。例如,Wordpress有一个包含数据库用户名和密码的文件。