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