Red Hat Training

A Red Hat training course is available for RHEL 8

13.4. fapolicyd のカスタムの許可および拒否ルールの追加

fapolicyd パッケージのデフォルトのルールセットは、システム機能に影響しません。バイナリーやスクリプトを標準以外のディレクトリーに保存する、または yum または rpm インストーラーを使用せずにアプリケーションを追加するなどのカスタムシナリオでは、追加のファイルを信頼済みとしてマークするか、新しいカスタムルールを追加する必要があります。

基本的なシナリオでは、信頼の追加ソースを使用してファイルを信頼済みとしてマークする ことを推奨します。特定のユーザーおよびグループ ID に対してのみカスタムバイナリーの実行を許可するなど、より高度なシナリオでは、新しいカスタムルールを /etc/fapolicyd/rules.d/ ディレクトリーに追加します。

次の手順は、新しいルールを追加してカスタムバイナリーを許可する方法を示しています。

前提条件

  • fapolicyd フレームワークがシステムにデプロイされます。

手順

  1. カスタムバイナリーを必要なディレクトリーにコピーします。以下に例を示します。

    $ cp /bin/ls /tmp
    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  2. fapolicyd サービスを停止します。

    # systemctl stop fapolicyd
  3. デバッグモードを使用して、対応するルールを識別します。fapolicyd --debug コマンドの出力は冗長で、Ctrl+C を押すか、対応するプロセスを強制終了するだけで停止できるため、エラー出力をファイルにリダイレクトします。この場合、--debug の代わりに --debug-deny オプションを使用して、アクセス拒否のみに出力を制限できます。

    # fapolicyd --debug-deny 2> fapolicy.output &
    [1] 51341

    または、別の端末で fapolicyd デバッグモードを実行できます。

  4. fapolicyd が拒否したコマンドを繰り返します。

    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  5. デバッグモードをフォアグラウンドで再開し、Ctrl+C を押して停止します。

    # fg
    fapolicyd --debug 2> fapolicy.output
    ^C
    ...

    または、fapolicyd デバッグモードのプロセスを強制終了します。

    # kill 51341
  6. アプリケーションの実行を拒否するルールを見つけます。

    # 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
  7. カスタムバイナリーの実行を妨げたルールを含むファイルを見つけます。この場合、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
  8. /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
  9. カスタムバイナリーのコンテンツの変更を防ぐには、SHA-256 チェックサムを使用して必要なルールを定義します。

    $ sha256sum /tmp/ls
    780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836  ls

    ルールを以下の定義に変更します。

    allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836
  10. コンパイル済みのリストが /etc/fapolicyd/rules.d/ に設定されているルールと異なることを確認し、/etc/fapolicyd/compiled.rules ファイルに保存されているリストを更新します。

    # fagenrules --check
    /usr/sbin/fagenrules: Rules have changed and should be updated
    # fagenrules --load
  11. カスタムルールが、実行を妨げたルールの前に 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
    ...
  12. fapolicyd サービスを開始します。

    # systemctl start fapolicyd

検証

  1. たとえば、カスタムバイナリーが実行できることを確認します。

    $ /tmp/ls
    ls

関連情報

  • fapolicyd.rules (5) および fapolicyd-cli (1) の man ページ。
  • /usr/share/fapolicyd/sample-rules/README-rules ファイルの fapolicyd パッケージでインストールされるドキュメント。