ポリシー・ルールの作成
デフォルトのポリシーが制限されすぎてアプリケーションの実行を妨げている場合は、カスタム・ポリシー・ルールの作成が必要になる場合があります。 カスタム・ポリシー・ルールを作成して、アプリケーションおよびファイルへのアクセスをさらに制限することもできます。 ルールは、「ポリシー・ルールについて」およびfapolicyd.rules(5)マニュアル・ページで説明されている規則に従って/etc/fapolicyd/rules.dディレクトリに追加できます。
ルールの一般的な形式は次のとおりです:
decision perm subject : object- 決定
-
イベントを許可するか拒否するか、およびそのアクションを記録するかどうか。 値は、
allow、deny、allow_audit、deny_audit、allow_syslog、deny_syslog、allow_logまたはdeny_logです。 - perm
-
オブジェクトのオープン時、実行時、またはオブジェクト上のアクティビティに対してトリガーするかどうかなど、ファイルに適用される権限のタイプ。 値は、
open、executeまたはanyです。 権限が指定されていない場合、デフォルト値はopenです。 - subject
-
権限およびディシジョンが適用されるオブジェクトに対してアクションを実行するアクター。 この値は、すべてのアクターに対して
allに設定できますが、特定のUID、GIDまたは別の実行可能ファイルに制限することもできます。 値は、all,auid,uid,gid,sessionid,pid、ppid,trust,comm,exe,dir,deviceまたはpatternです。 詳細は、fapolicyd.rules(5)マニュアル・ページを参照してください。 - オブジェクト
-
ディシジョンが適用されるファイルまたはアプリケーション。 この値は、特定のファイルへのパス、ファイルのMIMEタイプ、または信頼データベース内のファイルの一致など、様々な方法で指定できます。 値は、
all,path,dir,device,ftype,trustまたはsha256hashです。 詳細は、fapolicyd.rules(5)マニュアル・ページを参照してください。
1つのルールに対して複数のサブジェクト・ディレクティブとオブジェクト・ディレクティブを指定できます。 たとえば、ファイル・パス、MIMEタイプおよびファイル・サイズをルールのオブジェクトとして照合できます。
ルールを作成して、カンマ区切りリストの整数または文字列の形式でキーと一連の値で構成されるマクロ(セット)を生成することもできます。 セット・ルールにはパーセント(%)記号が接頭辞として付けられ、接頭辞としてパーセント(%)記号が付いたキーを指定することでルールの作成時に、そのセットを参照できます。 セット・ルールの形式は次のとおりです:
%key=value1,value2セット・ルールの例は、/etc/fapolicyd/rules.d/10-languages.rulesで確認できます。
次のルールの例を使用すると、環境のカスタム・ルールを作成する際にガイドとして役立ちます。
例4-1 信頼できるユーザーのグループが、ホーム・ディレクトリ内の定義済言語に一致するファイルを実行できるようにするルールを作成
-
システム・グループを作成し、信頼できるユーザーをそのグループに追加するか、信頼できるユーザーの既存のグループを選択します。 この例では、システム管理者に
admグループを使用します。 -
/etc/fapolicyd/rules.d/50-adm-home-trust.rulesにポリシー・ルール・ファイルを作成し、次の内容を追加します:allow perm=any gid=adm : ftype=%languages dir=/home deny_log perm=any all : ftype=%languages dir=/home次の2つのルールが定義されています:-
グループ
adm内のすべてのユーザーに、/homeディレクトリ内のファイル(/etc/fapolicyd/rules.d/10-languages.rulesに設定されたlanguagesに記述されているタイプ)に対するすべての権限を付与します。 -
/homeディレクトリ内のファイル(languagesマクロに記述されているタイプ)に対するすべての権限をすべてのユーザーに対して拒否します。deny_logルールにより、イベントが監査ログとシステム・ログの両方に追加されます。
-
-
新しいルールをコンパイルしてロードします。
sudo fagenrules --load詳細は、「ポリシー・ルールの確認とロード」を参照してください。
-
ルールが有効であることを確認します。
-
admグループのユーザーとして、次の内容を含むテスト実行可能ファイルを$HOME/test_fapolicyd.pyに作成します:#/usr/bin/python3 print("Test succeeded") -
ファイル・モードを実行可能ファイルに設定します:
chmod +x $HOME/test_fapolicyd.py -
ファイルを実行します:
$HOME/test_fapolicyd.py次のような出力結果が表示されます。
Test succeeded -
admグループ内にないユーザーとして、同じステップを繰り返します。 テスト・スクリプトを実行すると、次の出力が表示されます:bash: ./test_fapolicyd.py: Operation not permitted監査が構成されている場合は、次のように監査ログ内のエントリを確認できます:
sudo ausearch --start today -m fanotify次のような出力が表示されます。
... time->date time type=PROCTITLE msg=audit(1704456339.181:406): proctitle="bash" type=PATH msg=audit(1704456339.181:406): item=0 name="./test_fapolicyd.py" inode=68153551 dev=fc:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=CWD msg=audit(1704456339.181:406): cwd="/home/guest" type=SYSCALL msg=audit(1704456339.181:406): arch=c000003e syscall=257 success=no exit=-1 a0=ffffff9c a1=555d4b74e050 a2=0 a3=0 items=1 ppid=46725 pid=46765 auid=1000 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 sgid=1001 fsgid=1001 tty=pts0 ses=3 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) type=FANOTIFY msg=audit(1704456339.181:406): resp=2
-
例4-2 ユーザーが信頼できるアプリケーションを実行できるようにするルールの作成
特定のアプリケーションを実行するためのルールの作成は、信頼データベースにアプリケーションを追加するよりも効率が低いことに注意してください。 詳細は、「信頼ファイル・データベースへのファイルの追加」を参照してください。 ファイル・アクセスをより明示的に制御する必要がある場合のみ、特定のファイルへのルールを追加します。 この例では、信頼できるbashシェル・バイナリのみを使用して実行できる特定のバイナリ・アプリケーションを実行する機能を制御するルールが作成されます。
-
/etc/fapolicyd/rules.d/80-trustapp.rulesにポリシー・ルール・ファイルを作成し、次の内容を追加します:allow_log perm=execute exe=/usr/bin/bash trust=1 : path=/opt/external/app.bin ftype=application/x-executable trust=0このルールでは、信頼できるbashシェルがパス
/opt/external/app.binで信頼できないアプリケーションを実行しようとすると、そのファイルがMIMEタイプapplication/x-executableの場合、アクションが許可されます。 ルールが機能していることを確認するためにアクションがログに記録されるように、このディシジョンはallow_logに設定されています。 ルールを確認したら、決定をallowに変更できます。ヒント:
ルールの書込み時にファイルのMIMEタイプを確認するには、次のコマンドを実行します:
fapolicyd-cli --ftype /path-to-fileファイルのMIMEタイプとファイルのロード方法を指定することによって、ルールが適切に制限されます。 オプションで、ファイルのSHA-256ハッシュに基づいてより限定的なルールを作成できます。これにより、ファイルが変更された場合にルールが適用されなくなります:
-
ファイルのSHA-256ハッシュを取得します。
sha256sum /opt/external/app.bin|awk '{print $1}' -
SHA-256ハッシュを使用して、次のようにルールをリライトします:
allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=hashsha256hashの値を、前のコマンドの実行で取得した値に設定します。
-
-
新しいルールをコンパイルしてロードします。
sudo fagenrules --load詳細は、「ポリシー・ルールの確認とロード」を参照してください。
-
ルールが有効であることを確認します。
Bashシェルから標準ユーザーとして
/opt/external/app.binを実行しようとすると、正しく実行されます。 ルールのディシジョンはallow_logであるため、fapolicydログを表示して、ルールが動作していることを確認できます。 たとえば、次を実行します。sudo journalctl -S today -u fapolicyd|tail次のように、ルールが適用されていることが出力されます:
datetime ro-ansible-ol8 fapolicyd[45792]: rule=13 dec=allow_log perm=execute auid=1000 pid=50439 exe=/usr/bin/bash : path=/opt/app.bin ftype=application/x-executable trust=0