为程序应用apparmor
策略
例如, 限制/bin/touch
, 让touch
对/tmp/
目录下的所有文件只读, 步骤如下
在/etc/apparmor.d/
中新建一个配置文件, 文件名最好是bin.touch
, 这是因为apparmor
的约定是为每一个程序使用一个配置文件, 配置文件的路径就是程序的路径把/
替换成.
, 此约定应该不是强制的, 我测试发现使用任意配置文件名都可以, 只要配置文件里面的内容正确即可
配置文件内容如下, 注意: 要限制的程序不能是软连接, 必须跟踪到目标文件, 否则规则无效
#include <tunables/global>
/bin/touch {
#include <abstractions/base>
/tmp/** r,
}
使用apparmor_parser /etc/apparmor.d/bin.touch
把配置通知给驱动即可, 此时touch /tmp/xxx会提示被拒绝, dmesg可以看到拒绝日志
如果之后又修改了配置文件内容可以使用/etc/init.d/apparmor reload
重新加载配置文件
使用cat /sys/kernel/security/apparmor/profiles
可以查看驱动应用了哪些配置文件
配置文件简介
apparmor
配置文件使用的是一种说明性语言编写, 配置文件中的条目的顺序是不重要的, 你可以把所有配置都写到一个文件里面, 也可以分开写成多个文件然后会用#include
包含其他文件; 最终, 这个策略文件会被编译成架构独立的二进制文件通知到内核
配置文件中include
的路径是相对于/etc/apparmor.d/
的, 例如include <abstructions/base>
文件在/etc/apparmor.d/abstructions/base
配置文件格式
/bin/touch {...}
其中/bin/touch
是程序的全路径, 注意: 如果是软连接要跟踪到目标文件
{...}
中填写具体的规则, 例如/tmp/** r,
对/tmp/
目录下的说有文件都只读
详细配置文件格式见参考资料
参考资料
https://manpages.ubuntu.com/manpages/jammy/en/man5/apparmor.d.5.html
https://manpages.ubuntu.com/manpages/jammy/en/man8/apparmor_parser.8.html
https://manpages.ubuntu.com/manpages/jammy/en/man7/apparmor.7.html
配置文件组件和语法
https://zhuanlan.zhihu.com/p/547772872