我用一行7个字母代码,干掉了服务器!
nanshan 2025-01-18 22:51 11 浏览 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 能力和破坏能力还是很有自信的。
- 上一篇:git 如何比较不同分支的差异
- 下一篇:学习笔记-Gitea - 软件环境部署
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)