百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

我用一行7个字母代码,干掉了服务器!

nanshan 2025-01-18 22:51 8 浏览 0 评论

无论你是否学习过 Linux,一定都听说过这行命令:

rm -rf /*

这是一个能够 “让人快乐” 的命令,我称之为快乐命令~

据说,只要在自己的服务器上执行这行命令,就能让别人快乐。

我帮大家在同事的电脑上试过了,可以通过视频看看效果:https://bilibili.com/video/BV1xuDSYmECA

为什么 “快乐命令” 如此危险呢?

  • rm 是 Linux 和 Unix 系统中用来删除文件和目录的命令
  • 添加 -r 选项,表示递归删除某个目录和里面的所有文件
  • 再添加 -f 选项,表示强制删除,不会出现提示确认

在 Linux 操作系统中,一切皆文件,所有的文件都是放在根目录 / 下的,/* 就表示整个电脑的全部文件。

因此,当你将这些输入组合到一起,就相当于直接强制删除所有的文件,包括系统文件。后果就是,你的服务器再也打不开了。

如果你是 Windows 的用户,无法理解快乐命令的危害的话,你可以把 C 盘拖到回收站并清空试试 。(别试!!!!!!!)

如何防止快乐命令?

既然快乐命令这么危险,我们怎么防止服务器被它干崩呢?

有的小伙伴就要说了:很简单呐,自己不要输入它不就好了嘛!

拜托,应该没人会在自己的服务器上执行这个吧。我们要防止的是其他人登录我们服务器后执行快乐命令,可能是黑客,还有可能是因为种种原因心态崩掉想不开然后想要对自己团队内部的服务器进行破坏然后跑路的自己人!

下面教大家几个小妙招,可以保护你的小服务器不被快乐命令影响,还能学到不少小知识哦。

1、权限管理

Linux 的每个文件都有 3 种基本权限:读、写和执行,可以使用 chmod 命令,通过数字或符号的方式设置权限。

chmod 命令用法

比如我们设置 某个文件 可以被文件的所有者执行:

chmod 100 重要文件.txt

或者让 所有用户 都无法向文件写入内容:

chmod 555 重要文件.txt

然后试着删除该文件。。。

rm -f 重要文件.txt

结果,文件还是被成功删除掉了!

这是因为 chmod 命令本身并不能直接防止文件被删除。不过我们可以曲线救国,确保用户没有对文件所在目录的写权限就可以了:

chmod 000 重要目录

不过,还有更简单的方式,可以使用 chattr 命令,为重要文件设置 不可修改 属性:

chattr +i 重要文件.txt

这样一来,用户将无法删除、重命名或写入该文件。

但是怎么保护所有的文件都不被删除呢?一个一个都设置为不可修改么?

当然不用,我们不妨换个思路,别忘了,rm 命令本身也是个文件!那直接修改该文件的权限为 所有用户都无法执行 ,不就行了么?

chmod 000 /bin/rm

测试一下,果然有用~

但是,前面讲的方法还有问题。虽然设置了文件权限,但是攻击者完全可以执行 Linux 的 sudo 命令,化身超级用户,把文件的权限再修改回来呀!

sudo chmod 777 /bin/rm

虽然部分 Linux 发行版(比如 CentOS 7)在默认情况下,其他用户(非 root 和 wheel 组)是无法执行 sudo 命令的。但保险起见,我们还可以修改 sudo 命令的权限。通过 visudo 命令编辑 /etc/sudoers 文件,输入下列代码,就可以禁止所有用户通过 sudo 执行 rm 命令:

# 禁止所有用户使用 rm 命令
# 第一个 ALL: 所有用户
# 第二个 ALL: 所有主机
# (ALL): 任何身份
# NOPASSWD: 不需要密码
# !/bin/rm: 不允许执行 /bin/rm 命令
ALL ALL=(ALL) NOPASSWD: !/bin/rm

此外,比起直接简单粗暴地修改系统配置,我们还可以利用 Lshell 之类的开源工具,更灵活地控制不同用户所具有的命令权限。比如禁止所有用户使用 rm 命令、禁止用户小坤使用任何命令,防止这家伙删文件跑路:

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

[smallkun]
allowed = []

2、替代操作

除了修改权限外,下面分享一种更有意思的技巧来防止 “快乐命令”。

Linux 中有一个很神奇的命令 Alias,可以为其他命令设置别名:

比如将 rm 命令设置为在删除前先询问确认:

alias rm='rm -i'

有些云服务器就是这么干的,已经默认为我们设置了一些保护文件安全的别名:

# 某服务商的默认配置
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

当然你还可以设置为一些更有意思的命令,比如用 cat 命令给攻击者看一张有趣的字符画:

或者用 sl 命令跑一辆火车:

再或者直接退出他的登录等等。。

玩笑归玩笑,我给大家推荐 1 种使用 alias 防止快乐命令的方法。

跟我们平时用的电脑操作一样,不直接删除文件,而是先把要删除的文件放到一个回收站中,从而防止误删。

可以手动新建一个 .trash 目录表示回收站,然后手动编写脚本并设置别名,让 rm 命令变成将文件移动到回收站目录中。脚本如下:

# 创建一个.trash 隐藏目录
mkdir ~/.trash

# 将 rm 命令改为 mv 
del()               
{  
  mv $@ ~/.trash/  
}

# 使用别名 del 代替 rm  
alias rm=del

当然你也可以利用一些开源项目或工具更快速地实现回收站功能,比如 rip、trash 等等。这种工具一搜一大把,可以看出大家真的是很害怕 “快乐命令” 啊!

3、优秀实践

最后再给大家分享一些防止文件误删的好习惯吧~

1)手动备份:尽量避免在关键目录中直接使用删除命令,可以通过 cp 命令复制文件并添加 .bak 后缀来创建备份,方便后续恢复。

cp 重要文件.txt 重要文件.txt.bak

2)定期备份:为了防止服务器上的数据被误删除,建议定期将服务器上重要的文件下载到本地或同步到其他存储。实现方式就很多了,像 crontab 定时脚本、rsync 文件同步、使用文件系统的快照功能、以及各种专业的备份工具等等。

3)可视化管理:对于代码文件,我们一般会用 Git 版本控制系统再搭配个 GUI 界面软件来可视化管理维护,想什么时候找回被删的代码都可以。

那服务器上的文件也同样可以用类似的工具来管理,像宝塔面板、1Panel 都是可以的,也内置了回收站功能,让大家不需要输入任何命令也可以管理文件。

没事谁想记那些命令对吧?而且万一输错了,破坏效果可能不亚于对服务器进行攻击,我对自己的写 Bug 能力和破坏能力还是很有自信的。

相关推荐

Linux 的磁盘系统,和你了解的Windows差别很大

我的C盘去哪了?一个系统,如果没有存储,那么也就不能称之为系统。存储性是一个完整系统的重要组成部分。例如AWS最开始的服务就是S3(用来存储数据的云服务),足以见得存储对于一个应用平台是多么的重要。...

一文读懂 Linux 硬盘挂载:从问题到解决方案

各位互联网大厂的后端开发伙伴们!在咱们日常工作中,操作Linux系统是常有的事儿吧。你们有没有遇到过这样的场景:新添加了一块硬盘,满心欢喜准备用来存储重要数据或者部署新的应用服务,却突然发现不知道...

硬盘分区(硬盘分区格式)

 磁盘(硬盘)分区,可以分C、D、E等分区,大家可能都会用,会根据自已的需要确定所需的空间,但分区是如何工作的呢,内容如下。Windows中有3类:MBR分区:MasterBootRecord,也...

parted命令工具分区介绍(particle命令)

linux系统磁盘分区通常可以使用fdisk和parted命令,当分区大小小于2TB的时候,两种皆可以使用,当分区大于2TB的话,就需要用parted分区。以下介绍parted命令相关使用,以sdb为...

Linux 服务器上查看磁盘类型的方法

方法1:使用lsblk命令lsblk输出说明:TYPE列显示设备类型,如disk(物理磁盘)、part(分区)、rom(只读存储)等。NAME列显示设备名称(如sda、nvme0n1)。TR...

Linux分区命令fdisk和parted使用介绍

摘要:一般情况下,Linux分区都是选择fdisk工具,要求硬盘格式为MBR格式,能支持的最大分区空间为2T。但是目前在实际生产环境中使用的磁盘空间越来越大,呈TB级别增长;而常用的fdisk这个工具...

linux 分区原理与名词解释(linux操作系统中的分区类型)

分区的意义将磁盘分成几份,每份挂在到文件系统的那个目录在linux里的文件系统Ext2:早期的格式,不支持日志功能Ext3:ext2改良版,增加了日志功能,是最基本且最常用的使用格式了Ext4:针对e...

linux 分区合并(linux合理分区)

查看虚拟机当前磁盘挂载情况fdisk-l选择磁盘fdisk/dev/sda查看磁盘分区情况p重新选择分区n选择主分区p保存w创建物理卷pvcreate/dev/sda3查看物理卷信息pvdi...

如何在 Linux 系统中永久禁用交换分区 ?

Linux操作系统中的交换分区或交换文件充当硬盘上的临时存储区域,当物理内存(RAM)满时,系统使用该存储区域。它用于交换较少使用的内存页,这样系统就不会因为运行应用程序而耗尽物理内存。随着技术的发...

Linux 如何知道硬盘已用多少空间、未用多少空间

刚出社会时,去了一家公司上班,老板为了省钱,买的服务器是低配的,硬盘大小只有40G,有一次网站突然不能访问了,排查半天才知道原来服务器的硬盘空间已用完,已无可用空间。第一步是查看硬盘的使用情况,第二步...

用Linux系统管理磁盘空间 就该这么来

要想充分有效的管理使用Linux系统中的存储空间,用户必须要做的就是双管齐下,一边扩充空间一边限制空间。不得不说的就是很多时候磁盘空间就像水资源,需节制水流。说到要如何实现限制空间就离不开使用LVM技...

Windows 11 磁盘怎么分区?(windows11磁盘怎么分区)

Windows11磁盘分区技术解析与操作指南:构建高效存储体系一、磁盘分区的技术本质与系统价值磁盘分区作为存储系统的基础架构,通过逻辑划分实现数据隔离与管理优化。Windows11采用NTF...

linux上创建多个文件分区,格式化为 ext2、ext3、ext4、XFS 文件

以下是在Linux系统上创建多个20GB文件分区并格式化为不同文件系统的分步指南:步骤1:创建基础文件(4个20GB文件)bash#创建4个20GB稀疏文件(实际占用空间随写入量增长)ddif=/...

救命的U盘低格哪家最强?(低格优盘)

周二时有位童鞋留言说U盘之前做过引导盘,现在格式化不了,用各种工具都不行,而且因为U盘厂商的关系,查不到U盘主控,无法量产恢复,特来求助。小编花了点时间特意弄坏一个U盘分区,终于试出方法了,特来分享一...

Linux 查看硬件磁盘存储大小和磁盘阵列(RAID)的组合方式

一、查看硬件磁盘存储大小查看所有磁盘信息:#lsblk该命令会列出所有磁盘(如/dev/sda、/dev/nvme0n1)及其分区和挂载点。查看磁盘总容量:fdisk-l#或parted-...

取消回复欢迎 发表评论: