本文转载自微信公众号《程序员鱼皮》,作者鱼皮。转载本文请联系程序员Yupi公众号。大家好,我是Yupi。在编程界,有一个著名且实用的Linux命令:rm-rf/。据说这个命令一旦执行成功,会给人们带来幸福。这是一种善意的秩序,所以我喜欢称之为幸福秩序。好吧,不要再安装它了。其实这条命令的作用就是删除服务器上的所有文件!这是一个极其危险的命令!我们之前可能听说过很多数据删除事件,其中一些罪魁祸首就是这个命令。记得两周前,我刚买了一台全新的云服务器,正在给大家演示如何搭建应用开发环境。没想到还有小伙伴当场怂恿我输入“快乐命令”,想看看会出现什么效果。这么刺激的事情,我不能试试吗?于是,我打开终端,连接到服务器,输入happy命令。而且,我还得一点点的去做,我什至同时打开了三个客户端,打算同时输入命令,三倍快乐!好的,起飞??!但是结果是数据并没有被删除,而是弹出一个警告,禁止删除!不好意思,结果让大家失望了~其实在输入这条命令之前我一点都不担心,因为我相信腾讯云服务器连这个安全保障都做不到。那么问题来了,如何防止happy命令带来的不良影响呢?简单分享一下我学到的方法吧~如何防止rm-rf命令?方法还是很多的。我简单整理了一个提纲:防止rm-rf好习惯大法首先,使用服务器最多的人一定是我们自己,所以首先要养成良好的使用习惯,保护好服务器,从我做起。定时备份为了防止服务器上的数据(数据库、用户文件、配置文件等)或工具自动定时同步。备选命令为了防止意外的rm命令带来的不良影响,我们可以尽量少用这个命令,用一些其他的命令来代替delete。例如,mv命令用于移动文件或重命名文件。可以建立一个类似回收站的目录,然后把要删除的文件丢进去。#新建回收站目录mkdirtrash#将文件移至回收站mvfile.txttrash对于以后可能需要的文件,可以给文件加上.bak后缀表示备份:mvfile.txtfile.txt.bak不过,即使如果你养成一个好习惯,有时候你可能会因为疏忽大意,不小心敲了rm命令,不小心把文件给删了。不要惊慌,还有其他更安全的方法。AliasaliasLinux中的alias命令用于给命令设置别名,有点类似于对象引用。例如,可以使用mkdir命令来创建目录。如果觉得这个命令记不住,可以给他起个别名:aliasmd=mkdir然后,我们就可以使用md命令来创建目录了。同理,我们可以将rm命令设置为其他命令的别名,从而阻止原来的删除功能。其实很多服务器都默认为我们设置了一些别名来保护系统文件的安全。让我们打开.bashrc文件:cat/root/.bashrc看到如下代码:#.bashrc#Userspecificaliasesandfunctionsaliasrm='rm-i'aliascp='cp-i'aliasmv='mv-i'系统已经配置了一个rm命令的别名。当我们输入rm时,实际执行的是rm-i。-i参数用来询问我们是否要删除。只有输入y确认后,才会进行删除操作。确定要删除手动回收站吗基于alias命令,我们可以自动重定向rm命令将文件放入回收站目录,操作如下:首先修改.bashrc文件(环境配置文件下Linux,用来保存一些个性化的配置):vim~/.bashrc在文件末尾追加如下代码:#创建一个.trash隐藏目录mkdir~/.trash#使用别名del代替rmaliasrm=del#Changerm命令将mvdel(){mv$@~/.trash/}保存退出,然后输入如下命令使修改生效:source~/.bashrcdone,然后执行rm命令,和它会自动移动到回收站目录!trash除了手动写回收站脚本,还可以使用现成的开源项目trash,Mac用户直接一行命令安装,就可以愉快的使用了。项目地址:https://github.com/ali-rantakari/trash权限管理以上方法对于个人服务器用户来说一般够用了,但是如果是团队开发,多人同时操作一台服务器,那就是很难说是谁突然删档跑了,对吧?因此,最好对服务器上的文件设置合理的权限。常用的几种方法如下。修改文件权限最直接的方法是直接使用chmod命令修改指定文件的读、写、执行权限,比如下面的命令:chmod700file.txt作用是设置只有创建的用户该文件可以读写,其他用户无权访问。chattrLinux系统自带的chattr命令是ChangeAttribute的缩写,意思是改变文件的属性,可以用来防止文件和目录被误删除或修改。例如下面的命令:sudochattr+ifile.txt通过+i参数给文件添加“不可修改”的属性,不能删除,不能重命名,不能设置链接关系,不能写入或添加内容。这个参数可谓是提高系统安全性的神器!我们试一下效果:果然,删除失败,提示操作不被允许。如果要保护目录,只需要加一个-R参数:sudochattr-R+imyDir设置sudo权限sudo是linux中的一个常用命令,可以临时以root用户(超级管理员)执行命令.如果给普通用户一个超级管理员的身份,他就可以为所欲为,非常危险!所以在使用sudo命令的时候可以使用visudo命令修改普通用户的权限。输入visudo,会自动进入/etc/sudoers文件的编辑,尝试添加一行:doglocalhost=/bin/rm/file/*这表示用户dog只能删除/file目录下的文件,但不是随意的。Lshell提到了一个开源的Linux安全神器Lshell,可以用来搭建受限的Linux脚本执行环境。项目地址:https://github.com/ghantoos/lshell一行命令安装后,可以通过修改其配置文件/etc/lshell.conf来管理用户行为。比如下面的配置禁止用户yupi使用rm命令来防止本产品删除文件跑路:[yupi]allowed='all'-['rm']一般情况下,上述措施是足以保护并且相对简单。不过最后还是要提醒大家不要轻易尝试这个命令哈哈。一时好奇,一时兴奋,明天我就睡垃圾场了!
