我执行了 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 服务器版本 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 文档:SELinux 和 Apache, 和这个结合RH SELinux 文档- 我认为要解决这个问题,keyfile.jks
文件必须标有:
tomcat_t:tomcat_t:tomcat_sys_content_t:s0
这是对 tomcat_t 角色中受限用户 tomcat_t 的只读访问权限。该文件当前标记为:
unconfined_u:object_r:var_t:s0
以绕过额外的 SELinux 文件限制。
任何指导都值得感激!
答案1
如果您想用 tomcat_sys_content_t 标记 /var/websvr/certs/keyfile.jks,那么您可以创建客户文件上下文
semanage fcontext -a /var/websvr/certs/keyfile.jks -t tomcat_sys_content_t
restorecon /var/websvr/certs/keyfile.jks
如果由于 tomcat_sys_content_t 不存在而不起作用,则替换tomcat_t或者可能证书颁发机构在上面的命令中。