在运行 Apache2 + userdir 的 Ubuntu 服务器 14.04 上保护 $HOME 和 public_html
Posted
技术标签:
【中文标题】在运行 Apache2 + userdir 的 Ubuntu 服务器 14.04 上保护 $HOME 和 public_html【英文标题】:Securing $HOME and public_html on Ubuntu server 14.04 running Apache2 + userdir 【发布时间】:2015-05-10 02:10:36 【问题描述】:我在 Ubuntu Server 14.04 上运行 Apache2 + userdir
。用户通过 AD 验证,可以通过 SSH 成功登录到该服务器。每个用户$HOME
都拥有700
权限,不允许用户更改和读取其他用户的文件。
目录 /home/public_html
归 Apache (www-data:www-data
) 所有,并拥有 775
权限,因此每个用户(www-data
组的成员)都可以在他/她的用户名下的 /home/public_html
中创建自己的子目录并创建符号在他/她的$HOME
中链接到它。以下是用户名jdoe43
的示例用户示例:
/home/Domain/jdoe43
是 $HOME 目录(权限为 700)
/home/public_html/jdoe43
是用户jdoe43
的public_html
目录,符号链接到/home/Domain/jdoe43/public_html
UserDir
指令设置为/home/public_html
。 userdir.conf
的其余部分默认为 Ubuntu 安装,下面列出以供参考:
<IfModule mod_userdir.c>
UserDir /home/public_html
UserDir disabled root
<Directory /home/public_html/*>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
</IfModule>
我期待找到合适的权限集允许
Apache 进程访问/home/public_html/*
中的文件
用户可以完全控制自己的public_html
目录
同时禁止
一个用户查看/修改另一个用户的 $HOME 目录的内容 用户查看/修改位于/home/public_html/
中的另一个用户的public_html
目录的内容
我尝试使用不同的权限集的所有结果要么是 Apache 无法访问用户的 public_html
,要么是用户至少拥有对其他用户的 $HOME
或 public_html
的读取权限。
我发现有几篇帖子建议使用 selinux 并配置文件系统以通过权限拒绝访问其他用户的目录(就像我对$HOME
所做的那样)将其设置为700
),同时授予 Apache 进程(通过selinux
)访问/home/public_html
及其所有子目录。我还发现一些资源指出,最近版本的 Ubuntu 中的 selinux
已被 apparmor
取代,因此,由于我在这项技术方面的经验有限,我决定推迟对其实施的任何行动。
非常感谢任何建议/建议。谢谢。
【问题讨论】:
Ubuntu 或 serverexchange 是回答这个问题的最佳场所。 【参考方案1】:可能有一个 selinux 布尔值可以让你相对轻松地做这样的事情。
ubuntu wiki 会将您发送到 debian SELinux 页面,该页面确认它们使用与其他发行版相同的 refpolicies(当然)。我刚刚检查了 apache 的政策,布尔值就在那里。 如果您已经有一个启用 selinux 的 ubuntu,您可以轻松检查布尔值是否启用
getsebool httpd_enable_homedirs
并检查布尔值是真还是假(默认为假)。
如图here,开启UserDir后需要开启boolean
setsebool -P httpd_enable_homedirs true
并为每个用户重新标记目录
chcon -R -t httpd_sys_content_t /home/testuser/public_html
请注意,public_html 目录上的 unix 权限仍为 755 或您的用户/组设置所需的任何值。
chown testuser:testuser /home/testuser/public_html
chmod 755 /home/testuser/public_html
如果您希望采用 SELinux 方式,那么您需要这样做;我对 AppArmor 和其他替代品了解不多,但正如你所说,Ubuntu wiki 对 selinux 的支持不是很清楚。
如果您有空闲时间,我建议您在测试 VM 上试用一下,看看效果如何。
希望这会有所帮助!
【讨论】:
以上是关于在运行 Apache2 + userdir 的 Ubuntu 服务器 14.04 上保护 $HOME 和 public_html的主要内容,如果未能解决你的问题,请参考以下文章
`Apache` `localhost/~username/` 不工作
`Apache` `localhost/~username/` 不工作