10.4. fapolicyd のカスタムの許可および拒否ルールの追加
fapolicyd のデフォルトのルールセットは、システム機能に影響を与えません。バイナリーやスクリプトを標準以外のディレクトリーに保存したり、DNF または RPM インストーラーを使用せずにアプリケーションを追加したりするなどのカスタマイズを行う場合は、追加のファイルを信頼できるものとしてマークするか、新しいカスタムルールを追加する必要があります。
基本的なシナリオの場合は、追加の信頼ソースを使用してファイルを信頼できるものとしてマークする を参照してください。特定のユーザーおよびグループ識別子に対してのみカスタムバイナリーの実行を許可するなど、より高度なシナリオの場合は、新しいカスタムルールを /etc/fapolicyd/rules.d/ ディレクトリーに追加してください。
次の手順は、新しいルールを追加してカスタムバイナリーを許可する方法を示しています。
詳細情報と例は、fapolicyd パッケージとともにインストールされる /usr/share/doc/fapolicyd/ ディレクトリーのドキュメント、/usr/share/fapolicyd/sample-rules/README-rules ファイル、およびシステム上の fapolicyd.rules(5) および fagenrules(8) man ページを参照してください。
前提条件
-
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/のルールセットと異なることを確認します。# fagenrules --check /usr/sbin/fagenrules: Rules have changed and should be updated/etc/fapolicyd/compiled.rulesファイルに保存されているリストを更新します。# 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