限制普通用户访问敏感配置文件的核心是“最小权限”原则:先用chown/chmod设root属主与640权限并加入专用组,再用ACL单用户授权或禁止,辅以chattr +i防篡改,最后通过SELinux/AppArmor实施强制访问控制。

限制普通用户访问敏感配置文件,核心是“最小权限”原则:只让真正需要的人读取,其他人一律拒绝。不能只靠密码或隐藏路径,必须用系统级权限机制层层设防。
基础权限与属主控制
这是第一道也是最有效的防线。敏感配置文件(如 /etc/shadow、/etc/ssh/sshd_config、自定义的 /opt/app/conf/secrets.yml)默认不应开放给普通用户。
- 把文件所有者设为 root,所属组设为专用管理组(如 adm 或新建的 confadmin):
sudo chown root:confadmin /path/to/sensitive.conf - 权限设为 640(所有者读写、组可读、其他用户无权):
sudo chmod 640 /path/to/sensitive.conf - 把有正当需求的运维人员加入该组:
sudo usermod -aG confadmin alice
用 ACL 补充单用户授权
当某位普通用户(比如开发人员)需临时读取某个配置但又不能加进管理组时,ACL 可绕过组机制直接赋权,不破坏整体结构。
- 先确认文件系统支持 ACL(多数现代发行版默认开启):
mount | grep "$(df . | awk 'NR==2 {print $1}')" | grep acl - 单独给用户 bob 读权限:
sudo setfacl -m u:bob:r /path/to/sensitive.conf - 禁止用户 eve 访问(即使他属于 confadmin 组):
sudo setfacl -m u:eve:--- /path/to/sensitive.conf - 查看效果:
getfacl /path/to/sensitive.conf
用 chattr 防止误删或覆盖
权限再严,也挡不住 root 或有 sudo 权限的人手动 rm 或重定向覆盖。对关键配置文件加不可变属性(immutable),能从根本上阻止修改。
- 设置不可删除、不可修改、不可重命名:
sudo chattr +i /etc/ssh/sshd_config - 修改前必须先解除:
sudo chattr -i /etc/ssh/sshd_config - 注意:
+i后连 root 都无法操作,适合长期稳定、极少变更的配置;日常维护中建议仅在发布后启用。
配合 SELinux 或 AppArmor 强化策略
传统权限和 ACL 属于自主访问控制(DAC),一旦用户提权(如通过漏洞获得 root shell),就可能绕过。SELinux/AppArmor 提供强制访问控制(MAC),从内核层限制进程行为。
- 例如,让 httpd_t 域的进程无法读取 /opt/app/conf/ 下的文件,哪怕它以 root 身份运行:
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/app/conf(/.*)?"sudo restorecon -Rv /opt/app/conf - Ubuntu/Debian 用户可用 AppArmor:编辑
/etc/apparmor.d/usr.sbin.nginx,添加/opt/app/conf/** r,并禁用其他路径读取。 - 验证是否生效:
ausearch -m avc -ts recent | grep denied查看拒绝日志。











