このセクションでは、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 )に拒否されたログが出力されなければ、終了となります。