12.4. 为 fapolicyd 添加自定义 allow 和 deny 规则
fapolicyd
包中的默认规则集不影响系统功能。对于自定义场景,比如在非标准目录中存储二进制文件和脚本,或者不使用 yum
或 rpm
安装程序添加应用程序,则您必须将额外文件标记为信任的,或者添加新的自定义规则。
对于基本场景,首选 使用额外的信任源来将文件标记为信任的文件 。在更高级的场景中,如仅允许为特定用户和组标识符来执行一个自定义二进制文件,请将新的自定义规则添加到 /etc/fapolicyd/rules.d/
目录中。
以下步骤演示了如何添加新的规则以允许自定义二进制文件。
先决条件
-
fapolicyd
框架部署在您的系统上。
流程
将自定义二进制文件复制到所需的目录中,例如:
$ cp /bin/ls /tmp $ /tmp/ls bash: /tmp/ls: Operation not permitted
停止
fapolicyd
服务:# systemctl stop fapolicyd
使用 debug 模式来识别相应的规则。因为
fapolicyd --debug
命令的输出很冗长,所以您只能按 Ctrl+C 或终止相应的进程来停止它,并将错误输出重定向到文件中。在这种情况下,您可以使用--debug-deny
选项而不是--debug
来限制输出只访问拒绝:# fapolicyd --debug-deny 2> fapolicy.output & [1] 51341
或者,您可以在另一个终端中运行
fapolicyd
debug 模式。重复
fapolicyd
拒绝的命令:$ /tmp/ls bash: /tmp/ls: Operation not permitted
通过在前台恢复并按 Ctrl+C 来停止 debug 模式:
# fg fapolicyd --debug 2> fapolicy.output ^C ...
或者,杀掉
fapolicyd
debug 模式的进程:# kill 51341
查找拒绝执行应用程序的规则:
# 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
找到包含阻止自定义二进制文件执行的规则的文件。在这种情况下,
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
将一个新的
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/
中)。要防止自定义二进制文件内容的更改,请使用 SHA-256 校验和定义所需的规则:
$ sha256sum /tmp/ls 780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836 ls
将规则改为以下定义:
allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836
检查编译的列表是否与
/etc/fapolicyd/rules.d/
中设置的规则不同,并更新列表,该列表存储在/etc/fapolicyd/compiled.rules
文件中:# fagenrules --check /usr/sbin/fagenrules: Rules have changed and should be updated # fagenrules --load
检查您的自定义规则是否在阻止执行的规则之前的
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 ...
启动
fapolicyd
服务:# systemctl start fapolicyd
验证
检查您的自定义二进制文件现在是否可以执行,例如:
$ /tmp/ls ls
其它资源
-
您系统上的
fapolicyd.rules (5)
和fapolicyd-cli (1)
手册页。 -
文档与
fapolicyd
软件包一起安装在/usr/share/fapolicyd/sample-rules/README-rules
文件中。