蜘蛛俠有這樣的一句信條,“權(quán)力越大,責(zé)任越大。” 對(duì)于 Linux 系統(tǒng)管理員們來(lái)說(shuō),這也是一種應(yīng)當(dāng)采用的明智態(tài)度。
不,真的,真心感謝 DevOps 的溝通協(xié)作和云編排技術(shù),讓一個(gè) Linux 管理員不僅能掌控一臺(tái)服務(wù)器,甚者能控制成千上萬(wàn)臺(tái)服務(wù)器實(shí)例。只需要一個(gè)愚蠢的舉動(dòng),你甚至可以毀掉一個(gè)價(jià)值數(shù)十億美元的企業(yè),就像沒(méi)有打補(bǔ)丁的 Apache Struts一樣。
如果不能跑在安全補(bǔ)丁之前,這將會(huì)帶來(lái)一個(gè)遠(yuǎn)超過(guò)系統(tǒng)管理員工資水平的戰(zhàn)略性業(yè)務(wù)問(wèn)題。這里就有一些足以搞死 Linux 服務(wù)器的簡(jiǎn)單方式掌握在系統(tǒng)管理員手中。很容易想象到,只有新手才會(huì)犯這些錯(cuò)誤,但是,我們需要了解的更多。
下列是一些著名的命令,任何擁有 root 權(quán)限的用戶都能借助它們對(duì)服務(wù)器造成嚴(yán)重破壞。
警告:千萬(wàn)不要在生產(chǎn)環(huán)境運(yùn)行這些命令,它們會(huì)危害你的系統(tǒng)。不要在家里嘗試,也不要在辦公室里測(cè)試。
那么,繼續(xù)!
rm -rf /
想要干脆利落的毀掉一個(gè) Linux 系統(tǒng)嗎?你無(wú)法超越這個(gè)被譽(yù)為“史上最糟糕”的經(jīng)典,它能刪除一切,我說(shuō)的是,能刪除所有存在你系統(tǒng)里的內(nèi)容!
和大多數(shù)Linux 命令一樣,rm這個(gè)核心命令使用起來(lái)非常方便。即便是最頑固的文件它也能幫你刪除。結(jié)合起后面兩個(gè)參數(shù)理解rm指令時(shí),你很容易陷入大麻煩:-r,強(qiáng)制遞歸刪除所有子目錄,-f,無(wú)需確認(rèn),強(qiáng)制刪除所有只讀文件。如果你在根目錄運(yùn)行這條指令,將清除整個(gè)驅(qū)動(dòng)器上的所有數(shù)據(jù)。
如果你真這么干了,想想該怎么和老板解釋吧!
現(xiàn)在,也許你會(huì)想,“我永遠(yuǎn)不會(huì)犯這么愚蠢的錯(cuò)誤。”朋友,驕兵必?cái) N∫幌陆?jīng)驗(yàn)教訓(xùn)吧,這個(gè)警示故事來(lái)自于一個(gè)系統(tǒng)管理員在 Reddit 上的帖子:
我在 IT 界工作了很多年,但是今天,作為 Linux 系統(tǒng) root 用戶,我在錯(cuò)誤的系統(tǒng)路徑運(yùn)行了rm- f
長(zhǎng)話短說(shuō),那天,我需要復(fù)制一大堆目錄從一個(gè)目錄到另一個(gè)目錄,和你一樣,我敲了幾個(gè)cp -R去復(fù)制我需要的內(nèi)容。
以我的聰明勁,我持續(xù)敲著上箭頭,在命令記錄中尋找可以復(fù)制使用的類似命令名,但是它們混雜在一大堆其他命令當(dāng)中。
不管怎么說(shuō),我一邊在 Skype、Slack 和 WhatsApp 的網(wǎng)頁(yè)上打字,一邊又和 Sage 通電話,注意力嚴(yán)重分散,我在敲入rm -R ./videodir/* ../companyvideodirwith651vidsin/這樣一條命令時(shí)神游物外。
然后,當(dāng)文件化為烏有時(shí)其中也包括了公司的視頻。幸運(yùn)的是,在瘋狂敲擊control -C后,在刪除太多文件之前,系統(tǒng)管理員中止了這條命令。但這是對(duì)你的警告:任何人都可能犯這樣的錯(cuò)誤。
事實(shí)上,絕大部分現(xiàn)代操作系統(tǒng)都會(huì)在你犯這些錯(cuò)誤之前,用一段醒目的文字警告你。然而,如果你在連續(xù)敲擊鍵盤(pán)時(shí)忙碌或是分心,你將會(huì)把你的系統(tǒng)鍵入一個(gè)黑洞。(LCTT 譯注:幸運(yùn)的是,可能在根目錄下刪除整個(gè)文件系統(tǒng)的人太多了額,后來(lái)rm默認(rèn)禁止刪除根目錄,除非——你手動(dòng)加上–no-preserve-root參數(shù)!)
這里有一些更為隱蔽的方式調(diào)用rm -rf。思考一下下面的代碼:
charesp[]__attribute__((section(“.text”))) = “xebx3ex5bx31xc0x50x54x5ax83xecx64x68”
“xffxffxffxffx68xdfxd0xdfxd9x68x8dx99”
“xdfx81x68x8dx92xdfxd2x54x5exf7x16xf7”
“x56x04xf7x56x08xf7x56x0cx83xc4x74x56”
“x8dx73x08x56x53x54x59xb0x0bxcdx80x31”
“xc0x40xebxf9xe8xbdxffxffxffx2fx62x69”
“x6ex2fx73x68x00x2dx63x00”
“cp -p /bin/sh /tmp/.beyond;chmod4755
/tmp/.beyond;”;
這是什么?這是 16 進(jìn)制的rm -rf寫(xiě)法。在你不明確這段代碼之前,請(qǐng)千萬(wàn)不要運(yùn)行這條命令!
fork 炸彈
既然我們討論的都是些奇怪的代碼,不妨思考一下這一行:
:(){ :|: & };:
對(duì)你來(lái)說(shuō),這可能看起來(lái)有些神秘,但是我看來(lái),它就是那個(gè)臭名昭著的Bash fork 炸彈。它會(huì)反復(fù)啟動(dòng)新的 Bash shell,直到你的系統(tǒng)資源消耗殆盡、系統(tǒng)崩潰。
不應(yīng)該在最新的 Linux 系統(tǒng)上做這些操作。注意,我說(shuō)的是不應(yīng)該。我沒(méi)有說(shuō)不能。正確設(shè)置用戶權(quán)限,Linux 系統(tǒng)能夠阻止這些破壞性行為。通常用戶僅限于分配使用機(jī)器可用內(nèi)存。但是如果作為 root 用戶的你運(yùn)行了這行命令(或者它的變體Bash fork 炸彈變體),你仍然可以反復(fù)虐待服務(wù)器,直到系統(tǒng)重啟了。
垃圾數(shù)據(jù)重寫(xiě)硬盤(pán)
有時(shí)候你想徹底清除硬盤(pán)的數(shù)據(jù),你應(yīng)該使用Darik’s Boot and Nuke (DBAN)工具去完成這項(xiàng)工作。
但是如果僅僅想讓你的存儲(chǔ)器亂套,那很簡(jiǎn)單:
任意命令 > /dev/hda
我說(shuō)的“任意命令”,是指有輸出的任意命令,比如:
ls -la > /dev/hda
……將目錄列表通過(guò)管道送到你的主存儲(chǔ)設(shè)備。給我 root 權(quán)限和足夠的時(shí)間,就能覆蓋整個(gè)硬盤(pán)設(shè)備。這是讓你開(kāi)始盲目恐慌的一天的好辦法,或者,可以把它變成職業(yè)禁入方式。
擦除硬盤(pán)!
另一個(gè)一直受歡迎的擦除硬盤(pán)的方式是執(zhí)行:
dd if=/dev/zero of=/dev/hda
你可以用這條命令寫(xiě)入數(shù)據(jù)到你的硬盤(pán)設(shè)備。dd命令可以從特殊文件中獲取無(wú)盡個(gè)0字符,并且將它全部寫(xiě)入你的設(shè)備。
可能現(xiàn)在聽(tīng)起來(lái)/dev/zero是個(gè)愚蠢的想法,但是它真的管用。比如說(shuō),你可以使用它來(lái)用零清除未使用的分區(qū)空間。它能使分區(qū)的鏡像壓縮到更小,以便于數(shù)據(jù)傳輸或是存檔使用。
在另一方面,它和dd if=/dev/random of=/dev/hda相近,除了能毀掉你的一天之外,不是一個(gè)好事。如果你運(yùn)行了這個(gè)指令(千萬(wàn)不要),你的存儲(chǔ)器會(huì)被隨機(jī)數(shù)據(jù)覆蓋。作為一個(gè)隱藏你要接管辦公室咖啡機(jī)的秘密計(jì)劃的半吊子方法,倒是不錯(cuò),但是你可以使用 DBAN 工具去更好的完成你的任務(wù)。
/dev/null 的損失
也許因?yàn)閿?shù)據(jù)珍貴,我們對(duì)備份的數(shù)據(jù)沒(méi)有什么信心,確實(shí)很多“永遠(yuǎn)不要這樣做!”的命令都會(huì)導(dǎo)致硬盤(pán)或其它存儲(chǔ)倉(cāng)庫(kù)的數(shù)據(jù)被擦除。一個(gè)鮮明的實(shí)例:另一個(gè)毀滅你的存儲(chǔ)設(shè)備的方式,運(yùn)行mv / /dev/null或者>mv /dev/null。
在前一種情況下,你作為 root 用戶,把整個(gè)磁盤(pán)數(shù)據(jù)都送進(jìn)這個(gè)如饑似渴的/dev/null。在后者,你僅僅把家目錄喂給這個(gè)空空如也的倉(cāng)庫(kù)。任何一種情況下,除非還原備份,你再也不會(huì)再看見(jiàn)你的數(shù)據(jù)了。
見(jiàn)鬼,難道會(huì)計(jì)真的不需要最新的應(yīng)收賬款文件了嗎?
格式化錯(cuò)了驅(qū)動(dòng)器
有時(shí)候你需要使用這一條命令格式化驅(qū)動(dòng)器:
mkfs.ext3 /dev/hda
……它會(huì)用 ext3 文件系統(tǒng)格式化主硬盤(pán)驅(qū)動(dòng)器。別,請(qǐng)等一下!你正在格式化你的主驅(qū)動(dòng)器!難道你不需要用它?
當(dāng)你要格式化驅(qū)動(dòng)器的時(shí)候,請(qǐng)務(wù)必加倍確認(rèn)你正在格式化的分區(qū)是真的需要格式化的那塊而不是你正在使用的那塊,無(wú)論它們是 SSD、閃存盤(pán)還是其他氧化鐵磁盤(pán)。
內(nèi)核崩潰
一些 Linux 命令不能讓你的機(jī)器長(zhǎng)時(shí)間停機(jī)。然而,一些命令卻可以導(dǎo)致內(nèi)核崩潰。這些錯(cuò)誤通常是由硬件問(wèn)題引起的,但你也可以自己搞崩。
當(dāng)你遭遇內(nèi)核崩潰,重新啟動(dòng)系統(tǒng)你才可以恢復(fù)工作。在一些情況下,這只是有點(diǎn)小煩;在另一些情況下,這是一個(gè)大問(wèn)題,比如說(shuō),高負(fù)荷運(yùn)作下的生產(chǎn)環(huán)境。下面有一個(gè)案例:
dd if=/dev/random of=/dev/port
echo1 > /proc/sys/kernel/panic
cat /dev/port
cat /dev/zero > /dev/mem
這些都會(huì)導(dǎo)致內(nèi)核崩潰。
絕不要運(yùn)行你并不了解它功能的命令,它們都在提醒我…
提防未知腳本
年輕或是懶惰的系統(tǒng)管理員喜歡復(fù)制別人的腳本。何必重新重復(fù)造輪子?所以,他們找到了一個(gè)很酷的腳本,承諾會(huì)自動(dòng)檢查所有備份。他們就這樣運(yùn)行它:
這會(huì)下載該腳本,并將它送到 shell 上運(yùn)行。很明確,別大驚小怪,對(duì)吧?不對(duì)。這個(gè)腳本也許已經(jīng)被惡意軟件感染。當(dāng)然,一般來(lái)說(shuō) Linux 比大多數(shù)操作系統(tǒng)都要安全,但是如果你以 root 用戶運(yùn)行未知代碼,什么都可能會(huì)發(fā)生。這種危害不僅在惡意軟件上,腳本作者的愚蠢本身同樣有害。你甚至可能會(huì)因?yàn)橐粋€(gè)未調(diào)試的代碼吃上一塹——由于你沒(méi)有花時(shí)間去讀它。
你認(rèn)為你不會(huì)干那樣的事?告訴我,所有那些你在 Docker 里面運(yùn)行的容器鏡像在干什么?你知道它們到底在運(yùn)行著什么嗎?我見(jiàn)過(guò)太多的沒(méi)有驗(yàn)證容器里面裝著什么就運(yùn)行它們的系統(tǒng)管理員。請(qǐng)不要和他們一樣。
結(jié)束
這些故事背后的道理很簡(jiǎn)單。在你的 Linux 系統(tǒng)里,你有巨大的控制權(quán)。你幾乎可以讓你的服務(wù)器做任何事。但是在你使用你的權(quán)限的同時(shí),請(qǐng)務(wù)必做認(rèn)真的確認(rèn)。如果你沒(méi)有,你毀滅的不只是你的服務(wù)器,而是你的工作甚至是你的公司。像蜘蛛俠一樣,負(fù)責(zé)任的使用你的權(quán)限。
-
Linux
+關(guān)注
關(guān)注
87文章
11123瀏覽量
207905 -
cat
+關(guān)注
關(guān)注
1文章
72瀏覽量
21208
原文標(biāo)題:絕不要用的 Linux 命令 !
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論