SELinux(Security-Enhanced Linux)是 Linux 内核中强制实施的强制访问控制(MAC)安全机制,旨在通过细粒度的权限管理增强系统安全性。它与传统的基于用户/组的权限(自主访问控制,DAC)互补,提供更严格的资源保护。
核心概念
-
工作原理
-
为系统中的每个进程、文件、端口等对象分配安全上下文(标签,如
user_u:role_r:type_t
)。 -
通过预定义的策略规则,控制进程(主体)能否访问对象(如文件、网络端口)。
-
-
安全模式
-
Enforcing:强制执行策略,拒绝违规操作。
-
Permissive:仅记录违规行为,不阻止(用于调试)。
-
Disabled:完全关闭 SELinux(不推荐)。
-
为什么需要 SELinux?
-
防御零日漏洞和提权攻击(即使进程被入侵,其权限仍受策略限制)。
-
防止配置错误导致的安全风险(如 Web 服务器被黑后无法随意读写系统文件)。
-
满足高安全场景的合规要求(如政府、金融系统)。
关键操作
-
查看状态
sestatus # 查看模式及策略版本 getenforce # 仅显示当前模式(Enforcing/Permissive/Disabled)
-
临时切换模式
setenforce 1 # 切换为 Enforcing setenforce 0 # 切换为 Permissive(重启后失效)
-
永久修改模式
编辑/etc/selinux/config
,设置:SELINUX=enforcing 可选值:enforcing, permissive, disabled -
管理策略规则
-
查看文件/进程的上下文:
ls -Z /path/to/file # 查看文件标签 ps -Z # 查看进程标签
-
修改文件上下文:
chcon -t httpd_sys_content_t /var/www/html/file # 临时修改 restorecon -Rv /path # 根据策略恢复默认标签
-
调整布尔值(动态规则开关):
getsebool -a # 列出所有布尔值 setsebool -P httpd_can_network_connect on # 永久启用某规则
-
常见问题处理
-
SELinux 导致服务异常
-
切换为
Permissive
模式测试是否 SELinux 引起:setenforce 0 -
查看日志定位原因:
grep "AVC" /var/log/audit/audit.log # 检查拒绝记录 audit2why -a # 解释拒绝原因 sealert -a /var/log/audit/audit.log # 生成友好报告(需安装 setroubleshoot)
-
-
修复标签或添加规则
-
根据日志提示使用
restorecon
或semanage
修复标签:semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" # 添加新规则 restorecon -Rv /web # 应用新标签
-
生成自定义策略模块(若需长期允许某操作):
audit2allow -a -M mypolicy # 从日志生成策略 semodule -i mypolicy.pp # 安装模块
-
-
SELinux 是 Linux 的深度防御机制,与防火墙(如 iptables)互补。
-
初次接触时可能因权限问题感到困扰,但掌握后能显著提升系统安全性。
-
调试时优先使用
Permissive
模式分析日志,避免直接禁用。