跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何利用系统级Alias机制监控并预防rm高危命令的操作实战

必须用函数+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'
alias rm_rf='rmrf'
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
应只打印提示,不实际删除

相关文章