Ubuntu文件管理如何保护系统文件不被修改
小樊
37
2025-11-17 05:08:17
Ubuntu系统文件防修改的实用方案
一 基础权限与所有权加固
- 使用传统权限最小化原则:将关键配置文件(如**/etc/passwd、/etc/shadow、/etc/gshadow、/etc/fstab**)的所有者设为root,权限收紧,仅保留必要访问。
- 示例:
- 仅 root 读写:sudo chmod 600 /etc/shadow
- 仅 root 读写执行:sudo chmod 700 /etc/ssh/sshd_config
- 调整所有者:sudo chown root:root /etc/passwd
- 对需要精细化授权的场景,使用 ACL 精确赋权(比传统 u/g/o 更灵活):
- 安装工具:sudo apt-get install acl
- 示例:仅允许某运维账号读取敏感文件
- sudo setfacl -m u:alice:r /etc/ssh/sshd_config
- 撤销:sudo setfacl -x u:alice /etc/ssh/sshd_config
- 原则:能不用 777 就不用;服务最小权限运行;变更前备份原文件。
二 使用不可变属性 chattr 锁定关键文件
- 通过 chattr +i 为文件或目录设置“不可变”属性,使其无法被删除、重命名、修改、创建硬链接,即使是 root 也必须先移除该属性后才能操作。
- 常用命令:
- 加锁:sudo chattr +i /path/file
- 查看:lsattr /path/file(输出含 i 即表示已加锁)
- 解锁:sudo chattr -i /path/file
- 典型场景:保护账户与关键配置
- sudo chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
- 修改前临时解锁:sudo chattr -i /etc/passwd,改完再 sudo chattr +i /etc/passwd
- 目录注意:对目录加 +i 后,目录本身不可改(不能新增/删除条目),但其已存在内容是否可改取决于各文件自身的属性;如需对目录及其内容统一锁定,需对目标逐一加锁或使用脚本批量处理。
- 仅追加场景:对日志等文件可用 +a(只能追加,不能覆盖/删除),如:sudo chattr +a /var/log/my.log。
三 强制访问控制与系统完整性
- 启用 AppArmor(Ubuntu 默认):为关键服务(如 sshd、nginx)加载或编写策略,限制其只能访问指定目录与文件,即便被攻破也难以篡改系统文件。
- 常用:sudo aa-status 查看状态;为服务加载现有配置或自定义 profile。
- 如为 SELinux 环境(非 Ubuntu 默认):通过策略强制限定主体对客体的访问,减少越权修改的可能。
- 配合 auditd 做文件访问审计,记录对敏感文件的读写、属性修改等事件,便于事后追溯与告警。
四 变更管控与运维实践
- 变更窗口与双人复核:对受保护文件(如 /etc/fstab、/boot/grub/grub.cfg)的修改安排在维护窗口,变更前后保留可回滚的备份与校验值(如 sha256sum)。
- 自动化与文档化:在变更脚本中显式处理 chattr -i / chattr +i,并在变更单中记录受保护清单、影响评估与回滚步骤,避免“忘记解锁导致更新失败”或“忘记加锁留下风险”。
- 风险提示:chattr +i 容易带来维护阻塞与“虚假安全感”,应与权限最小化、AppArmor、审计与备份共同构成纵深防御,而非单一手段。