限制普通用户访问敏感文件需分层设防:先用chown/chmod最小化基础权限,再通过ACL细粒度授权或禁止特定用户,必要时用chattr +i锁定文件,高安全场景配合SELinux策略与auditd审计。

限制普通用户访问敏感文件,核心是切断其读、写、执行路径,而不是只靠“禁止访问”这种模糊操作。关键在于分层设防:基础权限最小化 + 属主属组精准控制 + 必要时启用更强机制。
调整属主和基础权限(最常用且有效)
Linux 默认通过 owner/group/others 三类身份控制访问,这是第一道也是最关键的防线。
- 用
ls -l /etc/shadow查看当前权限,典型错误是权限过宽(如-rw-rw-rw-) - 将敏感文件属主设为
root,属组设为专用管理组(如shadow):sudo chown root:shadow /etc/shadow - 设置严格权限,例如仅 root 可读写、组内成员仅可读:
sudo chmod 640 /etc/shadow - 把需授权的管理员加入该组:
sudo usermod -aG shadow admin_user
用 ACL 单独控制特定用户(不依赖组)
当某个用户需要临时或例外访问,又不能将其加入管理组时,ACL 提供更细粒度支持。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 先确认文件系统已启用 ACL:
mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,无输出则需在/etc/fstab对应行加acl并重挂载 - 给指定用户只读权限:
sudo setfacl -m u:alice:r /etc/shadow - 明确禁止某用户访问(即使他属于某个有权限的组):
sudo setfacl -m u:bob:--- /etc/shadow - 查看效果:
getfacl /etc/shadow
用 chattr +i 锁死关键文件(防 root 以下所有用户修改/删除)
chmod 和 chown 都能被 root 覆盖,而 chattr +i 是内核级不可变标志,普通用户甚至 root 在未解锁前都无法改动文件内容、重命名或删除。
- 锁定:
sudo chattr +i /etc/shadow - 验证:
lsattr /etc/shadow应显示类似----i---------e--- - 注意:启用后
passwd、usermod等命令会失败,日常运维中建议仅在稳定期启用;变更前必须先sudo chattr -i /etc/shadow
配合 SELinux 或 auditd 增强审计与拦截(高安全场景)
当系统已启用 SELinux(检查 sestatus 输出为 enforcing),可进一步用策略阻止特定用户域访问敏感文件,即使其拥有传统权限。
- 为文件打上专用类型标签:
sudo semanage fcontext -a -t etc_t "/etc/shadow"sudo restorecon -v /etc/shadow - 若发现某用户(如
user_u:user_r:user_t)尝试读取被拒绝,可提取日志生成定制拒绝规则:sudo ausearch -m avc -ts recent | audit2allow -M deny_user_readsudo semodule -i deny_user_read.pp - 作为补充,用
auditd记录所有异常访问:sudo auditctl -w /etc/shadow -p r -k sensitive_shadow_access










