apparmor 访问控制详解
AppArmor配置文件描述了授予给定程序的强制访问权限,并且使用AppArmor_parser 执行AppArmor策略模块。
所有资源和程序都需要完整的路径。在配置文件中可能存在任意数量的子文件,它仅受内核内存大小限制。子文件名最长974个字符。子配置文件可用于以特殊方式限制应用程序,或者当希望子进程在系统上不受限制,但父进程需要被限制。hats是以一种特殊的子配置,用于aa_change_hat API的调用。
apparmor可以做到以下几方面的控制:
1.文件系统的访问控制
2.资源限制
3.网络访问控制
4.capability条目
5.mount控制
6.Pivot Root 控制
7. PTrace 控制
8.Signal 控制
9.dbus 控制
10. unix socket 控制
11.change_profile控制
一、文件系统的访问控制
选项 | 说明 |
---|---|
r | Read mode |
w | Write mode |
a | Append mode |
m | Allow executable mapping |
示例:
# Last Modified: Wed Feb 12 19:25:31 2020
#include <tunables/global>
/usr/bin/vim.tiny {
#include <abstractions/base>
/lib/x86_64-linux-gnu/ld-*.so mr,
/usr/bin/vim.tiny mr,
/var/tmp/** rw,
/var/tmp/test1.txt r,
/var/tmp/test2.txt ar,
/var/tmp/test3.txt wr,
}
二、资源限制
AppArmor可以设置和控制与配置文件相关联的资源限制,可以参照setrlimit(2)手册页。
AppArmor rlimit控制允许设置限制并限制它们的更改,这些操作可以被审计。在强制模式下,这些限制被标准内核强制限制。
示例:
set rlimit data <= 100M,
set rlimit nproc <= 10,
set rlimit nice <= 5,
三、网络控制
AppArmor支持简单的粗粒度网络中介。。网络规则可以限制所有基于socke(2)的基本操作。对一个给定类型和族的套接子进行创建、读、写的检测。无法对tcp, udp, raw协议上的端口号进行控制。
示例:
network, #allow access to all networking
network tcp, #allow access to tcp
network inet tcp, #allow access to tcp only for inet4 addresses
network inet6 tcp, #allow access to tcp only for inet6 addresses
network netlink raw, #allow access to AF_NETLINK SOCK_RAW