当我运行 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
答案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