查看原文
其他

程序员都想,却不敢做的事?我来!

鱼皮 程序员鱼皮 2022-08-14

一个 “实用” 的好命令,我不得试试?

大家好,我是鱼皮。

在编程届,有一个家喻户晓的实用 Linux 命令:rm -rf /

据说,此命令一旦执行成功,就会给人带来快乐,是一个善良的好命令,所以我喜欢叫它 快乐命令

好吧,不装了,其实这个命令的作用是 删除服务器上所有的文件 !是一个极度危险的命令!

之前我们可能也听说过很多删数据跑路事件,其中一部分元凶正是这个命令。

记得前两周,我刚买了一台全新的云服务器,在给大家演示如何搭建应用开发环境。结果没想到,一些小伙伴竟然怂恿我当场输入 “快乐命令”,想看看会出现什么效果。

这么刺激的事情,我不得试试?

于是,我打开终端,连接服务器,输入快乐命令。而且,要做就要做得绝一点,我甚至同时开了 三个 客户端,打算同时输入命令,三倍快乐!

OK,起飞 🛫!

但结果呢,数据并没有被删除,而是弹出了一个警告,禁止删除!

对不起,结果让大家失望了~

其实在敲这行命令之前,我就一点儿也不担心,因为我相信腾讯云服务器不可能连这点安全保障都没有。

那问题来了,如何防止快乐命令带来的恶劣影响呢?

下面就简单分享下我了解到的方法吧~

如何防止 rm -rf 命令?

方法还是挺多的,我简单整理了一个大纲:

防止 rm -rf 大法

好习惯

首先,使用服务器最多的人肯定是我们自己,因此我们要先养成良好的使用习惯,保护服务器,从我做起。

定期备份

为了防止服务器上的数据(数据库、用户文件、配置文件等)被误删除,可以定期将服务器上重要的文件下载到本地或同步到其他存储空间上,一般使用定时脚本(crontab 命令等)或工具自动定时同步。

替代命令

为了防止意外 rm 命令带来的不利影响,我们可以尽量少用该命令,使用一些其他的命令来替代删除。

比如 mv 命令,作用是移动文件或改名,可以自己新建一个类似回收站的目录,然后把要删的文件扔进去。

# 新建回收站目录
mkdir trash
# 移动文件到回收站
mv file.txt trash

针对日后可能还需要的文件,可以给文件增加 .bak 后缀,表示备份:

mv file.txt file.txt.bak

但是,即使养成了好习惯,有时候可能也会疏忽,不小心打出了 rm 命令,意外删除了文件。

莫慌,还有其他更保险的方法。

Alias 别名

Linux 中的 alias 命令用于为指令设置别名,有点类似对象的引用。

举个例子,本来可以用 mkdir 命令创建目录,如果我觉得这个命令背不下来,那可以给他起个别名:

alias md=mkdir

然后,我们就可以使用 md 命令来创建目录了。

同理,我们可以把 rm 命令设置为其他命令的别名,从而阻止原本的删除功能。

其实很多服务器已经默认为我们设置了一些保护系统文件安全的别名,让我们打开 .bashrc 文件:

cat /root/.bashrc

可以看到如下代码:

# .bashrc
# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

系统已经为 rm 命令配置了别名,当我们输入 rm 时,实际执行的是 rm -i,通过 -i 参数来询问我们是否要删除,只有输入 y 确认后,才会执行删除操作。

是否确认删除

手动回收站

基于 alias 命令,我们可以自动将 rm 命令重定向为将文件放入回收站目录,操作如下:

首先修改 .bashrc 文件(Linux 下环境配置文件,用于保存一些个性化配置):

vim ~/.bashrc

在文件末尾追加如下代码:

# 创建一个.trash 隐藏目录
mkdir ~/.trash
# 使用别名 del 代替 rm  
alias rm=del
# 将 rm 命令改为 mv 
del()               
{  
  mv $@ ~/.trash/  
}

保存退出,然后输入下列命令使修改生效:

source ~/.bashrc

大功告成,然后再执行 rm 命令,就会自动移动到回收站目录啦!

trash

除了自己手动编写回收站脚本外,还可以使用现成的开源项目 trash,Mac 用户可以直接用一行命令安装,就可以愉快地使用了。

项目地址:https://github.com/ali-rantakari/trash

权限管理

以上的方式对于个人服务器用户来说,一般就足够了,但如果是团队开发,多人同时在一台服务器上操作,就很难说谁突然删文件跑路了对吧。

所以,最好还是对服务器上的文件进行合理的权限设置,常用的几种方式如下。

修改文件权限

最直接的方式,直接用 chmod 命令修改指定文件的读、写、执行权限,比如下列命令:

chmod 700 file.txt

作用是设置仅创建该文件的用户可读写,其他用户无权访问。

chattr

Linux 系统自带的 chattr 命令是 Change Attribute 的缩写,意为改变文件的属性,能够用来防止文件和目录被意外删除或修改。

比如下列命令:

sudo chattr +i file.txt

通过 +i 参数给文件追加了 “不可修改” 的属性,该不能被删除、改名、设定链接关系,同时不能写入或新增内容。该参数可谓是提高系统安全的神器!

让我们试下效果:

果然删除失败了,提示操作不被允许。

如果要保护目录,只需要加个 -R 参数就行了:

sudo chattr -R +i myDir

设置 sudo 权限

sudo 是 Linux 的常用命令,可以临时以 root 用户(超级管理员)的身份执行命令。

如果给了一个普通用户超级管理员的身份,他将能做任何事情,这是非常危险的啊!

所以可以使用 visudo 命令,修改普通用户使用 sudo 命令时的权限。

输入 visudo,将自动进入 /etc/sudoers 文件的编辑,尝试追加一行:

dog localhost=/bin/rm /file/*

这就意味着,用户 dog 只能删除 /file 目录下的文件,而不能随意删除。

Lshell

再提一个开源的 Linux 安全神器 Lshell,可以用于构建一个受限的 Linux 脚本执行环境。

项目地址:https://github.com/ghantoos/lshell

一行命令安装后,可以通过修改它的配置文件 /etc/lshell.conf,来管理用户的行为。

比如下列配置,禁止用户 yupi 使用 rm 命令,防止这货删文件跑路:

 [yupi]
 allowed = 'all' - ['rm']

一般情况下,以上那么多种措施就足够防护了,也比较简单。

但最后,还是要提醒大家,不要轻易尝试这个命令哈哈。一时好奇一时爽,明天要睡垃圾场!

我是鱼皮,点赞 + 在看 还是要求一下的,祝大家都能心想事成、发大财、行大运。

往期推荐

鱼皮出教材了!

我毕业了!

带老弟做个实时排行榜

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存