為什麼“chmod -R 777 /”具有破壞性?
這是一個關於文件權限的規範問題以及為什麼777 是“破壞性的”。
我不是在問如何解決這個問題,因為在伺服器故障(重新安裝作業系統)上已經有大量的參考。為什麼它會做任何破壞性的事情?
如果你曾經執行過這個命令,你幾乎會立即破壞你的作業系統。我不清楚為什麼取消限制會對現有流程產生任何影響。例如,如果我沒有對某些內容的讀取權限,並且在終端中快速輸入錯誤後突然我現在可以正常訪問……為什麼這會導致 Linux 崩潰?
首先是一個次要的術語 nitpick:
chmod
不會刪除權限。它改變了他們。現在問題的核心——模式
777
意味著“任何人都可以讀、寫或執行這個文件”——你已經允許任何人(有效地)做他們想做的任何事情。現在,為什麼這很糟糕?
- 您只是讓每個人都讀取/修改系統上的每個文件。
- 吻密碼安全再見(任何人都可以讀取影子文件並破解您的密碼,但為什麼要麻煩?只需更改密碼!這更容易!)。
- 告別二進製文件的安全性(有人可以編寫一個新
login
程序,讓它們每次都進入)。- 告別您的文件:一位使用者誤導
rm -r /
,一切都結束了。作業系統被告知讓他們為所欲為!
- 您已經惹惱了每個在啟動前檢查文件權限的程序。
sudo
,sendmail
, 和其他許多人根本不會再開始了。他們將檢查關鍵文件權限,發現它們不是應有的狀態,然後返回錯誤消息。同樣
ssh
會嚴重破壞(密鑰文件必須具有特定權限,否則它們是“不安全的”,預設情況下 SSH 將拒絕使用它們。) 3. 您已經清除了擁有它們的程序上的 setuid / setgid 位。模式
777
其實是。在那個前導數字中的東西是和位。 大多數 setuid/setgid 程序都設置了該位,因為它們必須以某些特權執行。他們現在壞了。0
777``setuid``setgid
4. 你已經壞了/tmp
和/var/tmp
前八進制數字中的另一件事是sticky bit
- 保護/tmp
(和/var/tmp
)中的文件不被不擁有它們的人刪除。(不幸的是)有很多行為不端的腳本可以通過執行“清理”來“清理”
rm -r /tmp/*
,並且沒有設置粘性位,/tmp
您可以與該目錄中的所有文件告別。讓暫存文件消失真的會讓一些寫得不好的程序感到不安…… 5.
/dev
/proc
你已經在和類似的文件系統中造成了破壞這在舊的 Unix 系統上是一個更大的問題,那裡
/dev
是一個真正的文件系統,它包含的東西是用創建的特殊文件mknod
,因為權限更改將在重新啟動後保留,但在任何系統上更改您的設備權限可能會導致嚴重的問題,從明顯的安全風險(每個人都可以閱讀每個 TTY)到不太明顯的核心恐慌的潛在原因。
Credit to @Tonny for pointing out this possibility
6. Sockets 和 Pipes 可能會損壞,或有其他問題 Sockets 和 Pipes 可能會完全損壞,或者由於變得可寫而暴露於惡意注入。
Credit to @Tonny for pointing out this possibility
7. 您已使系統上的每個文件都可執行很多人
.
在他們的PATH
環境變數中都有(您不應該!) - 這可能會導致令人不快的意外,因為現在任何人都可以方便地刪除一個像命令一樣命名的文件(例如make
orls
和嘗試讓您執行他們的惡意程式碼。
Credit to @RichHomolka for pointing out this possibility
8. 在某些系統chmod
上將重置訪問控制列表 (ACL)這意味著您可能最終不得不重新創建所有 ACL,除了在各處修復權限(並且是該命令具有破壞性的實際範例)。
Credit to @JamesYoungman for pointing out this possibility
系統中已經執行的部分會繼續執行嗎?可能,至少有一段時間。
但是下次你需要啟動一個程序,或者重新啟動一個服務,或者天堂禁止重新啟動你所在的盒子,因為上面的#2和#3會抬起他們醜陋的腦袋。