呼び出されると、dmesg
の内容がファイルに書き込まれるスクリプトがあります。ファイルの名前は基本的にタイムスタンプです。 SELinuxはこれを防ぎます。 FedoraのSELinuxトラブルシューティングアプリのアドバイスに従って、私は次のことを試しました。
grep dmesg /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.pp
ただし、これは機能していないようです。おそらく、作成するファイルの名前が毎回異なるためです。では、dmesg
が特定のディレクトリに任意のファイルを作成(および書き込み)できるようにSELinuxに指示するにはどうすればよいですか?または、問題のスクリプト(およびそれが生成するすべてのプロセス)がそれを実行できることを伝えますか?
AVC拒否をフィルタリングする方法と、特定のアクション(この場合はスクリプト)へのアクセスを許可するカスタムポリシーモジュールを作成する方法を学ぶ必要があります。
上に挿入したモジュールを削除することから始めて、新たに開始します。
_# semodule -r mymodule.pp
_
その後、スクリプトを実行します。
_# date && ./my_script.sh
_
date
呼び出しは、タイムスタンプに基づいてAVC拒否をフィルタリングするのに役立ちます。
次に、通常の方法を使用してAVC拒否をデバッグします。これは、ausearch(8)
コマンドを使用します。
_# ausearch -m avc -ts $timestamp | audit2allow
_
使用できるスイッチの詳細、特に_-ts
_フラグについては、マンページを確認してください。
この情報を使用すると、既存のポリシーに基づいて何が拒否されているかがわかります。
ここで、このアクセスを許可するかどうかを決定する必要があります。アクセスを許可するとします。付与するアクセスを定義するルールを記述したカスタムポリシーモジュールを作成する必要があります。これは、スクリプトの複雑さに応じて、多かれ少なかれ単純です。
_# ausearch -m avc -ts 10:40:00 | audit2allow -m my_script > my_script.te
_
これにより、_type enforcement
_の説明が生成されます。
コードのレビューに進んでコードが正しいことを確認し、_type enforcement
_コードをmodule
にコンパイルする必要があります。
_# checkmodule -M -m -o my_script.mod my_script.te
_
モジュールを自由にロードおよびアンロードできるようにするには、モジュールを_policy package
_にパッケージ化する必要があります。
_# semodule_package -o my_script.pp -m my_script.mod
_
これで、次を使用してポリシーをロードできます。
_# semodule -i my_script.pp
_
正しくロードされていることを確認してください。
_# semodule -l | grep my_script
_
次に、拒否を再度トリガーして、この同じプロセスに関する監査ログにさらに(異なる)アラートがあるかどうかを確認します。
_type enforcement
_コードのそれ以降のエディションでは、version
(_1.0
_)を更新する必要があります。そうしないと、パッケージのロードが失敗します。コンパイルおよびパッケージ化されると、_policy package
_の更新が完了します。
_# semodule -u my_script.pp
_
SELinuxを始めるときに学ぶべきことがたくさんあります。いくつかの有用な参考文献:
apropos selinux
_の出力も確認してください。RHELドキュメントから
Dave Quigleyによる優れた紹介プレゼンテーション:
semanage permissive -a dmesg_t
を実行できます。次に、タイプが/bin/dmesg
であるdmesg_t
は、許容モードで実行されます。アクセスは許可されますが、SELinuxは引き続きAVCメッセージを生成します。