8.2. カスタムアプリケーション用の SELinux ポリシーの作成および実施
SELinux によってアプリケーションを制限することで、ホストシステムとユーザーのデータのセキュリティーを強化できます。各アプリケーションには特定の要件があるため、ユースケースに応じてこの手順を変更してください。ここでは例として、単純なデーモンを制限する SELinux ポリシーを作成します。
前提条件
-
selinux-policy-develパッケージとその依存関係がシステムにインストールされている。
手順
この手順例では、
/var/log/messagesファイルを開いて書き込みを行う簡単なデーモンを準備します。新しいファイルを作成して、選択したテキストエディターで開きます。
vi mydaemon.c
$ vi mydaemon.cCopy 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.cCopy 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/mydaemonCopy 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/systemCopy 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/mydaemonCopy 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.teCopy 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.teCopy 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/mydaemonCopy 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