Rocky Linux9 にて、SELinux のポリシーを deny ログから追加する方法と、手動で作成する方法を紹介します。
事前準備
環境は Rocky Linux 9.4 です。
試験的に SELinux の拒否ログを出すために、httpd をインストールしてポートを変更しています。
[test@Rocky-1 ~]$ diff -U0 /etc/httpd/conf/httpd.conf.org /etc/httpd/conf/httpd.conf
--- /etc/httpd/conf/httpd.conf.org 2024-08-09 01:28:07.000000000 +0900
+++ /etc/httpd/conf/httpd.conf 2024-11-04 21:47:32.397713950 +0900
@@ -47 +47,2 @@
-Listen 80
+#Listen 80
+Listen 8000
[test@Rocky-1 ~]$
[test@Rocky-1 ~]$ sudo systemctl restart httpd
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.
[test@Rocky-1 ~]$
#拒否ログが出ていることを確認
[test@Rocky-1 ~]$ sudo grep denied /var/log/audit/audit.log
type=AVC msg=audit(1730724496.199:471): avc: denied { name_bind } for pid=3514 comm="httpd" src=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket permissive=0
type=AVC msg=audit(1730724496.202:472): avc: denied { name_bind } for pid=3514 comm="httpd" src=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket permissive=0
[test@Rocky-1 ~]$
SELinux の拒否ログからカスタムポリシーを追加
まず /var/log/audit/audit.log から拒否ログを grep し、audit2allow コマンドでポリシーを作成します。
ausearch コマンドでコンテキストやコモンネームを指定して抽出もできます。
[test@Rocky-1 ~]$ sudo grep denied /var/log/audit/audit.log | audit2allow -M selinux_httpd
******************** 重要 ***********************
このポリシーパッケージを有効にするには、以下を実行してください。
semodule -i selinux_httpd.pp
[test@Rocky-1 ~]$
コマンドを実行したディレクトリ内に pp ファイルと te ファイルが作られます。
pp ファイルがシステムに読み込ませるファイルで、te ファイルは人が読める形式のものです。
[test@Rocky-1 ~]$ ls -l
合計 8
-rw-r--r--. 1 test test 960 11月 4 21:52 selinux_httpd.pp
-rw-r--r--. 1 test test 194 11月 4 21:52 selinux_httpd.te
[test@Rocky-1 ~]$
[test@Rocky-1 ~]$ cat selinux_httpd.te
module selinux_httpd 1.0;
require {
type httpd_t;
type soundd_port_t;
class tcp_socket name_bind;
}
#============= httpd_t ==============
allow httpd_t soundd_port_t:tcp_socket name_bind;
[test@Rocky-1 ~]$
[test@Rocky-1 ~]$
ポリシーを読み込ませることで反映されます。
反映されたものは /var/lib/selinux/targeted/active/modules/400 にファイルが置かれます。
[test@Rocky-1 ~]$ sudo semodule -i selinux_httpd.pp
[test@Rocky-1 ~]$[test@Rocky-1 ~]$ sudo ls -l /var/lib/selinux/targeted/active/modules/400
合計 0
drwx------. 2 root root 44 11月 4 21:54 selinux_httpd
[test@Rocky-1 ~]$
httpd を再起動すると今度は成功し、SELinux の拒否ログも新しいものは出ていないことが確認できます。
[test@Rocky-1 ~]$ sudo systemctl restart httpd
[test@Rocky-1 ~]$
[test@Rocky-1 ~]$ sudo grep denied /var/log/audit/audit.log
type=AVC msg=audit(1730724496.199:471): avc: denied { name_bind } for pid=3514 comm="httpd" src=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket permissive=0
type=AVC msg=audit(1730724496.202:472): avc: denied { name_bind } for pid=3514 comm="httpd" src=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket permissive=0
[test@Rocky-1 ~]$
既存の .te ファイルからカスタムポリシーを作成する
あるホストで設定したポリシー情報(.teファイル)を元に、別ホストに同様の許可を追加する際に使う方法です。
今回は Rocky-1 にて audit2allow で作成した .teファイルを参考に、別ホスト(Rocky-2)で同じポリシーを作成します。
Rocky-1 の .te ファイル
[test@Rocky-1 ~]$ cat selinux_httpd.te
module selinux_httpd 1.0;
require {
type httpd_t;
type soundd_port_t;
class tcp_socket name_bind;
}
#============= httpd_t ==============
allow httpd_t soundd_port_t:tcp_socket name_bind;
[test@Rocky-1 ~]$
.te ファイルから .mod を作成し、.mod から .pp を作成します。
[test@Rocky-2 ~]$ checkmodule -M -m -o selinux_httpd.mod selinux_httpd.te
[test@Rocky-2 ~]$
[test@Rocky-2 ~]$ ls -l
合計 8
-rw-r--r--. 1 test test 944 11月 4 22:08 selinux_httpd.mod
-rw-r--r--. 1 test test 215 11月 4 22:05 selinux_httpd.te
[test@Rocky-2 ~]$
[test@Rocky-2 ~]$ semodule_package -o selinux_httpd.pp -m selinux_httpd.mod
[test@Rocky-2 ~]$
[test@Rocky-2 ~]$ ls -l
合計 12
-rw-r--r--. 1 test test 944 11月 4 22:08 selinux_httpd.mod
-rw-r--r--. 1 test test 960 11月 4 22:10 selinux_httpd.pp
-rw-r--r--. 1 test test 215 11月 4 22:05 selinux_httpd.te
[test@Rocky-2 ~]$
Rocky-1 と同様にポリシーを読み込ませて反映します。
[test@Rocky-2 ~]$ sudo semodule -i selinux_httpd.pp
[test@Rocky-2 ~]$
[test@Rocky-2 ~]$ sudo ls -l /var/lib/selinux/targeted/active/modules/400
合計 0
drwx------. 2 root root 44 11月 4 22:10 selinux_httpd
[test@Rocky-2 ~]$
気に入ったらぜひ共有してください。