我在过去一年左右的时间里一直在学习 Linux 操作系统,但我仍然对不同配置的权限如何变化感到非常困惑。我正在尝试设置本地开发环境,这样做时我注意到在生产 VPS (CentOS) 上,我的文件/目录权限的行为与本地设置 (Mint) 不同。
远程服务器文件结构已设置为所有者和组myuser:myuser
,目录的 rwx 权限设置为 755,文件的 rwx 权限设置为 644,这可以很好地满足网站的要求。但是,我必须将www-data:www-data
某些文件夹的所有权和权限更改为 777,才能使其在本地正常工作。我已将 myuser 添加到 Apache 组,但问题仍然存在。
这让我相信我的本地 shell 用户与本地 Apache 用户不同,而在远程系统上,shell 和 Apache 用户是相同的。这是正确的吗?
我担心更改这些设置的安全影响。我读到您不应该授予网络服务器写入权限。然而,drupal 需要它在名为“files”的文件存储库目录中,尽管远程系统文件由(并且如果该用户是 Apache 用户)拥有,myuser:myuser
但这是否意味着 Web 服务器仍然具有写访问权限?
那么什么决定了这些用户应该如何设置呢?我假设我将更改 Apache 运行用户和/或组,但有人可以解释这样做的方法和最佳实践吗?相同的规则是否适用于本地和远程?
答案1
您基本上是在问两个不同的问题。
如何在本地系统上设置权限以镜像生产系统?
您需要了解服务器配置 - 在本例中它包括 http 守护程序(
httpd
在本例中又名 Apache)的配置 - 通常在/etc/httpd
或中找到/etc/apache
。您还需要知道守护进程使用什么凭据运行。然后您应该能够以完全相同的方式设置本地权限,或者有效地以同样的方式(即不同的用户/组名称,但当守护程序请求文件时具有相同的访问权限),HTTP 守护进程的写权限可以吗?
依靠。一般来说,守护进程编写得越少越好。另一方面,在大多数情况下(除非提供静态/只读内容)它是不可行的。如果是这种情况,有几种强化系统的方法:
在特殊用户下运行守护程序,该用户仅具有对文档根目录的读取访问权限,并且仅在必要时具有写入访问权限(扩展 ACL 实用程序
getfacl
/setfacl
是您的朋友)。在 Linux 上,您还可以使用其他安全模型(GRSecurity/SELinux/AppArmor/...)。正确编写的数据处理 - 对虚假输入的合理处理。在这种情况下“理智”方法“什么都不写”。
通过“代理”进行写访问 - 具有执行部分(模型在经常使用的MVC模式在一个单独的过程中不会损害安全性(但必须正确实施才能产生任何好处)。