我想知道设置目录 /var/www/example.com 及其中所有文件的权限的正确方法是什么。整个服务器将仅用于设置我的网站,因此我不确定是否有必要为每个网站创建一个新用户。Apache 以 www-user:www-user 的形式运行。如果您能从安全角度解释一下就更好了。
编辑 看来我确实需要以独立用户的身份运行 2 个网站,因为其中一个网站必须尽可能安全,并尽可能与另一个网站隔离,而我认为后者更容易受到攻击 (vbulletin 论坛)。通过不太安全的网站来破坏本应安全的网站对我来说是不可接受的。
答案1
我使用 apache-itk,每个站点都有一个单独的用户。由于每个新请求都必须以该用户的身份启动一个新进程,因此会产生额外的开销,但从安全角度来看,这确实使事情变得简单得多,因为一个特定站点无法访问另一个站点的文件。如果某个特定站点消耗了太多资源等,它也会有所帮助。
在 Debian/Ubuntu 上:
apt-get install apache2-mpm-itk
然后加:
<IfModule mpm_itk_module>
AssignUserId USER GROUP
</IfModule>
在您的 apache2 的 VirtualHost 中,将 USER 和 GROUP 替换为您自己的。
答案2
如何设置权限取决于您的安全和威胁模型。我们不知道这些是什么。
但一般来说,文件/目录应该只对需要读取它们的 uid 可读,也应该只对需要写入它们的 uid 可写。有时,这并不总是适合直接映射到 Unix 权限模型,因此通常适用的下一个原则是意外信息泄露通常比未经授权的数据修改更可取。
在您的情况下,这意味着 Web 服务器文档树中的任何文件/目录都不应由 Web 服务器 uid 写入。在某些情况下,这可能需要将文件系统挂载为只读。但显然,当您想要更改内容时,这会让事情变得更加复杂。那么谁会更改内容呢?如果是单个用户(并且始终是单个用户),那么您的权限可能是:
-rw-r----- devuser wwwuser somefile
drwxr-s--- devuser wwwuser somedir
因此,您的网络服务器通过组所有权获得访问权限。粘性组位确保创建的目录/文件继承相同的组。
如果有多个用户更改文件,则将他们全部添加到一个组(例如,webdev)并通过“其他”权限使网络服务器访问:
-rw-rw-r-- devuser webdev somefile
drwxrxsr-x devuser webdev somedir
当然,还有其他工具可以进一步增加权限分离 - 但我只会在您设置共享主机并需要隔离每个虚拟主机时才会考虑查看这些工具。
答案3
如果您是唯一一个使用 Web 服务器的人,那么像 mpm_itk 之类的东西就太过分了。
只需将权限设置为与 Web 服务器/php 运行相同的用户(在您的情况下为 www-user:www-user)。
隔离权限的唯一原因是,如果运行另一个网站的 Web 服务器也遭到黑客攻击,则保护一个网站免遭黑客攻击。如果所有网站都是你的,那么这根本不是什么大问题。
我看到很多演练似乎都暗示您必须设置这样的安全性,不这样做很危险。这完全不是事实。www-user 用户无权访问服务器上除 Web 服务器目录之外的任何内容,因此将 Web 根目录及其下方的所有内容设置为 770/660 和 www-user:www-user 是绝对安全的。
最糟糕的情况是,您的一个虚拟主机被黑客入侵,他们会清除其他虚拟主机上的所有内容,但无论如何,您都需要恢复整个服务器,因为任何入侵都意味着您无法信任它。
当然,如果您为其他人托管东西,或者如果您有很多用户登录并且他们想要自己独立的 Apache 东西,那么您需要考虑一些选择,但是对于具有几个虚拟主机的个人服务器来说,将所有内容留给 Web 服务器用户拥有并没有错。