
UNIX ドメイン ソケット経由で Tomcat9 / Java17 に接続するために、Rocky9 上で Apache httpd v2.4.57 を設定しています。
SELinux が起動し、次のように拒否を通知します。
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 構成で明示的に何を変更する必要がありますか?
ソケットにコンテキストを設定しますか? 現在、ソケットのコンテキストは次のとおりですが、うまくいきません:
[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 ブール値を設定しますか? 設定する場合、どのブール値を何に設定しますか?
答え1
エラー メッセージから、SELinux が Apache HTTP サーバーから Tomcat サーバーへの接続をブロックしており、 (Apache HTTPD に割り当てられている) が UNIX ソケット ( ) を使用して に接続httpd_t
できないことがわかります。unix_stream_socket
tomcat_t
この操作を許可するカスタム SELinux ポリシー モジュールを作成しましょう。
まず、audit2allow
ツールを使用してType Enforcementを生成します
grep 'comm="httpd"' /var/log/audit/audit.log | audit2allow -M my_httpd_tomcat
その後、ポリシーパッケージをインストールできます
sudo semodule -i my_httpd_tomcat.pp
semanage
別の解決策としては、ソケットのタイプ コンテキストを変更するために を使用することです。
sudo semanage fcontext -a -t httpd_unix_stream_connect_t "/run/tomcat-xxx2-yyy/socket"
sudo restorecon -v "/run/tomcat-xxx2-yyy/socket"
答え2
秘密の材料は、拒否の理由を解釈して解決策を提案するaudit2whyコマンドです。その後、変更の影響と副作用を完全に把握した上で、その解決策を適用できます。
[root@swordfish ~]# cat /var/log/audit/audit.log | audit2why | less
これにより次のことが明らかになりました。
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
その結果、この特定の質問に対する答えとして、次のことが推奨されました。
setsebool -P daemons_enable_cluster_mode 1
上記のモードはすぐに有効になります。
ソケットにコンテキストを設定しますか? それだけでは十分ではありません。Unix ドメイン ソケットの場合、ソケット ファイルのコンテキストだけでなく、プロセスのコンテキスト (この場合は tomcat) も考慮されます。
ブール値「daemons_enable_cluster_mode」は、デーモンが相互に通信できるようにする組み込みの SELinux ポリシーを有効にします。