银河麒麟OS默认未启用AppArmor,需先验证内核支持(检查/sys/kernel/security/apparmor)和服务状态(service apparmor status),再按系统类型安装工具集,最后加载profile并确认enforce模式生效。

确认AppArmor服务是否已启用
银河麒麟OS默认未启用AppArmor,部分V10/V11桌面版甚至未预装该模块,直接执行aa-status会提示“command not found”或“No profiles loaded”。必须先验证内核支持与服务状态,否则后续所有配置均无效。
以root权限运行:ls /sys/kernel/security/apparmor 2>/dev/null。若返回空,说明内核未编译AppArmor支持,此路径下无任何文件;若返回目录结构,则继续下一步。
执行:service apparmor status。若显示“active (exited)”且无报错,表示服务已加载但未运行策略;若显示“inactive (dead)”,需手动启用——但注意:【麒麟OS多数版本的AppArmor处于禁用状态,强行启动可能因缺少profile导致系统服务异常】。
安装并启用AppArmor工具集
Debian系麒麟(ID_LIKE=debian)执行:apt update && apt install -y apparmor apparmor-utils apparmor-profiles-extra。
CentOS系麒麟(ID_LIKE=centos/rhel)需先启用EPEL源:dnf install -y epel-release && dnf install -y apparmor-utils。注意:麒麟V11 SP3后部分ARM版EPEL包名可能为apparmor-utils-aarch64,需用dnf search apparmor确认。
安装完成后,执行:aa-status。首次运行会提示“No profiles are loaded”,这是正常现象——AppArmor本身不自带默认策略,必须手动加载或生成profile才能生效。
加载示例策略并切换为强制模式
方法一:启用基础系统策略(推荐测试用)
执行:cp /etc/apparmor.d/usr.sbin.tcpdump /etc/apparmor.d/disable/ → ln -s /etc/apparmor.d/usr.sbin.tcpdump /etc/apparmor.d/disable/usr.sbin.tcpdump → aa-enforce /etc/apparmor.d/usr.sbin.tcpdump。
这一步将tcpdump的策略从禁用状态激活,并设为enforcement模式。注意:【若系统中不存在该profile,aa-enforce会静默失败,必须先确认文件存在】。
方法二:快速启用全部已安装profile
执行:aa-genprof /usr/bin/firefox(以Firefox为例),按提示完成交互式策略生成→保存→重启服务。此操作会自动调用aa-logprof解析日志并生成最小化策略,适合桌面用户。
验证是否生效:aa-status | grep "processes are in enforce mode"。输出数字大于0即表示已有进程受控。
查看当前策略运行状态与日志
执行:aa-status,观察三类关键信息:已加载profile数量、处于enforce模式的进程数、处于complain模式的进程数。若后两者均为0,说明策略未真正生效。
检查拒绝日志:dmesg | grep -i apparmor | tail -20。若看到“operation denied”字样,证明策略正在拦截越权行为;若只有“complain”日志,说明对应profile仍处于学习模式,尚未启用强制限制。
临时切换某profile为complain模式用于调试:aa-complain /etc/apparmor.d/usr.bin.python3。这不会影响其他profile,但下次重启后仍恢复原模式——除非手动修改配置文件中的mode字段。

















