AppArmor配置说明
2017-06-28 本文已影响488人
slords
AppArmor是一个对访问权限进行控制的内核应用。但是在权限配置、撰写apparmor的配置文件时,由于缺乏配置文档,在配置时十分困难。后来在Ubuntu官网上找到配置说明,以此记录以说明。
配置文件示例
#导入变量,目前AppArmor并不支持动态变量
#include <tunables/global>
/usr/sbin/tcpdump {
# 使用#include导入预设配置
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
# 用capability 进行系统权限配置
capability net_raw,
capability setuid,
capability setgid,
capability dac_override,
# 用network 进行网络权限配置
network raw,
network packet,
# for -D
capability sys_module,
# 用@{PROC}表示/proc/
# 该变量通过tunables/global配置中导入的tunables/proc文件定义的
@{PROC}/bus/usb/ r,
@{PROC}/bus/usb/** r,
# for -F and -w
# 使用audit 对审计权限进行配置
# 用@{HOME}表示/home/*/ /root/
# 该变量通过tunables/global配置中导入的tunables/home文件定义的
audit deny @{HOME}/.* mrwkl,
audit deny @{HOME}/.*/ rw,
audit deny @{HOME}/.*/** mrwkl,
audit deny @{HOME}/bin/ rw,
audit deny @{HOME}/bin/** mrwkl,
@{HOME}/ r,
@{HOME}/** rw,
/usr/sbin/tcpdump r,
}
参数说明:
文件匹配可以支持一定语法的正则匹配,规则如下:
*: 匹配当前目录下任意长度字符的文件、目录。
该规则在通配符紧跟在目录分隔符后时,不匹配以点开头的目录、文件
该规则在通配符紧跟在目录分隔符后时,不匹配空名目录。
等价于PCRE中写法([ ^/\000 ]*)
**: 匹配当前目录下及任意层子目录下任意长度字符的文件、目录。
该规则在通配符紧跟在目录分隔符后时,不匹配以点开头的目录、文件
等价于PCRE中写法([ ^\000 ]*)
?: 匹配一个非"/"的字符。
等价于PCRE中写法 [ ^/ ]
{ }: 可以匹配的替代字符串的逗号分隔列表。
等价于PCRE中写法 ( | )
[ ]: 字符类。
与PCER语法相同
[ ^ ]: 反转字符类。
与PCER语法相同
{ *^ }: 可以匹配被排除字符串的逗号分隔列表。
eg. /etc/{ *^shadow } 等价于除了/etc/shadow 以外/etc/* 所匹配的
eg. /etc/{ *^shadow, passwd } 等价于 /etc/* - /etc/{ shadow, passwd }
eg. /etc/{ *^*shadow } 等价于 /etc/* - /etc/*shadow
eg. /etc/{ **^shadow } 等价于 /etc/** matches - /etc/shadow
eg. /etc/{ **^shadow, passwd } 等价于 /etc/** - /etc/{shadow, passwd}
eg. /etc/{ **^*shadow } 等价于 /etc/** - /etc/*shadow
注意. 上述规则来源《AppArmor核心策略参考》,创作于AppArmor的一个非常早的阶段,该篇并未被塑造用于作参考手册
以下参数代表对上述匹配文件有如下权限:
r: 读
w: 写
m: 存储器映射,
k: 文件锁定
l: 创建硬链接
ix: 执行并继承该安全配置
Px: 在清理环境之后,执行并使用其他安全配置
Ux: 在清理环境之后,执行不做限制
参考资料
AppArmor - Ubuntu Wiki
https://wiki.ubuntu.com/AppArmor
AppArmor Core Policy Reference - AppArmor
https://wiki.ubuntu.com/AppArmor