在运行 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 是用户jdoe43public_html 目录,符号链接到/home/Domain/jdoe43/public_html

UserDir 指令设置为/home/public_htmluserdir.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,要么是用户至少拥有对其他用户的 $HOMEpublic_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/` 不工作

Apache功能之userdir

如何从 mod_userdir 链接中删除 ~?

从 google chrome userdir (>=20) 恢复会话 cookie

如何从安装在Ubuntu 18.04 VirtualBox上的Wordpress Web界面编写/上传