防止目录被意外删除或重命名,核心是结合文件系统属性与操作习惯:用 chattr +i 递归锁定目录结构(root 也无法修改),chattr +a 实现日志类目录仅追加写入,辅以 chmod 收窄权限、chown 明确归属,并通过 alias rm='rm -I' 和脚本校验等习惯加固防线。

防止目录被意外删除或重命名,核心在于限制“写入+链接更改”能力。仅靠普通权限(chmod)不够,因为 root 或目录所有者仍可直接删掉它;真正有效的防护需结合文件系统级属性和操作习惯约束。
用 chattr +i 锁死目录结构
这是最直接、最可靠的手段。设置 i(immutable)属性后,该目录无法被删除、重命名、移动,其下的任何文件也不能被修改、删除或新增——即使 root 用户执行命令也会被内核拒绝。
- 锁定整个目录(含子项):
sudo chattr -R +i /path/to/important-dir - 验证是否生效:
lsattr /path/to/important-dir应显示含 i 标志(如----i-----------) - 临时解除锁定(维护时):
sudo chattr -R -i /path/to/important-dir
注意:-R 是必须的,否则只锁目录本身,子项仍可操作;解除锁定也必须递归,否则子项仍受保护。
用 chattr +a 限制日志类目录仅追加
适用于持续写入但绝不允许删改的场景,比如应用日志目录。设置 a(append-only)后,只能用 >> 追加内容,不能覆盖、截断、删除或重命名文件,目录本身也不能被删除或重命名。
- 启用追加模式:
sudo chattr -R +a /var/log/myapp - 此时可写日志:
echo "info" >> /var/log/myapp/current.log - 但以下操作全部失败:
rm /var/log/myapp/current.log、mv /var/log/myapp/current.log old.log、truncate -s 0 current.log
相比 i,a 更灵活,适合需要持续写入又防误操作的运行中目录。
权限与所有权配合收窄操作面
虽然不能完全阻止 root 删除,但能大幅降低普通用户或脚本误触风险:
- 移除组和其他用户的写权限:
chmod 755 /path/to/dir(目录所有者可操作,他人只读+进入) - 若仅需保留所有者访问,用
chmod 700,彻底屏蔽非所有者 - 确保关键目录不属于临时用户或共享组,避免权限继承扩散
搭配 chown root:root 可进一步明确责任主体,防止因组权限宽松导致越权操作。
日常操作习惯加固防线
技术防护之外,人为环节同样关键:
- 禁用高危组合:在 shell 配置中 alias rm='rm -I'(大写 i),对多个文件或递归操作强制二次确认
- 避免变量未定义风险:脚本中删除前检查路径是否存在且非空,例如
[ -n "$TARGET" ] && [ -d "$TARGET" ] && rm -rf "$TARGET" - 不用
rm -rf /*或rm -rf /$VAR/类写法;统一使用绝对路径并提前echo验证 - 对根目录级操作保持警惕——现代系统默认拦截
rm -rf /,但rm -rf /home/*或挂载点误判仍常见


















