Linux Context与安全相关
小樊
46
2025-11-29 14:18:55
Linux Context与安全要点
一 概念与差异
- 安全上下文 Security Context:在启用 SELinux 时,内核给进程、文件、用户会话等对象打上标签,用于实施强制访问控制 MAC。典型格式为:user:role:type:level(如:system_u:object_r:etc_t:s0)。访问控制以“主体(进程域)-客体(类型)-操作”匹配策略规则,且在传统 DAC(rwx/ACL) 检查之后进行,即 DAC 先拒绝则 SELinux 不再介入。该模型常结合 RBAC、TE(类型强制),可选 MLS/MCS。
- 运行上下文 Run/Execution Context:指进程在某一时刻的执行环境(寄存器、栈、地址空间、打开文件等)。内核在系统调用、中断/异常、调度切换时保存并恢复这些状态,确保隔离与正确性;这是操作系统层面的“上下文切换”,与安全标签无直接等价关系,但同样影响安全边界与攻击面。
二 SELinux安全上下文的组成与查看
- 组成字段
- SELinux user:如 unconfined_u、system_u,与 Linux 用户存在映射,决定可用的角色与 MLS/MCS 范围。
- Role:如 object_r、system_r,在 RBAC 中承上启下(主体域与客体类型的桥梁)。
- Type(域/类型):策略最小授权单位,决定“谁(域)可对何类(类型)对象做何操作”,是日常排障与策略编写的核心。
- Level(MLS/MCS):可选,如 s0、s0:c0.c1023,用于分级保密/完整性场景。
- 常用查看命令
- 文件/目录:ls -Z
- 进程:ps -Z
- 登录用户映射:semanage login -l
- 示例:ls -Z 输出可能为 unconfined_u:object_r:user_home_t:s0。
三 运行模式与配置
- 三种模式
- Enforcing:策略强制生效,违规拒绝并记录。
- Permissive:仅记录不阻断,便于排障。
- Disabled:完全关闭 SELinux(下次启动生效)。
- 查看与切换
- 查看:getenforce、sestatus
- 切换:setenforce 1|0(仅在 enforcing/permissive 间切换,立即生效)
- 持久化配置
- 配置文件:/etc/selinux/config(字段 SELINUX=enforcing|permissive|disabled;SELINUXTYPE=targeted|mls)
- 注意:从 disabled 切换到 enforcing/permissive 需要重启;首次开启后系统可能进行全量重打标签,启动较慢属正常。
四 常见操作与故障排查
- 管理文件上下文
- 临时修改:chcon -t type file(易在重打标签或 restorecon 后丢失)
- 永久修正:semanage fcontext -a -t type ‘/path(/.*)?’ 后执行 restorecon -R /path
- 恢复默认:restorecon -R /path
- 默认类型:新创建对象通常继承父目录的 SELinux 类型(如 /etc 下新文件常为 etc_t)。
- 典型故障与定位
- 现象:权限位正确(如 644/755)仍被拒,常见于类型不匹配(如 httpd 读取 admin_home_t 被拒)。
- 定位:查看 /var/log/audit/audit.log(需启用 auditd),使用 audit2why/audit2allow 辅助分析;必要时用 sesearch 查询策略规则。
- 复制 vs 移动:cp 会继承目标目录类型;mv 保留原类型,易引发访问异常。
- 大规模修复:创建 /.autorelabel 并重启,触发系统自动重标记。
五 实践建议
- 保持 SELinux 为 Enforcing,排障期可短时切 Permissive;避免直接 Disabled。
- 变更前备份策略与关键配置,变更后用 restorecon 校验关键目录标签。
- 对常见服务(如 httpd、mysqld、named)使用对应的标准类型(如网页内容常见 httpd_sys_content_t),减少自定义策略面。
- 启用并监控 auditd,定期审计 AVC 拒绝日志,结合 semanage fcontext/restorecon 做“声明式”修复而非临时 chcon。