Cocoon-Engine

甘党インフラエンジニアの技術ブログ

Chocolat Chocolat Chocolat Chocolat

IT技術とスイーツに興味がある方、ちょっと見ていきませんか?

【Rocky Linux9】 SELinux のポリシーを追加・作成する方法

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 ~]$

気に入ったらぜひ共有してください。

TOP