SELinux ポリシーモジュール作成

久々の更新になります。いろいろな技術に触れる機会が多いのに展開できなくて。。。

SELinuxの設定をしているときに、はまったことです。今後はまらないようにするためにも書きます。

あるサーバを見てみると、SELinuxのエラーが出力されておりました。
SELinuxのポリシーを追加して対応し、エラーは出力されないようになりましたが、動作しない。なぜだ…
かなりはまったので、ポリシー追加と合わせてメモメモ〆(.. )

原因は「dontaudit」でした。SELinuxの機能として、ログ出力抑止ルールがあります。
デフォルトではこの機能はonになっています。ルールにより許可されなかったアクセスは拒否されログに記録されるのですが、dontaudit ルールで定められたアクセスについてはアクセスが拒否されてもログに記録されないのです。
知らんかったわーw( ̄Д ̄;)w

以下のコマンドで機能をoffにします。

# semanage dontaudit off

 

その後はログを確認してポリシーの追加をするのですが、やり方を以下に書きます。
なかなかやる機会がないと、忘れてしまうんですよね・・・。

まずは、SELinuxの拒否されているログから、アクセスのルールを作ります。

$ cat /var/log/audit/audit.log | audit2allow -m test_module >  test_module.te

 

中身を見てみると、こんな感じでディレクトリやらファイルやらの書き込み権限や削除権限が書かれていますね!

$ cat test_module.te
~
module test_module 1.0;

require {
        type httpd_t;
        type usr_t;
        class dir { write remove_name add_name };
        class file { rename unlink };
}

#============= httpd_t ==============
allow httpd_t usr_t:dir { write remove_name add_name };
allow httpd_t usr_t:file { rename unlink };

 

手動でコンパイルします。

$ checkmodule -M -m -o test_module.mod test_module.te
checkmodule:  loading policy configuration from test_module.te
checkmodule:  policy configuration loaded
checkmodule:  writing binary representation (version 10) to test_module.mod

 

モジュールのパッケージを作成します。.ppファイルがパッケージですね♪

$ semodule_package -o test_module.pp -m test_module.mod

 

やってみると案外簡単です!!
最後に作成したポリシーを設定します。少々時間がかかりますので、お茶でも飲んで待ちましょう!!

# semodule -i test_module.pp

 

設定されていることを一覧を表示して確認します。今回作成したtest_moduleがあれば成功です。

# semodule -l | grep test_module
test_module     1.0

 

はまっている方は試してみてください。ただ、むやみにSELinuxのルールを許可にするのはセキュリティ的にあれですので、必要な設定を精査して許可する必要がありますね。

ちなみに以下のコマンドで、SELinuxのログを読み込んで一気にパッケージが作れます。

# audit2allow -M test_module < /var/log/audit/audit.log

 


コメントを残す

メールアドレスが公開されることはありません。