终极防护:让你的 Linux 系统对 “rm -rf /*” 免疫!

作为一名运维工程师,你最害怕的命令是什么?没错,就是那个传说中的rm -rf /*!今天我要教你几招防护大法,让你的系统对这类"删库跑路"操作彻底免疫!

认识"核弹级"命令:rm -rf /*

这个命令堪称Linux界的"末日武器":

rm:删除文件-r:递归删除(连目录也不放过)-f:强制执行(不问你是否确定)/*:从根目录开始(全盘清除)

执行后果:系统文件、配置文件、数据库、日志...全部灰飞烟灭!你的职业生涯可能也会跟着一起消失...

复制
# 千万不要尝试!这里只是展示命令结构 rm -rf /*1.2.
三级防护体系

(1) 第一层防护:alias防护盾

复制
# 在~/.bashrc中添加 alias rm=rm -i # 每次删除都要求确认1.2.

效果:即使输入rm -rf /*,系统也会对每个文件询问确认,给你足够的时间按下Ctrl+C!

(2) 第二层防护:函数防护墙

复制
# 在~/.bashrc中添加智能防护函数 function rm() { # 危险模式检测 if [[ $* =~ "-rf /" || $* =~ "-rf /" ]]; then echo -e "\033[1;31m🚨 警报!检测到核弹级删除操作!\033[0m" echo -e "\033[1;33m🤔 你确定要毁掉自己的职业生涯吗?\033[0m" echo -e "\033[1;36m💡 建议:\033[0m" echo "1. 先喝杯咖啡冷静一下" echo "2. 检查命令是否正确" echo "3. 考虑使用trash-cli代替rm" return 1 fi /bin/rm -i "$@" }1.2.3.4.5.6.7.8.9.10.11.12.13.14.

效果:检测到危险操作时直接阻止,并给出人性化提示!

(3) 第三层防护:物理删除限制

复制
# 使用chattr给关键目录上锁 sudo chattr +i /bin /sbin /usr /etc1.2.

效果:即使超级用户也无法直接删除系统关键目录!

进阶防护方案

(1) 方案一:使用safe-rm替代

复制
# 安装safe-rm sudo apt install safe-rm # Debian/Ubuntu sudo yum install safe-rm # CentOS/RHEL # 配置保护目录 echo "/" >> /etc/safe-rm.conf1.2.3.4.5.6.

(2) 方案二:带回收站功能的rm替代脚本

该脚本拥有以下基本功能:

拦截危险操作(如rm -rf /)将删除的文件移动到回收站(~/.trash)自动清理7天前的回收站文件保留原始rm的基本功能
复制
# 在~/.bashrc中添加以下内容 # 设置回收站目录 TRASH_DIR="${HOME}/.trash" mkdir -p "${TRASH_DIR}" # 智能删除函数 function rm() { # 危险操作检测 if [[ $* =~ "-rf /" || $* =~ "-rf /" ]]; then echo -e "\033[1;31m🚨 警报!检测到核弹级删除操作!\033[0m" echo -e "\033[1;33m🤔 你确定要毁掉自己的职业生涯吗?\033[0m" echo -e "\033[1;36m💡 建议:\033[0m" echo "1. 先喝杯咖啡冷静一下" echo "2. 检查命令是否正确" echo "3. 考虑使用trash-cli代替rm" return 1 fi # 普通删除操作 - 移到回收站 local timestamp=$(date +%Y%m%d%H%M%S) local trash_dest="${TRASH_DIR}/${timestamp}" mkdir -p "${trash_dest}" # 处理每个参数 for arg in "$@"; do # 跳过选项参数 if [[ "${arg}" == -* ]]; then continue fi # 检查文件/目录是否存在 if [ -e "${arg}" ]; then # 获取绝对路径 local item_path=$(realpath "${arg}") # 防止把回收站自己移入回收站 if [[ "${item_path}" != "${TRASH_DIR}"* ]]; then # 移动文件到带时间戳的回收站目录 mv "${item_path}" "${trash_dest}/" echo "已移动 ${item_path} 到回收站: ${trash_dest}/" fi fi done } # 查看回收站内容 function trash-list() { echo -e "\033[1;36m🗑️ 回收站内容:\033[0m" tree -aC "${TRASH_DIR}" } # 清空回收站 function trash-empty() { echo -e "\033[1;31m⚠️ 即将清空回收站...\033[0m" read -p "确认要永久删除所有回收站内容吗?(y/N) " confirm if [[ "${confirm}" =~ ^[Yy]$ ]]; then /bin/rm -rf "${TRASH_DIR}"/* echo -e "\033[1;32m回收站已清空\033[0m" else echo -e "\033[1;33m操作已取消\033[0m" fi } # 恢复回收站文件 function trash-restore() { if [ -z "$1" ]; then echo "用法: trash-restore <时间戳>/<文件名>" echo "示例: trash-restore 20230801120000/important_file.txt" return 1 fi local source_path="${TRASH_DIR}/$1" local dest_path="./$(basename "$1")" if [ -e "${source_path}" ]; then mv -i "${source_path}" "${dest_path}" echo -e "\033[1;32m已恢复: ${source_path} -> ${dest_path}\033[0m" else echo -e "\033[1;31m错误: 未找到 ${source_path}\033[0m" return 1 fi }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.

使用示例:

复制
# 安全删除文件 root@node2:~# rm important.txt 已移动 /root/important.txt 到回收站: /root/.trash/20250729073654/ # 查看回收站 root@node2:~# trash-list 🗑 回收站内容: /root/.trash |-- 20250729065134 | `-- 1.txt `-- 20250729073654 `-- important.txt 3 directories, 2 files # 恢复文件 root@node2:~# trash-restore 20250729073654/important.txt 已恢复: /root/.trash/20250729073654/important.txt -> ./important.txt # 清空回收站 root@node2:~# trash-empty ⚠ 即将清空回收站... 确认要永久删除所有回收站内容吗?(y/N) y 回收站已清空 root@node2:~# trash-list 🗑 回收站内容: /root/.trash 0 directories, 0 files1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器