Apache SELinux强制执行未遵守httpd_enable_homedirs->;关

Apache SELinux强制执行未遵守httpd_enable_homedirs->;关,apache,permissions,fedora,virtual-directory,selinux,Apache,Permissions,Fedora,Virtual Directory,Selinux,为什么我可以访问http://localhost/~myusername在Fedora20中,如果httpd\u enable\u homedirsboolean设置为off,SELinux设置为强制执行? 以下是关于httpd\u enable\u homedirs布尔值的直接摘录: 默认情况下,不允许httpd访问用户的主目录。如果 您希望允许访问用户的主目录,您需要设置 httpd_enable_homedirs boolean并更改所创建文件的上下文 你想让人们从家里直接进入 我在/ho

为什么我可以访问
http://localhost/~myusername
在Fedora20中,如果
httpd\u enable\u homedirs
boolean设置为off,SELinux设置为强制执行?

以下是关于
httpd\u enable\u homedirs
布尔值的直接摘录:

默认情况下,不允许httpd访问用户的主目录。如果 您希望允许访问用户的主目录,您需要设置 httpd_enable_homedirs boolean并更改所创建文件的上下文 你想让人们从家里直接进入

我在
/home/user/
目录中有一个目录,该目录是我在先前版本(F19)中设置的,用于在服务器上提供内容/文件(
/home/user/public\u html
),标有标签
httpd\u user\u content\t
。该目录属于
reg_用户:apache
;“普通用户”是
apache
组的一部分

然而,基于SELinux文档,我假设我将无法访问
http://localhost/~reg_user/
除非上述布尔值从关闭切换到打开;然而,在
强制执行
模式下,我可以在没有任何提示/错误的情况下执行。我的假设一开始真的有缺陷吗,或者我的本地SELinux策略中是否存在安全风险

顺便说一句:服务器托管在
/var/www


故障排除 将目录的组所有权更改回
reg\u用户
的组后,与
httpd\u enable\u homedirs
布尔值的行为没有明显差异。但是,我有一个服务器的配置文件,指定要提供/映射到
http://server/~username

<IfModule mod_userdir.c>
    UserDir public_html
</IfModule>

有趣的是,因为我只是朝相反的方向点击了它-我无法获得
http://server/~user/
来服务,直到我翻转了那个布尔值。我得到了搜索和getattr的httpd AVC拒绝(
/home/user
),并且
/var/log/httpd/error\u log
显示了错误AH00035(路径上缺少搜索权限)。但是,在我的情况下,文件和用户都不是apache组的所有者/成员。(在翻转布尔值后,也不需要这样做。公共html树具有上下文
httpd\u user\u content\t
。)也许apache组使用是“绕过”SELinux的homedir逻辑?我不确定服务器上的问题是什么,但这肯定不是正常情况。您提到的配置(/etc/httpd/conf.d/userdir.conf)是Fedora apache发行版的标准部分,每个人都有相同的配置,它绝对不应该像你所说的那样绕过SELinux。事实上,我刚刚尝试将我的$HOME/public_html树转换为apache,但布尔值仍然受到尊重(因此,我的猜测是错误的).sudo setsebool httpd_enable_homedirs off,重新加载时出现即时403错误。sudo setsebool httpd_enable_homedirs on,内容再次可见。-FeRD 2月26日0:18hmm…我仍将httpd_enable_homedirs布尔设置为off,但服务器继续通过loca显示/home/user/public_html位置中包含的文件夹列表lhost/~myusername。可能是另一个服务允许它?这是可能的吗?或者是另一个布尔值?即使布尔值打开/工作(或者,也许我应该说,“不考虑SELinux”),用户的homedir上也需要perms 711,而
$user/public_html
上至少需要755,否则您将得到禁止的错误。httpd(作为apache:apache运行)必须具有对
$USER/public\u html/
的目录浏览访问权限,否则它无法提供其中的内容。这在
/etc/httpd/conf.d/userdir.html
顶部的评论中讨论过。您可以尝试以root用户身份运行以下命令:
查找/etc/selinux-print0 | xargs-0-n10 rpm-qf
-这会让您知道如果selinux中安装了任何外来的东西,以及应该安装的东西的来源。(几乎所有的东西都属于
selinux策略目标-$FOO-$BAR.noarch
,通常情况下。)也许安装了一个策略模块,允许httpd访问它不应该拥有的文件?
[root@hostname etc]# find /etc/selinux -print0 |xargs -0 -n10 rpm -qf |grep "not owned"
file /etc/selinux/targeted/modules/active/booleans.local is not owned by any package
file /etc/selinux/targeted/modules/active/modules/sandbox.pp.disabled is not owned by any package
file /etc/selinux/targeted/modules/active/modules/sandbox.pp is not owned by any package
file /etc/selinux/targeted/modules/active/modules/radicale.pp is not owned by any package
file /etc/selinux/targeted/modules/active/modules/permissive_bluetooth_t.pp is not owned by any package
file /etc/selinux/targeted/modules/active/modules/mod_selinux.pp is not owned by any package
file /etc/selinux/targeted/modules/active/modules/mypol.pp is not owned by any package
file /etc/selinux/targeted/modules/active/modules/gcl.pp is not owned by any package
file /etc/selinux/targeted/modules/active/modules/copr.pp is not owned by any package
file /etc/selinux/targeted/modules/active/modules/mailgraph.pp is not owned by any package
file /etc/selinux/targeted/modules/active/ports.local is not owned by any package
file /etc/selinux/targeted/contexts/netfilter_contexts is not owned by any package