我执行了 Yum 更新,但 Tomcat 访问文件的能力已被破坏。
SEVERE: Failed to load keystore type JKS with path /var/websvr/certs/keyfile.jks due to /var/websvr/certs/keyfile.jks (Permission denied)
java.io.FileNotFoundException: /var/websvr/certs/keyfile.jks (Permission denied)
即使tomcat用户ownership and full permissions
不仅拥有文件,而且拥有整个目录
-rwxrwxrwx. 1 tomcat tomcat 4829 Aug 19 2016 keyfile.jks
并且我已经验证它Tomcat
是在tomcat user
. 那么,为什么访问仍然被阻止?
Red Hat Enterprise Linux Server 7.4 版 (Maipo)
编辑
从AB的评论 - 的/var/log/audit/audit.log
:
type=AVC msg=audit(1511208892.087:392): avc: denied { read } for pid=770 comm="java" name="keyfile.jks" dev="xvda2" ino=9641897 scontext=system_u:system_r:tomcat_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
所以看起来这是与 SELinux 相关的。我试图解决,但像这样的帖子需要 Red Hat 订阅。
将RH Doc for SELinux & Apache与RH SELinux Doc结合使用- 我认为要解决此问题,该keyfile.jks
文件必须标有:
tomcat_t:tomcat_t:tomcat_sys_content_t:s0
这是角色 tomcat_t 中受限用户 tomcat_t 的只读访问权限。该文件当前标记为:
unconfined_u:object_r:var_t:s0
克服额外的 SELinux 文件限制。
任何指导表示赞赏!
如果你想用 tomcat_sys_content_t 标记 /var/websvr/certs/keyfile.jks 那么你可以创建一个客户文件上下文
如果这不起作用,因为 tomcat_sys_content_t 不存在,则在上面的命令中替换tomcat_t或可能的pki_tomcat_cert_t。