SELinux 与 AppArmor
一、SELinux
1. 概念
- 美国 NSA 开发
- 强制访问控制(MAC)
- 标签化(subject/object)
2. 模式
enforcing:强制permissive:只警告不阻止disabled:关闭
getenforce
setenforce 0 # permissive
setenforce 1 # enforcing
3. 文件标签
ls -Z
ps -eZ
id -Z
# 改标签
chcon -t httpd_sys_content_t /var/www/html/index.html
restorecon -v /path/to/file
# 查看所有类型
seinfo -t
4. 策略
# 策略包
semodule -l
# 加载
semodule -i mypolicy.pp
# 生成
audit2allow -a
# 日志
ausearch -m avc
sealert -a /var/log/audit/audit.log
5. 嵌入式 SELinux 定制
- Yocto:
meta-selinux - Buildroot:
BR2_PACKAGE_LIBSELINUX - 通常只启用最小策略
二、AppArmor
1. 概念
- Ubuntu 默认
- 路径标签(非 type)
- 简单易用
2. 配置
apt install apparmor apparmor-utils
aa-status
3. 策略
/etc/apparmor.d/
# 例:限制 myapp
cat > /etc/apparmor.d/usr.bin.myapp <<EOF
#include <tunables/global>
/usr/bin/myapp {
#include <abstractions/base>
/etc/myapp.conf r,
/var/log/myapp w,
/tmp/myapp-* rwk,
deny capability sys_admin,
}
EOF
apparmor_parser -r /etc/apparmor.d/usr.bin.myapp
三、能力(Capabilities)
# 查看
getcap /usr/bin/myapp
# 设置
setcap cap_net_raw+ep /usr/bin/ping
常见 capability:
- CAP_CHOWN
- CAP_DAC_OVERRIDE
- CAP_NET_ADMIN
- CAP_NET_RAW
- CAP_SYS_ADMIN
- CAP_SYS_NICE
- CAP_SYS_TIME
- CAP_MKNOD
四、seccomp
1. 概念
- 限制进程可用的系统调用
- 应用层沙箱
2. 使用
#include <seccomp.h>
scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ALLOW);
seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 0);
seccomp_load(ctx);
seccomp_release(ctx);
3. Docker / systemd 用 seccomp 限制容器
五、嵌入式建议
- 启用 SELinux 或 AppArmor
- 最小化 root 权限(用 capability 拆分)
- 应用内启用 seccomp
- 远程升级签名校验
- 网络端口最小化