温馨提示×

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(下次启动生效)。
  • 查看与切换
    • 查看:getenforcesestatus
    • 切换:setenforce 1|0(仅在 enforcing/permissive 间切换,立即生效)
  • 持久化配置
    • 配置文件:/etc/selinux/config(字段 SELINUX=enforcing|permissive|disabledSELINUXTYPE=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。

0