dmesg
呼び出されると、その内容がファイルに書き込まれ、ファイル名はデフォルトでタイムスタンプであるスクリプトがあります。 SELinuxはこれを防ぎます。 FedoraのSELinuxトラブルシューティングアプリの提案に従って、次のことを試しました。
grep dmesg /var/log/audit/audit.log | grep dmesg /var/log/audit/audit.log audit2allow-M mypol
semodule -i mypol.pp
しかし、これはうまくいかないようです。それはおそらく、作成されたファイルが毎回異なる名前を持つからです。それでは、SELinuxがdmesg
ディレクトリにすべてのファイルを作成(および記録)できるようにするにはどうすればよいですか?それとも、問題のスクリプト(およびそれが生成するすべてのプロセス)がこれを実行できると言いますか?
答え1
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は次のような素晴らしい紹介講演をしました。
答え2
実行できますsemanage permissive -a dmesg_t
。その後、タイプ/bin/dmesg
のdmesg_t
許可モードで実行されます。アクセスは許可されますが、SELinux はまだ AVC メッセージを生成します。