我更喜欢将我的/home/dotancohen/
目录保留为权限0750
。但是,我确实需要 Apache 来访问/home/dotancohen/someProject/public_html/
.我知道我可以将主目录配置为0755
以及除~/someproject/
as之外的所有子目录___0
,但这很痛苦。我如何允许 Apache 访问该~/someproject/public_html/
目录,同时将主目录保留为0750
?
我尝试符号链接/war/www/someProject
到/home/dotancohen/someProject/
,但无论如何 Apache 都无法0750
跨越/home/dotancohen/
.我想我可以将www-data
用户(Apache)添加到该dotancohen
组中,但我觉得这赋予了它太多的权力。
或者,我可以保留网络文件,/var/www/someProject/
但由于其他原因,我更喜欢将它们保留在我的主目录下。
答案1
有几种不同的选项可供您选择。这是我能想到的;每个都有自己的优点和缺点。
您可以在父目录上设置世界执行位。这样,任何知道文件完整路径的人都可以访问该文件,但其他人则无法访问该文件。这仍然会留下众所周知的文件,除非你用更严格的权限来保护它们(像 ~/.bashrc、~/.gnupg、~/.Xauthority 等可能是攻击者感兴趣的,所以需要他们的权限收紧)。
您可以利用 ACL 以更细粒度执行相同的操作,例如,仅允许 www-data 用户或组对目录执行访问,对 Web 服务器需要提供内容列表的任何目录进行读/执行访问,以及对它应该提供的文件的读取权限。
您可以将 www-data 用户添加到 dotancohen 组,然后撤销组对除您希望 Apache 能够访问的内容之外的所有内容的权限。这可能是尽可能少地开放的最简单方法,但如果您已经将组权限用于其他目的,那么它会变得更加棘手。
或者,正如您所说,您可以将公开提供的文件完全移出您的主目录。这绝对是在权限方面最简单的设置,而且这肯定是我会做出的选择,除非有一些令人信服的理由不这样做。根据您的设置和特定需求,在具有适当所有权的公共根上使用 0750 或 0770 权限甚至可能是实用的,这将限制只有您自己和 Web 服务器的访问。自己的所有者、组 www-data 和权限 0710 贯穿这样一个目录树可能会尽可能严格,但这意味着 Web 服务器必须知道它将在该目录下访问的每个文件的全名。
顺便说一句,您可能需要考虑迁移到符合 FHS 标准的/srv而不是 /var。