必须用函数+alias组合拦截rm-rf:定义rmrf()函数提示高危操作,并alias映射rm-rf、rm_rf等误输形式;加固rm行为推荐alias rm='trash'或alias rm='rm -Iv --one-file-system';防绕过需部署safe-rm、chattr锁定关键目录、限制sudo权限。

不能只靠简单 alias 覆盖 rm -rf,必须用函数 + alias 组合实现主动拦截。系统级防护的关键在于:覆盖常见误输形式、加固基础 rm 行为、防止绕过手段、限制 root 权限场景。
拦截 rm -rf 类高危组合
在 ~/.bashrc(普通用户)或 /etc/bash.bashrc(全局生效)中添加以下函数和别名:
- 定义拦截函数:
rmrf() { echo "⛔ 检测到高危操作:rm -rf 或类似写法"; echo "请改用安全方式:"; echo " • 确认路径后手动运行:command rm -rf \"\$@\""; echo " • 或使用 trash:trash \"\$@\""; } - 映射常见误输形式:
alias rm-rf='rmrf'<br>alias rm_rf='rmrf'<br>alias 'rm -rf'='rmrf'
- 注意:该方案不拦截
\rm -rf或command rm -rf,但能覆盖绝大多数手误情形(如敲错空格、下划线、短横)
加固日常 rm 命令行为
避免单文件误删演变为连锁事故,推荐以下任一配置(选其一即可):
-
alias rm='rm -Iv --one-file-system'
— -I 在删除 ≥3 个文件或递归时仅提示一次;-v 显示动作;--one-file-system 阻止跨挂载点误删(如 /home 下执行不会进 /boot) -
alias rm='trash'(需先安装trash-cli)
— 文件移入回收站,可用trash-list和trash-restore恢复 - 若想彻底禁用裸 rm,可加兜底别名:
alias rm='echo "请勿直用 rm,请检查 alias 是否生效" >&2; false'(仅调试期启用)
防范绕过与提权场景
用户仍可通过反斜杠或 sudo 绕过别名,需分层设防:
-
反斜杠逃逸:
\rm -rf会跳过所有 alias,此时函数无法拦截。更可靠的做法是部署safe-rm工具,并设alias rm='safe-rm' -
sudo 场景:
sudo rm启动的是 root 的新 shell,不读取你的 ~/.bashrc。应在 /root/.bashrc 中同样配置安全别名,或直接在 /etc/sudoers 中禁用:%users ALL=(ALL) ALL, !/bin/rm -rf *, !/bin/rm -r / -
关键目录锁定:对 /etc、/usr、/boot 等核心路径,用
chattr +i加不可修改属性,即使 root 也无法直接删除
验证与长期生效
配置完成后务必验证是否真正起作用:
- 重载配置:
source ~/.bashrc(用户级)或source /etc/bash.bashrc(系统级) - 检查别名是否加载:
alias | grep rm、type rm、type rm-rf - 测试原始命令:
\rm --version应正常输出,说明底层命令未被破坏 - 测试拦截效果:
rm-rf /tmp/test应只打印提示,不实际删除










