2 fapolicydのインストールおよび実行

dnfコマンドを使用して、Oracle Linux 9 AppStreamリポジトリからfapolicydをインストールします。

  1. ol9_appstreamリポジトリが有効になっていることを確認します。
  2. dnfを使用してパッケージをインストールします。
    sudo dnf install fapolicyd
  3. fapolicydサービスを有効にして起動します。
    sudo systemctl enable --now fapolicyd

ランタイム構成の変更

ランタイム構成オプションは、/etc/fapolicyd/fapolicyd.confで設定されます。オプションの詳細は、fapolicyd.conf(6)マニュアル・ページを参照してください。詳細は、https://github.com/linux-application-whitelisting/fapolicyd/blob/main/README.mdも参照してください。

ランタイム統計レポートの構成

fapolicydは、アクセス、拒否およびキャッシュ・パフォーマンスに関する情報を提供するランタイム統計レポートを生成できます。ランタイム統計レポートは、fapolicydが停止されたときに生成され、パフォーマンスに関する情報の収集に役立ちます。統計レポートの情報を使用して、他の構成オプションを変更するか、デバッグ作業を実行するかを決定できます。レポートは/var/log/fapolicyd-access.logに書き込まれ、デフォルトの出力は次のようになります:

Permissive: false
q_size: 640
Inter-thread max queue depth 6
Allowed accesses: 668513
Denied accesses: 0
Trust database max pages: 25600
Trust database pages in use: 7567 (29%)

File access attempts from oldest to newest as of Wed Nov 15 16:46:59 2023

        FILE                                                ATTEMPTS
---------------------------------------------------------------------------
/var/tmp/dracut.kZVhRg/initramfs/usr/lib/kbd/keymaps/xkb/tr-alt.map.gz  1
/var/tmp/dracut.kZVhRg/initramfs/usr/lib/kbd/unimaps/koi8u.uni  1
/var/tmp/dracut.kZVhRg/initramfs/usr/bin/stgTP4DF               1
...
/usr/bin/mandb (?)                                              1
/usr/bin/mandb (?)                                              264
---

Subject cache size: 1549
Subject slots in use: 1549 (100%)
Subject hits: 666964
Subject misses: 46044
Subject evictions: 44495 (6%)

このレポートを制御するために設定できる構成オプションは次のとおりです:

  • do_stat_report: 統計レポートを生成するかどうかを制御します。デフォルトでは、値は1に設定され、オプションが有効化されていることを示します。

  • detailed_report fapolicydがサブジェクトおよびオブジェクト情報を使用統計レポートに追加するかどうかを制御し、特定のサブジェクト-オブジェクト・イベントが発生する回数を示します。この内容はデバッグ時に役立ちますが、ログのサイズを減らす際は無効にできます。このオプションのデフォルト値は1に設定され、このオプションが有効であることを示します。

ロギング制御

監査ロギングは主に監査ログのfanotifyイベントを使用して処理されますが、システム・ログに記録するようにポリシーを構成することもできます。「デフォルト・ポリシー・ロギングの変更」「デバッグおよび許可モード」および「拒否イベントの監査」を参照してください。

システム・ログに記録する場合、またはデバッグ・モードでfapolicydを実行している場合は、syslog_formatオプションを構成することによって、アクセス決定からのログ出力の内容を制御できます。形式は、様々な値のカンマ区切りリストで、コロン文字を使用して区切られたサブジェクトおよびオブジェクト情報を含むルール情報を示します。システム・パフォーマンスは、ログに記録する内容の量に影響を受けることに注意してください。デフォルト値はrule,dec,perm,auid,pid,exe,:,path,ftype,trustです。

syslog_formatオプションで使用できる値は次のとおりです:
  • rule: コンパイルされたポリシー・ルールのルール番号。「ポリシー・ルールのリスト」を参照してください。
  • dec: fapolicydがルールに対して行う決定。
  • perm: ルールに適用される権限。
  • サブジェクト・オプションのいずれか。
  • :: サブジェクト・オプションとオブジェクト・オプションを区切るセパレータ。
  • オブジェクト・オプションのいずれか。
サブジェクト・オプションおよびオブジェクト・オプションの詳細は、「ポリシー・ルールの作成」を参照してください。

パフォーマンス制御

パフォーマンス制御オプションは、メモリー使用量および処理の向上に役立ちます。

次のオプションは、パフォーマンスを向上させるためにfapolicydによって使用されるキャッシュのサイズを制御するために使用できます。どちらのオプションでも、割り当てられたメモリーを可能なかぎり小さく保つことを目的としていますが、統計レポートから計算できる削除に対するヒットの割合を最大化するために十分なメモリーがキャッシュに割り当てられているようにします。衝突によるキャッシュ・チャーンを回避するには、そのキャッシュ・サイズ値を素数に設定することを検討してください。

  • subj_cache_size: サブジェクト・キャッシュが保持するエントリ数を制御します。デフォルト値は「1549」です。
  • obj_cache_size: オブジェクト・キャッシュが保持するエントリ数を制御します。デフォルト値は「8191」です。

