selinux 缺少类型执行 (TE) 允许规则

selinux 缺少类型执行 (TE) 允许规则

当我运行 FTP 测试以测试其完整功能时,我担心为什么在执行如此流行的命令(例如“mkdir”)时会出现 avc 拒绝错误?

以下是 AVC 拒绝信息:

type=AVC msg=audit(1365021919.400:283): avc:  denied  { create } for  pid=2210     comm="mkdir" name="64F77DCE-9C9F-11E2-90A8-39AEF085A14A"   scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_t:s0 tclass=dir
    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

根据 Fedora 网站,缺少类型强制规则通常是由 SELinux 策略中的错误引起的。那么,这真的是一个错误吗?

答案1

看来您正在尝试让您的网络服务器到用户的主目录。没有 SELinux 参考策略允许此行为。您应该仔细考虑是否应该从用户的主目录提供内容。

如果你真的需要通过此访问,您可以使用audit2allow实用程序生成一个您可以加载并允许访问的本地策略模块。

答案2

我很困惑,FTP 是通过 apache 还是只是普通的旧 FTP?

如果是普通的 FTP,请检查您尝试创建新目录的位置的 SELinux 上下文。它可能设置不正确。

如果通过 Apache:

您可以通过以下命令启用 Apache 使用主目录:

setsebool -P httpd_enable_homedirs
chcon -R -t httpd_sys_content_t ~user/public_html

参考:http://fedoraproject.org/wiki/SELinux/apache

答案3

已经当为要添加的端口指定了不同的安全上下文时,会发生错误。如果您使用的是 Tomcat 的基本 HTTP 端口 8080,则该端口为 http_cache_port_t 类型。如果您使用的是 nginx,它内置了 8081 和 transproxy_port_t 或两者上下文,则 apache web 服务器会生成错误,因为它无法连接。如果您需要更改安全上下文,并且无需额外使用 -m 选项代替 -a 选项。

~# semanage port -l |grep 8081
transproxy_port_t   tcp      8081

进而

~# semanage port -l |grep http_port_t
http_port_t   tcp      80, 443, 488, 8008, 8009, 8443

添加

# semanage port -m -p tcp -t http_port_t  8081

相关内容