Linux

為什麼“chmod -R 777 /”具有破壞性?

  • June 20, 2016

這是一個關於文件權限的規範問題以及為什麼777 是“破壞性的”。

我不是在問如何解決這個問題,因為在伺服器故障(重新安裝作業系統)上已經有大量的參考。為什麼它會做任何破壞性的事情?

如果你曾經執行過這個命令,你幾乎會立即破壞你的作業系統。我不清楚為什麼取消限制會對現有流程產生任何影響。例如,如果我沒有對某些內容的讀取權限,並且在終端中快速輸入錯誤後突然我現在可以正常訪問……為什麼這會導致 Linux 崩潰?

首先是一個次要的術語 nitpick:chmod不會刪除權限。它改變了他們。


現在問題的核心——模式777意味著“任何人都可以讀、寫或執行這個文件”——你已經允許任何人(有效地)做他們想做的任何事情。

現在,為什麼這很糟糕?

  1. 您只是讓每個人都讀取/修改系統上的每個文件。
  • 吻密碼安全再見(任何人都可以讀取影子文件並破解您的密碼,但為什麼要麻煩?只需更改密碼!這更容易!)。
  • 告別二進製文件的安全性(有人可以編寫一個新login程序,讓它們每次都進入)。
  • 告別您的文件:一位使用者誤導rm -r /,一切都結束了。作業系統被告知讓他們為所欲為!
  1. 您已經惹惱了每個在啟動前檢查文件權限的程序。

sudo, sendmail, 和其他許多人根本不會再開始了。他們將檢查關鍵文件權限,發現它們不是應有的狀態,然後返回錯誤消息。

同樣ssh會嚴重破壞(密鑰文件必須具有特定權限,否則它們是“不安全的”,預設情況下 SSH 將拒絕使用它們。) 3. 您已經清除了擁有它們的程序上的 setuid / setgid 位。

模式777其實是。在那個前導數字中的東西是和位。 大多數 setuid/setgid 程序都設置了該位,因為它們必須以某些特權執行。他們現在壞了。0777``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環境變數中都有(您不應該!) - 這可能會導致令人不快的意外,因為現在任何人都可以方便地刪除一個像命令一樣命名的文件(例如makeorls和嘗試讓您執行他們的惡意程式碼。

Credit to @RichHomolka for pointing out this possibility 8. 在某些系統chmod上將重置訪問控制列表 (ACL)

這意味著您可能最終不得不重新創建所有 ACL,除了在各處修復權限(並且是該命令具有破壞性的實際範例)。

Credit to @JamesYoungman for pointing out this possibility


系統中已經執行的部分會繼續執行嗎?可能,至少有一段時間。

但是下次你需要啟動一個程序,或者重新啟動一個服務,或者天堂禁止重新啟動你所在的盒子,因為上面的#2和#3會抬起他們醜陋的腦袋。

引用自:https://serverfault.com/questions/364677