10.4. fapolicyd のカスタムの許可および拒否ルールの追加
fapolicyd パッケージのデフォルトのルールセットは、システム機能に影響しません。バイナリーやスクリプトを標準以外のディレクトリーに保存する、または dnf または rpm インストーラーを使用せずにアプリケーションを追加するなどのカスタムシナリオでは、追加のファイルを信頼済みとしてマークするか、新しいカスタムルールを追加する必要があります。
基本的なシナリオでは、信頼の追加ソースを使用してファイルを信頼済みとしてマークする ことを推奨します。特定のユーザーおよびグループ識別子に対してのみカスタムバイナリーの実行を許可するなど、より高度なシナリオでは、新しいカスタムルールを /etc/fapolicyd/rules.d/ ディレクトリーに追加します。
次の手順は、新しいルールを追加してカスタムバイナリーを許可する方法を示しています。
前提条件
-
fapolicydフレームワークがシステムにデプロイされます。
手順
カスタムバイナリーを必要なディレクトリーにコピーします。以下に例を示します。
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permittedfapolicydサービスを停止します。# systemctl stop fapolicydデバッグモードを使用して、対応するルールを識別します。
fapolicyd --debugコマンドの出力は冗長で、Ctrl+C を押すか、対応するプロセスを強制終了するだけで停止できるため、エラー出力をファイルにリダイレクトします。この場合、--debugの代わりに--debug-denyオプションを使用して、アクセス拒否のみに出力を制限できます。# fapolicyd --debug-deny 2> fapolicy.output & [1] 51341または、別の端末で
fapolicydデバッグモードを実行できます。fapolicydが拒否したコマンドを繰り返します。$ /tmp/ls bash: /tmp/ls: Operation not permittedデバッグモードをフォアグラウンドで再開し、Ctrl+C を押して停止します。
# fg fapolicyd --debug 2> fapolicy.output ^C ...または、
fapolicydデバッグモードのプロセスを強制終了します。# kill 51341アプリケーションの実行を拒否するルールを見つけます。
# cat fapolicy.output | grep 'deny_audit' ... rule=13 dec=deny_audit perm=execute auid=0 pid=6855 exe=/usr/bin/bash : path=/tmp/ls ftype=application/x-executable trust=0カスタムバイナリーの実行を妨げたルールを含むファイルを見つけます。この場合、
deny_audit perm=executeルールは90-deny-execute.rulesファイルに属します。# ls /etc/fapolicyd/rules.d/ 10-languages.rules 40-bad-elf.rules 72-shell.rules 20-dracut.rules 41-shared-obj.rules 90-deny-execute.rules 21-updaters.rules 42-trusted-elf.rules 95-allow-open.rules 30-patterns.rules 70-trusted-lang.rules # cat /etc/fapolicyd/rules.d/90-deny-execute.rules # Deny execution for anything untrusted deny_audit perm=execute all : all/etc/fapolicyd/rules.d/ディレクトリー内のカスタムバイナリーの実行を拒否するルールを含むルールファイルよりも辞書順で 前にある ファイルに、新しいallowルールを追加します。# touch /etc/fapolicyd/rules.d/80-myapps.rules # vi /etc/fapolicyd/rules.d/80-myapps.rules以下のルールを
80-myapps.rulesファイルに挿入します。allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0または、
/etc/fapolicyd/rules.d/のルールファイルに次のルールを追加して、/tmpディレクトリー内のすべてのバイナリーの実行を許可することもできます。allow perm=execute exe=/usr/bin/bash trust=1 : dir=/tmp/ trust=0重要指定したディレクトリーの下にあるすべてのディレクトリーに対してルールを再帰的に有効にするには、ルール内の
dir=パラメーターの値に末尾のスラッシュを追加します (上記の例の/tmp/)。カスタムバイナリーのコンテンツの変更を防ぐには、SHA-256 チェックサムを使用して必要なルールを定義します。
$ sha256sum /tmp/ls 780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836 lsルールを以下の定義に変更します。
allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836コンパイル済みのリストが
/etc/fapolicyd/rules.d/に設定されているルールと異なることを確認し、/etc/fapolicyd/compiled.rulesファイルに保存されているリストを更新します。# fagenrules --check /usr/sbin/fagenrules: Rules have changed and should be updated # fagenrules --loadカスタムルールが、実行を妨げたルールの前に
fapolicydルールのリストにあることを確認します。# fapolicyd-cli --list ... 13. allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0 14. deny_audit perm=execute all : all ...fapolicydサービスを開始します。# systemctl start fapolicyd
検証
たとえば、カスタムバイナリーが実行できることを確認します。
$ /tmp/ls ls