Linux SELinux如何实现强制访问控制
导读:Linux SELinux强制访问控制的实现机制 一 核心概念与架构 主体与客体:主体是发起访问的进程,客体是被访问的文件、目录、端口、套接字、消息等。 安全上下文 Security Context:每个主体/客体都有标签,格式通常为us...
Linux SELinux强制访问控制的实现机制
一 核心概念与架构
- 主体与客体:主体是发起访问的进程,客体是被访问的文件、目录、端口、套接字、消息等。
- 安全上下文 Security Context:每个主体/客体都有标签,格式通常为user:role:type:level(如 system_u:object_r:httpd_sys_content_t:s0),其中最关键的是type(主体为“域”domain,客体为“类型”type)。
- 策略与规则:策略是一组基于上下文的访问约束,核心为Type Enforcement(TE)规则,典型形式为:
allow 主体类型 客体类型:客体类别 { 操作集 } ;
例如:允许域为httpd_t的进程读取类型为httpd_sys_content_t的文件。 - AVC 审计:所有被策略拒绝的访问都会以AVC消息记录,常见路径为**/var/log/audit/audit.log**。
- 工作特点:在传统的DAC(rwx 权限)检查之后进行 SELinux 检查;拒绝优先于 DAC,即使以root身份运行,仍受策略约束。
二 工作流程
- 进程(主体)发起对资源(客体)的访问请求。
- 内核先进行DAC检查(所有者/组/其他权限)。
- 若 DAC 通过,SELinux 提取主体域与客体类型,在策略数据库中匹配allow规则及类别权限。
- 匹配则放行;不匹配则在Enforcing模式下拒绝,并记录AVC日志;在Permissive模式下仅记录不拒绝。
- 审计日志用于排错与策略优化。
三 运行模式与策略类型
- 运行模式(由**/etc/selinux/config或符号链接/etc/sysconfig/selinux**控制):
- enforcing:强制执行策略,违规拒绝并记录。
- permissive:仅记录违规,不阻断,便于调试(会产生更多 AVC 日志)。
- disabled:完全关闭 SELinux 内核钩子,需重启;不建议在生产环境使用。
- 策略类型:
- targeted:仅保护关键网络守护进程,其他主体多运行在unconfined_t,易用性与兼容性较好。
- strict:对系统全局实施强制访问控制,覆盖面广、复杂度高。
- 模式切换与配置要点:
- 查看/切换:getenforce、setenforce 0|1;永久配置在**/etc/selinux/config的SELINUX=与SELINUXTYPE=**项。
- 从disabled切换到启用状态时,可能因文件标签不一致导致问题;推荐创建**/.autorelabel**并重启以安全重打标签,或使用 fixfiles(不推荐在运行系统上直接执行)。
四 标签管理与策略调优
- 查看与临时修改:
- 查看:ls -Z、ps -eZ;
- 临时修改:chcon -t 类型 文件/目录(重启或 restorecon 后可能恢复)。
- 永久修改与默认规则:
- 添加默认文件上下文:semanage fcontext -a -t 类型 “/path(/.*)?”;
- 应用:restorecon -Rv /path;
- 大规模或首次启用时可用**/.autorelabel**触发全系统重标记。
- 策略模块与布尔值:
- 管理模块:semodule -l/-i/-r;
- 功能开关:getsebool -a、setsebool -P 布尔名 on|off(加 -P 永久生效)。
- 典型排错流程:
- 查看拒绝:ausearch -m avc -ts recent 或 dmesg | grep avc;
- 解释建议:sealert -l *(需安装 setroubleshoot);
- 必要时用 audit2allow 生成自定义模块,审计通过后加载:audit2allow -M 模块名 & & semodule -i 模块名.pp。
五 最小权限实践示例
- 场景:将网站内容放到自定义目录**/data/web**,让 Apache 可读取。
- 设定默认上下文并应用
semanage fcontext -a -t httpd_sys_content_t “/data/web(/.*)?”
restorecon -Rv /data/web - 如 Apache 需要对外连接,开启布尔值
setsebool -P httpd_can_network_connect on - 验证与排错
ps -eZ | grep httpd(确认进程域)
ausearch -m avc -ts recent(如有拒绝,按提示修复或生成策略模块)
说明:保持Enforcing模式,优先通过“正确标签 + 布尔值 + 最小必要规则”来适配应用,而非直接放宽策略。
- 设定默认上下文并应用
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux SELinux如何实现强制访问控制
本文地址: https://pptw.com/jishu/788769.html
