搜索

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

download PDF

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

对于基本场景,首选 使用额外的信任源来将文件标记为信任的文件 。在更高级的场景中,如仅允许为特定用户和组标识符来执行一个自定义二进制文件,请将新的自定义规则添加到 /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 命令的输出很冗长,所以您只能按 Ctrl+C 或终止相应的进程来停止它,并将错误输出重定向到文件中。在这种情况下,您可以使用 --debug-deny 选项而不是 --debug 来限制输出只访问拒绝:

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

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

  4. 重复 fapolicyd 拒绝的命令:

    $ /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/ trust=0
    重要

    要使规则对指定目录下的所有目录递归有效,请将尾部斜杠添加到规则的 dir= 参数的值(上例中的/tmp/ 中)。

  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) 手册页。
  • 文档与 fapolicyd 软件包一起安装在 /usr/share/fapolicyd/sample-rules/README-rules 文件中。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.