12.4. fapolicyd のカスタムの許可および拒否ルールの追加
fapolicyd
パッケージのデフォルトのルールセットは、システム機能に影響しません。バイナリーやスクリプトを標準以外のディレクトリーに保存する、または yum
または rpm
インストーラーを使用せずにアプリケーションを追加するなどのカスタムシナリオでは、追加のファイルを信頼済みとしてマークするか、新しいカスタムルールを追加する必要があります。
基本的なシナリオでは、信頼の追加ソースを使用してファイルを信頼済みとしてマークする ことを推奨します。特定のユーザーおよびグループ ID に対してのみカスタムバイナリーの実行を許可するなど、より高度なシナリオでは、新しいカスタムルールを /etc/fapolicyd/rules.d/
ディレクトリーに追加します。
次の手順は、新しいルールを追加してカスタムバイナリーを許可する方法を示しています。
前提条件
-
fapolicyd
フレームワークがシステムにデプロイされます。
手順
カスタムバイナリーを必要なディレクトリーにコピーします。以下に例を示します。
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permitted
fapolicyd
サービスを停止します。# 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
関連情報
-
システム上の
fapolicyd.rules(5)
およびfapolicyd-cli(1)
man ページ -
/usr/share/fapolicyd/sample-rules/README-rules
ファイルのfapolicyd
パッケージでインストールされるドキュメント。