強制執行chmod -R 777 /


很好玩的問題...在 SO 上找到了這個很詳細的答案:

下文翻譯自 voretaq7 在 ServerFault 上的回答,以 CC BY-SA 3.0 許可。

一句話:系統會炸。

777 許可權的意思是,「所有人都能讀寫或者執行這個文件」。這行命令一跑,你就讓所有用戶都有了最高許可權。為什麼會出問題呢?

1. 任何人在你的系統上都可以想幹嘛就幹嘛。

密碼形同虛設了:所有人都能讀取 /etc/shadow 然後爆破密碼,但更簡單的,直接改密碼就行了!

可執行文件不安全了:你可以寫一個新的 login 程序讓你無條件登錄。

文件許可權不存在了:要是有人手滑敲了 rm -r / 那就涼涼了。是你跟系統說讓他為所欲為的!

2. 所有初始化要檢查文件許可權的程序都會炸。

sudosendmail 和很多別的程序都再也打不開了。啟動的時候它們會檢查關鍵文件的許可權。如果許可權不對就會報錯。

ssh 也會炸(關鍵文件的許可權如果被改了 SSH 就會覺得不安全,拒絕啟動)。

3. 所有程序上的 setuidsetgid 許可權位都丟失了。

777 許可權實際上是 0777,第一個數字包含了 f="https://docs.oracle.com/cd/E56344_01/html/E53951/secfile-69.html">setuid 和 setgid 許可權位。

有一些程序,比如 passwd,許可權上自帶了這些位,因為它們必須用特殊許可權啟動。現在這些都不能用了。

4. /tmp/var/tmp 也會炸。

上面第一個數字裏還有一個 sticky 位,這可以防止 /tmp/var/tmp 裏的文件被別的用戶刪掉。

很多垃圾腳本里的清理命令都是 rm -r /tmp/*,沒了 sticky 位臨時目錄裏的文件就會被刪得一乾二淨。

有些程序的邏輯寫得不好,臨時文件不見了就會崩潰。

5. /dev/proc 和別的一些文件系統都會炸。

這個問題主要是在老的 Unix 系統上,/dev 會是一個真正的文件系統。裡面有一些用 mknod 創建的特殊文件,這些文件的許可權在重啟以後不會重置。改了這些許可權首先會導致安全問題,還可能導致內核崩潰。

6. Socket(套接字)和 Pipe(管道)可能會炸。

套接字和管道要麼會炸,要麼會有安全問題,因為任何人都可以隨意讀寫了。

7. 所有的文件現在都是可執行文件了。

很多人的 PATH 環境變數裏都有 . 這個路徑,這是個壞習慣。隨便誰都能創建一個文件,改成命令的名字(比如 make 或者 ls),你就有幾率把它運行起來。

8. 有些系統的 chmod 會重置 ACL(訪問控制列表)

這樣的話你除了修復許可權還得修復 ACL,所以這個命令的確是能造成數據破壞的。

已經跑起來的服務和程序大概還能撐一段時間,但如果你想新開一個程序,重啟一個服務,甚至重啟整臺機器,上面的第 2,第 3 點就會在等著你了。


都綠了


關於把所有文件和目錄許可權都改為777這種問題,我在很早前就回答過一個類似的,我覺得這種問題問的有些無聊,所以並沒有引申更多內容。這樣問問題的基本屬於對系統權能控制一無所知的人,在剛知道一點雜七雜八的東西後,YY出來的以為有探討意義的問題:

rm -rf / 和chmod -R 777 / 哪個對linux系統危害更大??

www.zhihu.com圖標

Linux是多用戶系統:

第一個7是所屬用戶許可權,用來防止自己誤操作

第二個7是文件所屬組的許可權,用來設置和自己同一組人對文件/目錄的許可權,主要約束某個部門,小組,團隊.. 或某個特殊服務這種.... 所以是在有需求時設置的,你可以參考一下profile和bashrc文件: 普通用戶的默認umask是0002, root或主屬組不是自己的組的用戶時 umask值是0022... 所以文件的所屬組許可權主要看這是什麼類型的文件,是否只屬於用戶自己

最重要的是第三個7:其他用戶,這是Linux上面所有用戶對這個文件的許可權(除了自己和組用戶)... 那這個許可權如果你設置為7的話, 我登錄到Linux上面可以刪除或修改你的文件,因為Linux是多用戶的,所以有很多人都在同時使用, 不過這是針對於內網伺服器來講的,也就是它可能不是網路伺服器,而是充當實驗室伺服器這種類似角色; 這也是設計unix操作系統時設計者的初衷,其最根本的意義... 不過目前我們在使用Linux時多數是作為網路伺服器來使用, 所以這裡的許可權,主要是防止黑客獲取到其他用戶的shell許可權,修改獲取系統的配置文件... 不過,如果你的Linux中沒有其他用戶,或者其他用戶的shell全都使用了/sbin/nologin,那麼這個許可權也無所謂... 如果你的是內網伺服器,提供用戶許可權給其他非linux管理員使用時,那麼這個其他用戶的許可權也是為了防止普通用戶的誤操作,因為對於其他用戶 他們對文件進行操作可能不需要取得shell,而是通過samba,ftp等服務,這也是對他們的使用行為的一個約束. 如果服務開啟chroot以增加安全性,那麼這個許可權是對訪問目錄的約束,如果沒有開啟chroot,如果許可權設置的很大有可能使系統文件被其他程序所修改

馬寧博客?

www.tierama.com


小白不請自來。先說結論:被迫拆電腦取出硬碟重裝系統……

我昨晚把家裡11年的老筆記本拿出來裝上了Kali2020.4,然後第一次使用linux系統的我就瘋狂百度……

登錄界面

過了很久,我在安裝各種工具,我看每次做個動作什麼的都要賦予許可權,我想乾脆把所有文件全部賦予許可權就算了,然後就777了所有文件……

Kali剛更新了源

結果,我在刪除文件的時候,不知道怎麼把一個系統的不知道什麼文件夾也連帶拖過去了,然後系統有一個程序就打不開了……

刪除的時候沒有任何提示,也沒有別的東西警告,就這麼沒了……

折騰了十幾個小時的電腦,一下子就這麼沒了,然後網上查了半天也不知道怎麼重裝電腦,所以我就乾脆直接重裝算了,但是重裝到探測硬碟的時候無法識別,所以我就被迫拆開電腦取出硬碟,在我的筆記本上格式化以後再重新安裝……

所以,為了你我安全,還是乖乖的許可權吧,別777了……


推薦閱讀:
相關文章