强制访问控制(MAC)需标签、规则、拦截三层联动:先为敏感数据打专属安全标签,再限定进程访问权限,最后阻断root或挂载等绕过行为,缺一不可。

强制访问控制(MAC)不是“开了就安全”,而是靠策略标签和规则联动实现真正隔离。关键在于让每个敏感文件、每个服务进程都带上明确的“安全身份”,再用策略告诉系统“谁可以跟谁打交道”。下面分三步讲清楚怎么实操。
一、给敏感数据打上安全标签
标签是MAC的身份证,没标签就无法执行策略。以SELinux为例,不能只依赖默认标签,必须为敏感目录主动设置:
- 用
semanage fcontext -a -t mysensitive_t "/path/to/private(/.*)?"为整个目录及其子项定义专属类型; - 执行
restorecon -Rv /path/to/private将标签实际写入文件系统; - 验证是否生效:
ls -Z /path/to/private应显示mysensitive_t而非default_t或user_home_t。
注意:路径末尾的(/.*)?确保递归生效;若用KylinOS,可用kysec fpro label /path/to/private mysensitive做等效操作。
二、限定哪些进程能接触这些数据
光有标签不够,得定义“谁准许访问”。这不是改权限位,而是写策略规则:
- 确认目标服务进程域名,例如Web服务是
httpd_t,数据库服务是mysqld_t; - 用
audit2allow -a | grep mysensitive_t查看拒绝日志,提取缺失权限; - 生成并加载自定义模块:
audit2allow -M mypolicy && semodule -i mypolicy.pp; - 规则示例:
allow httpd_t mysensitive_t:dir { read search }; allow httpd_t mysensitive_t:file { read getattr };——只允许读目录结构和文件内容,禁写、禁执行。
麒麟OS中可直接用kysec fpro rule add --domain httpd_t --target mysensitive_t --access r快速配置内核级拦截规则。
三、阻断绕过行为,守住最后防线
用户或脚本可能试图用root、sudo或挂载方式绕过MAC,需叠加防护:
- 禁用非必要特权:在
/etc/sudoers中移除对敏感路径的ALL=(ALL) NOPASSWD: /bin/cp类宽泛授权; - 关闭危险挂载选项:编辑
/etc/fstab,对含敏感数据的分区添加noexec,nosuid,nodev; - 启用fpro强制保护(KylinOS):
kysec fpro enable /path/to/private,该策略运行在内核层,连root也无法绕过; - 定期检查异常标签:
find /path/to/private -type f ! -context "*:mysensitive_t:",发现未预期标签立即修正。
不复杂但容易忽略——标签、规则、拦截三层缺一不可,少一层,攻击者就可能从“被限制”变成“被放行”。

















