温馨提示×

SELinux如何帮助Linux系统审计

小樊
39
2025-12-20 05:07:03
栏目: 智能运维

SELinux如何帮助Linux系统审计

核心机制与审计价值

  • 强制访问控制 MAC 与最小权限:在 Enforcing 模式下,未被策略显式允许的访问会被拒绝,并记录审计事件;在 Permissive 模式下仅告警不阻断,便于排障;Disabled 则完全关闭 SELinux。与传统 DAC(rwx/属主/属组) 不同,SELinux 以进程“域”和资源“类型”为核心进行细粒度控制,即使 root 进程也受策略约束,能显著缩小攻击面并提供可追责的审计线索。系统默认常见为 targeted 策略,仅对关键服务做强制限制,其他主体运行在 unconfined 域中,兼顾安全与可用性。

审计日志内容与可见性

  • AVC 拒绝事件的关键字段:SELinux 将访问决策写入内核审计子系统,典型记录包含 type=AVCavc: denied { 操作 }pidcomm(进程名)、path(目标路径)、scontext(源上下文)、tcontext(目标上下文)、tclass(客体类别)、permissive(是否宽容模式)等。例如:type=AVC msg=audit(…): avc: denied { getattr } for pid=1067 comm=“httpd” path=“/var/myserver/services” scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file permissive=0。借助这些字段可精准还原“谁在何时以何种域尝试对哪个类型的哪个对象执行何操作,并因何被拒”。日志通常写入 /var/log/audit/audit.log,亦可通过 journalctl | grep AVC 查看。若 auditd 未运行,将难以获取完整审计记录,应优先确保其处于活动状态。

审计分析与排障流程

  • 快速判定是否存在拒绝:使用 aureport | grep AVC 查看 AVC 计数,或用 ausearch -m avc 拉取 AVC 明细;需要时结合 journalctl 检索内核日志中的 AVC 信息。
  • 定位与修复:对 /var/log/audit/audit.log 运行 sealert -a 获取图形化/步骤化诊断与修复建议;若确认是合法需求,可用 ausearch -c ‘httpd’ --raw | audit2allow -M my-httpd 生成自定义策略模块,再用 semodule -X 300 -i my-httpd.pp 加载(示例以 httpd 为例,可按需替换)。
  • 非标准目录与类型纠正:当服务使用非常规路径(如将内容放入 /abc/www/html),需为路径打上正确类型标签,例如:semanage fcontext -a -t httpd_sys_content_t “/abc/www/html(/.*)?”,随后 restorecon -R /abc/www/html 使标签生效,避免因上下文错误导致的访问拒绝被记入审计日志。

提升审计覆盖与合规

  • 确保审计管道可用:启动并持久化 auditd,确认 /var/log/audit/audit.log 正常落盘;必要时用 ausearch/aureport 定期生成 AVC 报告,形成例行审计基线。
  • 排查“被静默”的拒绝:策略中的 dontaudit 规则可能抑制部分拒绝日志,排障时可临时执行 semodule -DB 禁用 dontaudit 以暴露隐藏事件,分析完成后再恢复默认以减少噪声。
  • 变更与策略管理:从 Disabled 切换到 Permissive/Enforcing 时,建议重启并重新标记文件系统,确保上下文一致;日常变更遵循“最小权限”原则,优先通过 audit2allow/semodule 生成最小可用补丁,减少长期攻击面。

0