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

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/config中SELINUX=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自动修复偏差