0

userdirUbuntu Server 14.04上运行 Apache2 + 。用户通过 AD 验证,可以通过 SSH 成功登录到该服务器。每个用户$HOME700有权禁止用户更改和读取其他用户的文件。

目录/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是一个符号链接到public_html的用户目录jdoe43/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 目录的内容
  • 用户查看/修改另一个用户public_html目录的内容/home/public_html/

我尝试使用不同权限集的所有操作最终都导致 Apache 无法访问用户的权限,public_html或者用户至少拥有对其他用户$HOMEpublic_html.

我发现有几篇文章建议使用selinux并配置文件系统以通过权限拒绝访问其他用户的目录(就像我$HOME通过将其设置为700一样),同时授予Apache 进程(通过selinux)访问/home/public_html及其所有子目录。我还发现一些资源表明selinux在最近的 Ubuntu 版本中被替换为支持 . apparmor,因此,由于我在这项技术方面的经验有限,我决定推迟对其实施的任何行动。

任何建议/建议都将受到高度赞赏。谢谢你。

4

1 回答 1

0

可能有一个 selinux 布尔值可以让你相对轻松地做这样的事情。

ubuntu wiki 会将您发送到 debian SELinux 页面,该页面确认它们使用与其他发行版相同的 refpolicies(当然)。我刚刚检查了 apache 的政策,布尔值就在那里。如果您已经拥有启用 selinux 的 ubuntu,您可以轻松检查布尔值是否启用

getsebool httpd_enable_homedirs

并检查布尔值是真还是假(默认为假)。

如此处所示启用 UserDir 后,您需要启用布尔值

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 上尝试一下,看看效果如何。

希望这可以帮助!

于 2015-05-11T14:03:17.537 回答