デバッグおよび許可モード

デフォルトでは、fapolicydは強制モードで構成されています。許可モードでは、fapolicydが実行をブロックしている可能性があるイベントを許可しますが、引き続きイベントを監査します。許可モードは、適切なロギング構成を有効にして使用すると、デバッグ時に役立ちます。fapolicydを使用して保護するシステムで許可モードを有効にしたままにしないでください。

許可モードを有効にするには、/etc/fapolicyd/fapolicyd.confを編集し、permissive構成オプションを1に設定します。変更を有効にするには、fapolicydサービスを再起動する必要があります。

オプションで、デバッグを有効にしてfapolicydを許可モードでアクティブ・プロセスとして実行すると、イベントが発生したときにイベントに関する詳細情報を取得できます。

デバッグを有効にして許可モードでfapolicydを実行するには:
  1. fapolicydサービスを停止します。
    sudo systemctl stop fapolicyd
  2. --permissiveおよび--debugオプションを有効にして、コマンドラインからfapolicydを実行します。
    sudo fapolicyd --permissive --debug

    次のような出力が表示されます

    Loading rule file:
    ## This file is automatically generated from /etc/fapolicyd/rules.d
    %languages=application/x-bytecode.ocaml,application/x-bytecode.python,application/java-archive,text/x-java,application/x-java-applet,application/javascript,text/javascript,text/x-awk,text/x-gawk,text/x-lisp,application/x-elc,text/x-lua,text/x-m4,text/x-nftables,text/x-perl,text/x-php,text/x-python,text/x-R,text/x-ruby,text/x-script.guile,text/x-tcl,text/x-luatex,text/x-systemtap
    allow perm=any uid=0 : dir=/var/tmp/
    allow perm=any uid=0 trust=1 : all
    allow perm=open exe=/usr/bin/rpm : all
    allow perm=open exe=/usr/bin/python3.9 comm=dnf : all
    deny_audit perm=any pattern=ld_so : all
    deny_audit perm=any all : ftype=application/x-bad-elf
    allow perm=open all : ftype=application/x-sharedlib trust=1
    deny_audit perm=open all : ftype=application/x-sharedlib
    allow perm=execute all : trust=1
    allow perm=open all : ftype=%languages trust=1
    deny_audit perm=any all : ftype=%languages
    allow perm=any all : ftype=text/x-shellscript
    deny_audit perm=execute all : all
    allow perm=open all : all
    Loaded 14 rules
    Changed to uid 980
    Initializing the trust database
    fapolicyd integrity is 0
    backend rpmdb registered
    backend file registered
    Loading rpmdb backend
    Loading file backend
    Checking if the trust database up to date
    Importing trust data from rpmdb backend
    Importing trust data from file backend
    Entries in trust DB: 86032
    Loaded trust info from all backends(without duplicates): 86032
    Trust database checks OK
    added /dev/shm mount point
    added / mount point
    added /var/oled mount point
    added /boot mount point
    added /boot/efi mount point
    added /run/user/982 mount point
    added /run/user/1000 mount point
    Starting to listen for events

    拒否されるイベントは、dec=deny_auditでタグ付けされます。

    ヒント:

    デバッグ出力は冗長にできます。拒否イベントのみを出力するには、標準の--debugオプションのかわりに--debug-denyオプションを使用します。ただし、拒否イベントを監査するためにデバッグ・モードで実行する必要はありません。詳細は、「拒否イベントの監査」を参照してください。拒否イベントの詳細情報を取得する必要がある場合は、システム・ログに記録するようにルールを変更します。詳細は、「デフォルト・ポリシー・ロギングの変更」を参照してください。
  3. 実行中のデーモンを終了するには、[Ctrl]+[C]キーの組合せを使用してSIGINTを送信し、プロセスを中断します。

拒否イベントの監査

ausearchコマンドを使用し、fanotifyメッセージを使用して追跡されるように、拒否されたイベントを監査ログに表示します。

fapolicydイベントのロギングを開始するには、少なくとも1つのルールがauditdに定義されている必要があります。ルールが定義されていない場合、監査ログにイベントは表示されません。監査用のルールを作成して作業を開始できます。たとえば、次のように/etc/fapolicydで構成の変更を監査するルールを作成できます:

sudo tee /etc/audit/rules.d/40-fapolicyd.rules > /dev/null <<'EOF'
# This policy monitors /etc/fapolicyd/ for changes to configuration
# This rule is generated to ensure that events are logged to the audit log for fapolicyd tracking                                  
-w /etc/fapolicyd/ -p wa -k fapolicyd_changes
EOF

この変更を有効にするには、auditdサービスを再起動するか、システムをリブートする必要があります。auditdサービス実行を再起動するには:

sudo service auditd restart

ノート:

Auditdは、systemctlコマンドを使用して再起動できません。

拒否イベントは監査ログに記録され、ausearchコマンドを使用して確認できます。次に例を示します:

sudo ausearch --start today -m fanotify

読みやすい出力を作成するには、aureportを使用します。次に例を示します:

sudo ausearch --start today -m fanotify --raw | aureport --file