Linux敏感文件如何保护_权限与审计组合方案【教程】

Linux敏感文件权限加固需结合强制访问控制(SELinux/AppArmor)、审计追踪(auditd)与最小权限原则:设umask 077、/etc/shadow权限640并配shadow组、禁用敏感目录group/other执行权、启用MAC策略限制进程访问、配置auditd监控关键路径读写及属性变更、每日哈希校验与自动化权限扫描。

Linux敏感文件如何保护_权限与审计组合方案【教程】

Linux系统中,敏感文件(如/etc/shadow/etc/passwd、SSH密钥、数据库配置、环境变量文件等)一旦被未授权访问或篡改,可能直接导致权限失控、数据泄露甚至系统沦陷。单纯靠文件权限(chmod/chown)远远不够,必须结合强制访问控制、审计追踪与最小权限原则,构建纵深防御。

核心权限加固:不止是 chmod 600

基础权限设置是第一道门槛,但需注意细节:

  • 避免过度依赖 umask:用户创建文件时默认权限受 umask 影响,建议在/etc/profile/etc/bash.bashrc中统一设为umask 077(新建文件默认仅属主可读写)
  • 敏感目录必须禁用 group/other 执行权:例如/etc/ssh应为drwx------(700),否则其他用户可能遍历其内容
  • shadow 文件需配合 shadow 组隔离:确保/etc/shadow属主为 root、属组为 shadow、权限为640,再将仅需读取的程序(如 login)加入 shadow 组,而非开放 world-readable
  • 使用 setgid 配合专用组管理配置目录:例如/opt/app/conf设为drwxr-s---,属组为 appconf,所有运维人员加入该组,避免直接给 root 权限

启用 SELinux 或 AppArmor 实现类型强制控制

传统 DAC(自主访问控制)无法阻止 root 进程越权读取。SELinux/AppArmor 提供 MAC(强制访问控制),按进程类型限制其能访问的文件类型:

  • SELinux 示例:将 Web 应用配置文件标记为httpd_config_t,即使 Apache 以 root 运行,也无法读取标记为etc_t的普通配置文件
  • 快速启用(RHEL/CentOS)sudo setenforce 1临时开启,修改/etc/selinux/configSELINUX=enforcing永久生效
  • AppArmor(Ubuntu/Debian):用aa-genprof为关键服务生成策略,重点限制其对/etc/var/secrets等路径的访问能力
  • 不建议完全关闭:若因兼容性问题需禁用 SELinux,请至少启用 auditd 并强化日志监控

审计关键文件访问行为:auditd + rules 持续盯防

权限只是“门锁”,auditd 是“监控摄像头”。需精准审计敏感路径的读、写、执行、属性变更:

  • 添加持久化审计规则:编辑/etc/audit/rules.d/privileged.rules,加入:

-w /etc/shadow -p wa -k identity -w /etc/passwd -p wa -k identity -w /root/.ssh/ -p wa -k ssh_root -w /home/*/.ssh/ -p wa -k ssh_user -w /etc/ssl/private/ -p wa -k ssl_private

其中-p wa表示监控 write 和 attribute change(如 chmod/chown),-k指定审计键名便于日志过滤。

  • 实时查看异常访问sudo ausearch -k identity --start today | aureport -f -i
  • 对接 SIEM 或邮件告警:用audispd插件将匹配identity键的日志转发至日志服务器,或通过ausearch + awk + mail脚本触发即时通知

定期验证与自动化检查机制

人工检查易遗漏,需固化为周期任务:

  • 每日校验关键文件哈希:用sha256sum /etc/shadow /etc/passwd > /var/log/filehash.baseline,配合 cron 每日比对变化
  • 扫描非预期的 world-writable 敏感文件find /etc /root /opt -type f -perm -o+w 2>/dev/null,发现即告警
  • 检查 SSH 密钥权限合规性find /root /home -name "id_rsa" -o -name "id_dsa" -o -name "id_ecdsa" -o -name "id_ed25519" -exec ls -l {} ;,确保私钥权限≤600、公钥≤644
  • 集成进 CI/CD 或配置管理工具:Ansible 的file模块可声明式定义权限;SaltStack 可用file.managed自动修复偏差