SELinux(Security-Enhanced Linux)是Linux内核的强制访问控制(MAC)安全模块,其工作原理基于细粒度的安全策略控制。以下是其核心工作机制的深度解析:
标签系统(Labeling)
user:role:type:level
(如 system_u:object_r:httpd_exec_t:s0
)ls -Z
或ps -Z
可查看标签策略引擎
.pp
文件)DAC检查先行
AVC决策(Access Vector Cache)
<subject context, object context, class, permission>
/var/log/audit/audit.log
记录策略规则示例
allow httpd_t httpd_content_t : file { read getattr };
表示允许httpd进程(httpd_t)读取web内容文件(httpd_content_t)
组件 | 功能说明 |
---|---|
security server | 内核中的策略决策点,处理访问请求 |
policy.db | 二进制策略文件(通常位于/etc/selinux/[type]/policy/policy.xx ) |
libselinux | 用户空间库,提供SELinux API(如setcon() ) |
restorecon | 修复文件系统标签的工具 |
auditd | 记录违反策略的事件(需与ausearch 工具配合使用) |
运行时模式
# 查看当前模式
getenforce # Enforcing/Permissive/Disabled
# 临时切换模式
setenforce 0|1
配置文件
/etc/selinux/config
决定系统启动时的默认模式:
SELINUX=enforcing
SELINUXTYPE=targeted
权限拒绝分析
# 1. 查看audit日志
ausearch -m avc -ts recent
# 2. 生成人类可读报告
audit2why -av
# 3. 快速修复建议
audit2allow -a
自定义策略模块
# 从拒绝日志生成策略模块
grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
# 加载模块
semodule -i mypolicy.pp
avcstat
监控)通过理解这些机制,可以更有效地配置SELinux策略,在安全性与可用性之间取得平衡。对于生产环境,建议在Permissive模式测试策略后再切换到Enforcing模式。