zoukankan      html  css  js  c++  java
  • [rm] Linux 防止"rm -rf /" 误删除

    一、缘由:

        

      最近看到这则新闻,很是悲伤,因为我最近也在用ansible;然而这一错误源自Ansible上糟糕的代码设计,这款Linux实用工具被用于在多台不同服务器上自动执行脚本。

      开发者解释到,实际参数应该是“rm -rf {foo}/{bar}”,foo和bar是脚本中动态传递的两个变量。然而由于变量处理出错,通用语法未能成功在bash命令中插值,所以最终指令就变成了可怕的“rm -rf /”。

    “rm -rf /”意味着擦除根路径“/”下挂载的所有内容而无需询问。

      以前一个主管说过,在你不充分了解某个工具的原理的时候,不要太过相信依赖他。哪怕自己去写个简陋的,可以看到源码,也是比较靠谱的。深信不疑!

    二、解决办法:

      为了避免误删根目录,或者重要的文件,整理了以下方法:

    1、safe-rm

      safe-rm 是一个开源软件用来替代不太安全的rm,可以在/etc/safe-rm.conf中配置路径黑名单,定义哪些不能被safe-rm删除。

    可以将 safe-rm 更名为 rm 并放在 $PATH 中比 原rm 程序靠前的位置。一些脚本中使用完全路径/bin/rm则不会受此影响。 

    $ rm -rf /etc/
    safe-rm: skipping /etc/

    官方地址:http://freecode.com/projects/safe-rm,ubuntu可以直接apt-get安装,centos要下载源码安装。

    2、建立回收站机制

      它并不真正执行删除操作,而是将文件移动到一个特定目录,可以设置定时清楚回收站,或者在回收站里面的文件大小达到一定容量时(或者用时间做判断)执行删除操作以腾出空间。

    可以写个shell脚本替换rm命令,或者在需要删除文件的时候使用mv命令将文件移动到回收站。  

    1) 在/home/username/ 目录下新建一个目录,命名为:.trash

    2)在/home/username/tools/目录下,新建一个shell文件,命名为: remove.sh

    TRASH_DIR="/home/username/.trash"  
      
    for i in $*; do  
        STAMP=`date +%s`  
        fileName=`basename $i`  
        mv $i $TRASH_DIR/$fileName.$STAMP  
    done  

    3)修改~/.bashrc, 增加一行

    alias rm="sh /home/username/tools/remove.sh"

    用我们自建的remove.sh替代rm命令

    4)设置crontab,定期清空垃圾箱,如:

    0 0 * * * rm -rf /home/username/.trash/*

    每天0点清空垃圾箱

    5)source ~/.bashrc 使替换立即生效

    3、注意脚本中rm -rf 变量的使用

      在脚本尽量不要使用 rm -rf $FOO/, 请使用 rm -rf $FOO;另外删除尽量不要写相对路径,不要带变量。

    4、根文件系统设置只读挂载

    noauto,ro

    5、各种备份

      可以异地远程备份重要的数据,采用dump的增量备份机制,LVM快照,虚拟化环境中的快照、raid5等等。

    附录:How do I prevent accidental rm -rf /*?

     

  • 相关阅读:
    node.js 安装后怎么打开 node.js 命令框
    thinkPHP5 where多条件查询
    网站title中的图标
    第一次写博客
    Solution to copy paste not working in Remote Desktop
    The operation could not be completed. (Microsoft.Dynamics.BusinessConnectorNet)
    The package failed to load due to error 0xC0011008
    VS2013常用快捷键
    微软Dynamics AX的三层架构
    怎样在TFS(Team Foundation Server)中链接团队项目
  • 原文地址:https://www.cnblogs.com/langdashu/p/5404595.html
Copyright © 2011-2022 走看看