好的,我来帮你系统梳理 SELinux(Security-Enhanced Linux) 的概念、原理、工作机制以及配置方法,让你“一文彻底明白”它到底是什么。
1️⃣ SELinux 概念
- 全称:Security-Enhanced Linux
- 类型:Linux 内核安全模块(Linux Security Module, LSM)
- 目标:提供 强制访问控制(MAC, Mandatory Access Control),增强系统安全
- 提出者:美国国家安全局(NSA)
- 适用场景:
- 限制进程访问系统资源
- 防止未授权操作或入侵
- 强化服务器和容器安全
简单理解:SELinux 就像 Linux 的安全“护身符”,在传统的用户/组权限之上再加一层安全策略控制。
2️⃣ SELinux 与传统权限的区别
权限机制 | 特点 | SELinux 对应 |
---|---|---|
传统 DAC(Discretionary Access Control) | 基于文件所有者、用户组、权限位(rwx)控制 | 可以绕过,用户可修改 |
MAC(SELinux) | 基于 策略规则 控制访问,不能被用户随意绕过 | 强制安全策略 |
总结:传统权限是“谁拥有文件决定权限”,SELinux 是“系统策略决定权限”,安全性更高。
3️⃣ SELinux 核心组成
- 策略(Policy)
- 定义哪些 主体(process) 可以访问哪些 客体(file、socket、port)
- 分为:
- Targeted Policy(默认,大部分进程不限制)
- Strict Policy(严格,每个进程都受限制)
- MLS/MCS Policy(多级安全,多用于敏感环境)
- 上下文(Context)
- 文件、进程、端口等都被分配一个 SELinux 上下文:
user:role:type:level
- 例如:
system_u:object_r:httpd_sys_content_t:s0
- user:主体所属用户
- role:角色
- type:类型(最关键,用于访问控制)
- level:安全级别
- 访问决策(Access Vector Cache, AVC)
- 内核模块根据策略判断访问是否允许
- 日志记录违规操作
4️⃣ SELinux 工作模式
模式 | 描述 | 命令查看 / 设置 |
---|---|---|
Enforcing | 强制执行策略,违规操作被阻止 | getenforce / setenforce 1 |
Permissive | 不阻止操作,仅记录日志 | setenforce 0 |
Disabled | 关闭 SELinux | 编辑 /etc/selinux/config |
日常开发常用 Permissive 调试,生产环境推荐 Enforcing。
5️⃣ SELinux 操作示例
5.1 查看状态
sestatus
5.2 查看文件上下文
ls -Z /var/www/html
5.3 修改文件上下文
chcon -t httpd_sys_content_t /var/www/html/index.html
5.4 永久修改策略
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html
5.5 查看日志(阻止操作)
ausearch -m avc -ts today
6️⃣ SELinux 访问控制原理
- 主体(Process) 发起访问请求
- 内核获取主体和客体的 SELinux 上下文
- 内核查询 策略(Policy),判断是否允许
- 允许 → 正常访问
拒绝 → 阻止访问并记录日志
核心点:SELinux 基于类型(Type)访问控制(Type Enforcement, TE),通过策略决定进程访问文件、端口、套接字等资源。
7️⃣ 常见问题
- 服务访问被阻止
- 查看日志
/var/log/audit/audit.log
- 使用
audit2allow
生成策略允许操作
- 查看日志
- 开发调试麻烦
- 可临时切换
Permissive
模式 - 不建议长期关闭 SELinux
- 可临时切换
- 文件上下文错误
- 用
restorecon -Rv /path
恢复默认上下文
- 用
8️⃣ 总结
- SELinux 本质:Linux 内核的 强制访问控制系统
- 作用:限制进程访问资源、防止越权操作、强化系统安全
- 核心概念:主体(process)、客体(file/port)、策略(policy)、上下文(context)
- 关键操作:
- 查看状态:
sestatus
- 查看上下文:
ls -Z
- 修改上下文:
chcon
/semanage
- 查看日志:
ausearch
- 查看状态:
- 建议:
- 开发环境可用 Permissive
- 生产环境尽量 Enforcing
- 遇到阻止操作先分析日志,再修改策略
发表回复