Menu Close
Settings Close

Language and Page Formatting Options

13.4. 为 fapolicyd 添加自定义 allow 和 deny 规则

fapolicyd 包中的默认规则集不影响系统功能。对于自定义场景,比如在非标准目录中存储二进制文件和脚本,或者在没有 dnfrpm 安装程序的情况下添加应用程序,您必须将额外文件标记为可信,或者添加新的自定义规则。

对于基本情况,首选使用 额外的信任来源将文件标记为受信任的 文件。在更高级的场景中,如仅允许为特定用户和组群标识符执行自定义二进制文件,在 /etc/fapolicyd/rules.d/ 目录中添加新的自定义规则。

以下步骤演示了如何添加新的规则以允许自定义二进制文件。

先决条件

  • fapolicyd 框架部署在您的系统上。

步骤

  1. 将自定义二进制文件复制到所需的目录中,例如:

    $ cp /bin/ls /tmp
    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  2. 停止 fapolicyd 服务:

    # systemctl stop fapolicyd
  3. 使用 debug 模式来识别相应的规则。因为 fapolicyd --debug 命令的输出是 verbose 的,您只能按 Ctrl+C 或终止相应进程来停止它,因此可将错误输出重定向到文件中。在这种情况下,您可以使用 --debug-deny 选项而不是 --debug 来限制输出只访问拒绝:

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

    或者,您可以在另一个终端中运行 fapolicyd debug 模式。

  4. 重复 fapolicyd denied 的消息:

    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  5. 通过在前台恢复并按 Ctrl+C 来停止 debug 模式:

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

    或者,杀掉 fapolicyd debug 模式的进程:

    # 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. 在文件中添加一个新的 allow 规则,它完全位于规则文件中,该文件包含了在 /etc/fapolicyd/rules.d/ 目录中拒绝执行自定义二进制文件的规则:

    # 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/ all 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 page。
  • /usr/share/ fapolicyd /sample-rules/README-rules 文件中安装有 fapolicyd 软件包的文档。