如何通过SELinux精细化管控auditd_log_t类型审计日志的访问权限
如何通过SELinux精细化管控auditd_log_t类型审计日志的访问权限
看起来你找对方向了——利用SELinux对日志类型的区分(var_log_t 普通日志 vs auditd_log_t 审计日志)来做权限隔离完全可行,下面一步步帮你梳理解决思路:
第一步:先摸清当前哪些角色/域能访问auditd_log_t
要调整权限,首先得搞懂现有规则。SELinux的核心访问规则可以通过几个命令快速查询:
- 查看最高权限的
sysadm_t(对应sysadm_r角色)对auditd_log_t的所有允许权限:
你会发现sesearch -A -t auditd_log_t -s sysadm_tsysadm_t默认拥有对auditd_log_t文件的读、写、打开等全权限,这就是普通管理员sudo到sysadm_r后能访问审计日志的原因。 - 对比查看
staff_t(staff_u用户默认的域)的权限:
正常情况下sesearch -A -t auditd_log_t -s staff_tstaff_t本身没有访问审计日志的权限,都是通过sudo切换到sysadm_r后获得的。 - 查看系统所有可用角色,找更合适的受限管理员角色:
很多系统自带seinfo -rlogadm_r(专门管理普通系统日志的角色)、secadm_r(负责安全策略管理但权限更聚焦),这些角色的权限比sysadm_r更窄,不会默认拥有审计日志的访问权;而auditadm_r是专门用于审计日志管理的角色,适合给高级管理员使用。
第二步:调整普通管理员的角色升级路径
你的核心需求是限制普通管理员不能碰审计日志,最稳妥的做法是不让他们sudo升级到最高权限的sysadm_r,而是切换到更受限的管理员角色:
- 比如如果你的系统有
logadm_r角色,通过visudo编辑sudoers配置,让staff_u用户sudo时只能切换到logadm_r:
这样普通管理员只能获得管理普通日志的权限,无法访问staff_u ALL=(ALL) ROLE=logadm_r TYPE=logadm_t ALLauditd_log_t类型的审计日志。 - 如果你需要保留部分系统管理权限但剔除审计日志访问,可以先通过
sesearch验证secadm_r对应的secadm_t域是否有auditd_log_t的访问权限,确认后再调整sudo配置。
第三步:自定义规则(如果现有角色不够用)
如果必须让普通管理员使用sysadm_r但要限制审计日志访问,可以通过自定义SELinux模块添加拒绝规则:
- 编写模块文件(比如命名为
audit_log_restrict.te):module audit_log_restrict 1.0; require { type sysadm_t; type auditd_log_t; class file { read write open getattr }; } # 拒绝sysadm_t访问auditd_log_t类型的文件 deny sysadm_t auditd_log_t:file { read write open getattr }; - 编译并加载模块:
注意:拒绝规则要谨慎测试,避免影响系统正常的审计功能,操作前最好备份现有SELinux策略。checkmodule -M -m -o audit_log_restrict.mod audit_log_restrict.te semodule_package -o audit_log_restrict.pp audit_log_restrict.mod semodule -i audit_log_restrict.pp
第四步:验证权限是否生效
切换到普通管理员账号,尝试访问审计日志文件(比如/var/log/audit/audit.log),用ls -Z确认文件类型是auditd_log_t。如果权限配置正确,访问会被SELinux阻止,你可以用高权限角色查看审计日志验证:
ausearch -m avc -ts recent
这里会看到对应的拒绝访问记录。
备注:内容来源于stack exchange,提问作者Steve Summit
相关产品推荐
相关产品推荐

