8.2. カスタムアプリケーション用の SELinux ポリシーの作成および実施
SELinux によってアプリケーションを制限することで、ホストシステムとユーザーのデータのセキュリティーを強化できます。各アプリケーションには特定の要件があるため、ユースケースに応じてこの手順を変更してください。ここでは例として、単純なデーモンを制限する SELinux ポリシーを作成します。
前提条件
-
selinux-policy-devel
パッケージとその依存関係がシステムにインストールされている。
手順
この手順例では、
/var/log/messages
ファイルを開いて書き込みを行う簡単なデーモンを準備します。新しいファイルを作成して、選択したテキストエディターで開きます。
vi mydaemon.c
$ vi mydaemon.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコードを挿入します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルをコンパイルします。
gcc -o mydaemon mydaemon.c
$ gcc -o mydaemon mydaemon.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デーモンの
systemd
ユニットファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow デーモンをインストールして起動します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいデーモンが SELinux によって制限されていないことを確認します。
ps -efZ | grep mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:unconfined_service_t:s0 root 4117 1 0 16:56 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
デーモンのカスタムポリシーを生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 直前のコマンドで作成した設定スクリプトを使用して、新しいポリシーモジュールでシステムポリシーを再構築します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon
コマンドを使用して、設定スクリプトがファイルシステムの対応する部分の再ラベル付けを行うことに注意してください。restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デーモンを再起動して、SELinux が制限のあるデーモンを実行していることを確認します。
systemctl restart mydaemon ps -efZ | grep mydaemon
# systemctl restart mydaemon $ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デーモンは SELinux によって制限されているため、SELinux はこのデーモンが
/var/log/messages
にアクセスできないようにします。対応する拒否メッセージを表示します。ausearch -m AVC -ts recent
# ausearch -m AVC -ts recent ... type=AVC msg=audit(1590247112.719:5935): avc: denied { open } for pid=8150 comm="mydaemon" path="/var/log/messages" dev="dm-0" ino=2430831 scontext=system_u:system_r:mydaemon_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file permissive=1 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sealert
ツールを使用して追加情報を取得することもできます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow audit2allow
ツールを使用して、変更を提案します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow audit2allow
が提案するルールは特定のケースでは正しくない可能性があるため、出力の一部のみを使用して対応するポリシーインターフェイスを見つけます。macro-expander
ツールを使用してlogging_write_generic_logs (mydaemon_t)
マクロを検査し、マクロが提供するすべての許可ルールを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、提案されたインターフェイスを使用できます。このインターフェイスは、ログファイルとその親ディレクトリーへの読み取りおよび書き込みアクセスのみを提供するためです。Type Enforcement ファイルに対応するルールを追加します。
echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.te
$ echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.te
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、インターフェイスを使用する代わりに、このルールを追加することもできます。
echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
$ echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーを再インストールします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
アプリケーションが SELinux によって制限されて実行されていることを確認します。以下に例を示します。
ps -efZ | grep mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタムアプリケーションが SELinux 拒否を生じさせないことを確認します。
ausearch -m AVC -ts recent
# ausearch -m AVC -ts recent <no matches>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow