在严格模式下运行时,SELinux 不允许我启动 HTTPD,因为我的 mod_jk.so 模块是从外部服务器复制的。
由于我找不到安装包,所以我从外部复制了 mod_jk.so。
但是,现在,为了运行 HTTPD,我需要将 SELinux 置于 Permissive 模式。
我读到维基百科我可以添加自定义策略来允许使用这个 mod_jk.so。
这是推荐的方法吗,以便我可以使用外部 mod_jk.so 文件?
答案1
列出文件当前的安全上下文:
# ls -lrtZ /full/path/to/mod_jk.so
将输出与该路径的预期上下文进行比较:
# matchpathcon /full/path/to/mod_jk.so
恢复文件的预期安全上下文:
# restorecon -v /full/path/to/mod_jk.so
重新启动 Web 服务器并检查新的 AVC 拒绝:
# ausearch -m avc -ts recent
答案2
在安装了 HTTPD 2.4 的 Centos 7 机器上遇到了同样的问题。我花了一段时间才找到 2007 年的一份旧 Redhat 错误报告(https://bugzilla.redhat.com/show_bug.cgi?id=225452) 解决了这个问题。
解决方案(就我而言):
修改 /etc/httpd/conf.d/ 中的 jk.conf 文件,将 Shm 文件写入 /var/run/mod_jk 而不是 /var/log/httpd/mod_jk.shm,例如
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkShmFile /var/run/mod_jk
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
无需将 SELinux 设置为宽容
答案3
通过此命令我可以mod_jk
运行httpd
:
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp