このセクションでは、SETroubleShoot を使って、SELinux により AVC 拒否された問題を解決する方法について紹介します。

audit ログ( /var/log/audit/audit.log )を確認します。もし、以下のようなログが出力されている場合には SELinux によって処理が拒否されているため、必要な処理であれば、拒否を解消する必要があります。

type=AVC msg=audit(***): avc: denied { *** }

[root@controller ~]# tail -F /var/log/audit/audit.log
type=AVC msg=audit(1545401736.313:430): avc:  denied  { execute } for  pid=9692 comm="neutron-vpn-net" name="mount" dev="dm-0" ino=178132 scontext=system_u:system_r:neutron_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1545401736.313:430): arch=c000003e syscall=59 success=no exit=-13 a0=265f0c0 a1=2403aa0 a2=25cb6d0 a3=7f0ac3f602a2 items=0 ppid=9683 pid=9692 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="neutron-vpn-net" exe="/usr/bin/python2.7" subj=system_u:system_r:neutron_t:s0 key=(null)

SETroubleShoot を使用すると、SELinux で拒否された原因と問題解決の方法を messages ログ( /var/log/messages )に出力してくれます。

messages ログ( /var/log/messages )を確認します。

[root@controller ~]# tail -F /var/log/messages
Dec 21 23:59:22 controller setroubleshoot: SELinux is preventing /usr/bin/python2.7 from execute_no_trans access on the file /usr/bin/mount. For complete SELinux messages run: sealert -l 226bde0f-228d-47d1-a75d-9827d13b7d22
Dec 21 23:59:22 controller python: SELinux is preventing /usr/bin/python2.7 from execute_no_trans access on the file /usr/bin/mount.#012#012*****  Plugin catchall (100. confidence) suggests   **************************#012#012If you believe that python2.7 should be allowed execute_no_trans access on the mount file by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'neutron-vpn-net' --raw | audit2allow -M my-neutronvpnnet#012# semodule -i my-neutronvpnnet.pp#012
Dec 21 23:59:23 controller setroubleshoot: SELinux is preventing /usr/bin/python2.7 from execute_no_trans access on the file /usr/bin/mount. For complete SELinux messages run: sealert -l 226bde0f-228d-47d1-a75d-9827d13b7d22

messages ログ( /var/log/messages )に出力されている ” For complete SELinux messages run ” に記載されているコマンド実行し、SELinux で AVC拒否されている詳細情報を出力します。

[root@controller ~]# sealert -l 226bde0f-228d-47d1-a75d-9827d13b7d22
SELinux により、/usr/bin/python2.7 による execute_no_trans アクセスが、ファイル /usr/bin/mount で拒否されました。

*****  プラグイン catchall (100. 信頼性) による示唆****************************************

python2.7 に、 mount file の execute_no_trans アクセスがデフォルトで許可されるべきと考える場合。
このようにします: バグとして報告してください。 
ローカルのポリシーモジュールを生成すると、
 このアクセスを許可することができます。
そして、以下を実行します: 
以下のコマンドを実行して、このアクセスを許可します:
# ausearch -c 'neutron-vpn-net' --raw | audit2allow -M my-neutronvpnnet
# semodule -i my-neutronvpnnet.pp


追加情報:
ソースコンテキスト                     system_u:system_r:neutron_t:s0
ターゲットコンテキスト                   system_u:object_r:mount_exec_t:s0
ターゲットオブジェクト                   /usr/bin/mount [ file ]
ソース                           neutron-vpn-net
ソースパス                         /usr/bin/python2.7
ポート                           <Unknown>
ホスト                           localhost.localdomain
ソース RPM パッケージ                 
ターゲット RPM パッケージ               util-linux-2.23.2-52.el7_5.1.x86_64
ポリシー RPM                      selinux-policy-3.13.1-192.el7_5.6.noarch
Selinux 有効化                   True
ポリシータイプ                       targeted
強制モード                         Enforcing
ホスト名                          controller
プラットフォーム                      Linux controller 3.10.0-862.14.4.el7.x86_64 #1 SMP
                              Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64
通知カウント                        41
最初の画面                         2018-12-21 23:58:48 JST
最後の画面                         2018-12-22 00:02:22 JST
ローカル ID                       226bde0f-228d-47d1-a75d-9827d13b7d22

生の監査メッセージ
type=AVC msg=audit(1545404542.107:377): avc:  denied  { execute_no_trans } for  pid=8373 comm="neutron-vpn-net" path="/usr/bin/mount" dev="dm-0" ino=178132 scontext=system_u:system_r:neutron_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file


Hash: neutron-vpn-net,neutron_t,mount_exec_t,file,execute_no_trans

[root@controller ~]#

上記出力された詳細情報に記載されている SELinux でアクセスを許可するためのコマンドを実行します。

[root@controller ~]# ausearch -c 'neutron-vpn-net' --raw | audit2allow -M my-neutronvpnnet
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i my-neutronvpnnet.pp

[root@controller ~]#
[root@controller ~]# semodule -i my-neutronvpnnet.pp
[root@controller ~]# 

SELinux のポリシーリストを表示し、追加したポリシーが存在していることを確認します。

[root@controller ~]# semodule -l | grep my-neutronvpnnet
my-neutronvpnnet	1.0
[root@controller ~]# 

上記の手順実施後に、audit ログ( /var/log/audit/audit.log )に拒否されたログが出力されなければ、終了となります。