AppArmor配置说明

AppArmor是一个对访问权限进行控制的内核应用。但是在权限配置、撰写apparmor的配置文件时,由于缺乏配置文档,在配置时十分困难。后来在Ubuntu官网上找到配置说明,以此记录以说明。

配置文件示例

#导入变量,目前AppArmor并不支持动态变量
#include 

/usr/sbin/tcpdump {
    # 使用#include导入预设配置
    #include 
    #include 
    #include 

    # 用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

你可能感兴趣的:(AppArmor配置说明)