首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache无法通过Unix域套接字连接到Tomcat -拒绝SELinux

Apache无法通过Unix域套接字连接到Tomcat -拒绝SELinux
EN

Server Fault用户
提问于 2023-05-29 16:33:49
回答 2查看 34关注 0票数 1

我在Rocky9上配置了Apachehttpdv2.4.57,通过unix域套接字连接到Tomcat9 / Java17。

SELinux启动并表示拒绝,如下所示:

代码语言:javascript
复制
type=AVC msg=audit(1685376249.480:134): avc:  denied  { connectto } for  pid=1769 comm="httpd" path="/run/tomcat-xxx2-yyy/socket" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:tomcat_t:s0 tclass=unix_stream_socket permissive=0
type=SYSCALL msg=audit(1685376249.480:134): arch=c000003e syscall=42 success=no exit=-13 a0=12 a1=7faa3403a050 a2=27 a3=727461702d746163 items=0 ppid=1767 pid=1769 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)^]ARCH=x86_64 SYSCALL=connect AUID="unset" UID="apache" GID="apache" EUID="apache" SUID="apache" FSUID="apache" EGID="apache" SGID="apache" FSGID="apache"
type=PROCTITLE msg=audit(1685376249.480:134): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44002D6600636F6E662F6465766963652D6D61696E2E636F6E66

明确地说,我必须更改SELinux配置中的哪些内容,才能使其工作?

我是否在套接字上设置上下文?现在套接字上下文如下所示,但没有运气:

代码语言:javascript
复制
[root@swordfish ~]# ls -alZ /run/tomcat-xxx2-yyy/socket 
srw-rw----. 1 fma fma system_u:object_r:httpd_var_run_t:s0 0 May 29 17:56 /run/tomcat-xxx2-yyy/socket

我是否设置了selinux布尔值?如果是的话,是哪一个,又是什么?

EN

回答 2

Server Fault用户

发布于 2023-05-30 00:57:44

使用您的错误消息,我们知道SELinux阻塞了从Apache服务器到Tomcat服务器的连接,不允许httpd_t (分配给Apache )使用UNIX (unix_stream_socket)连接到tomcat_t

让我们创建一个自定义的SELinux策略模块来允许这个操作。

首先,我们使用audit2allow工具生成一个类型强制执行

代码语言:javascript
复制
grep 'comm="httpd"' /var/log/audit/audit.log | audit2allow -M my_httpd_tomcat

然后我们就可以安装策略包了。

代码语言:javascript
复制
sudo semodule -i my_httpd_tomcat.pp

另一个解决方案是使用semanage更改套接字的类型上下文。

代码语言:javascript
复制
sudo semanage fcontext -a -t httpd_unix_stream_connect_t "/run/tomcat-xxx2-yyy/socket"
sudo restorecon -v "/run/tomcat-xxx2-yyy/socket"
票数 0
EN

Server Fault用户

发布于 2023-05-30 11:05:21

秘密成分是audit2why命令,它解释了拒绝的原因并提出了解决方案,然后可以在充分了解更改的后果和副作用的情况下应用解决方案。

代码语言:javascript
复制
[root@swordfish ~]# cat /var/log/audit/audit.log | audit2why | less

这表明:

代码语言:javascript
复制
type=AVC msg=audit(1685362712.138:110): avc:  denied  { connectto } for  pid=1804 comm="httpd" path="/run/tomcat-xxx2-yyy/so
cket" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:tomcat_t:s0 tclass=unix_stream_socket permissive=0

        Was caused by:
        The boolean daemons_enable_cluster_mode was set incorrectly. 
        Description:
        Allow daemons to enable cluster mode

        Allow access by executing:
        # setsebool -P daemons_enable_cluster_mode 1

它进而建议对这一特定问题的答案,即这样做:

代码语言:javascript
复制
setsebool -P daemons_enable_cluster_mode 1

上述模式立即生效。

我是否在套接字上设置上下文?这样做是不够的。对于unix域套接字,还考虑到进程的上下文(在本例中为tomcat)以及套接字文件的上下文。

布尔值"daemons_enable_cluster_mode“允许内置SELinux策略,允许守护进程相互对话。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1132162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档