Chmod 許可權計算器
勾選屬主、屬組和其他使用者的讀、寫、執行許可權,即可得到八進位制 chmod 數字、rwx 符號字串以及可直接貼上到終端的命令。
勾選核取方塊得到數字,或輸入數字檢視它實際允許什麼。 許可權面向三類物件——檔案屬主、屬組和其他所有人——每類各自獨立擁有讀、寫、執行三種許可權。你可以切換表格,也可以直接輸入八進位制值,兩者會保持同步。
| 物件 | 讀 (4) | 寫 (2) | 執行 (1) |
|---|---|---|---|
| 屬主 (u) | |||
| 屬組 (g) | |||
| 其他人 (o) |
勾選屬主、屬組和其他使用者的讀、寫、執行許可權,即可得到八進位制 chmod 數字、rwx 符號字串以及可直接貼上到終端的命令。
勾選核取方塊得到數字,或輸入數字檢視它實際允許什麼。 許可權面向三類物件——檔案屬主、屬組和其他所有人——每類各自獨立擁有讀、寫、執行三種許可權。你可以切換表格,也可以直接輸入八進位制值,兩者會保持同步。
| 物件 | 讀 (4) | 寫 (2) | 執行 (1) |
|---|---|---|---|
| 屬主 (u) | |||
| 屬組 (g) | |||
| 其他人 (o) |
每個 Unix 檔案都帶有九個許可權位,按三位一組分成三組。第一組屬於檔案屬主,第二組屬於檔案所屬的組,第三組屬於系統上的其他所有人。每組中的三位分別表示讀、寫、執行,權值依次為 4、2、1。把需要的位相加即可得到 0 到 7 之間的一個數字,這就是許可權歷來用三位八進位制數書寫的原因。
755 這樣的數字正是由此而來。屬主位是 7,即 4 + 2 + 1,因此屬主可讀、可寫、可執行;屬組位和其他人位都是 5,即 4 + 1,可讀可執行但不能修改。同一個值用符號寫法表示就是 rwxr-xr-x,也正是 ls -l 在檔案型別字元之後列印的內容。
這三個動詞在目錄上的含義略有不同:讀允許列出目錄內的名稱,寫允許建立和刪除條目,執行允許進入目錄並訪問一個已知路徑。只有讀而沒有執行許可權的目錄幾乎沒有用——你能看到名字,卻打不開背後的任何東西。
少數幾種組合就能覆蓋大部分實際工作。644(rw-r--r--)是文件或原始檔的常規模式:屬主編輯,其他人只讀。755(rwxr-xr-x)是目錄和可執行指令碼的常規模式,因為二者都必須有執行位才能使用。600(rw-------)讓檔案僅對屬主可見,這正是 OpenSSH 對私鑰的強制要求;目錄對應的是 700。
賦予他人寫許可權的模式值得再三斟酌。777 意味著機器上任何賬號都能覆蓋或刪除該檔案,它幾乎從來不是正確答案——它只是在不理解問題的前提下讓許可權報錯最快消失的辦法。當 Web 伺服器無法寫入上傳目錄時,真正的修復方式通常是用 chown 更改屬主或屬組,而不是把檔案對全世界開放。
許可權還與 umask 相互作用。新檔案按預設模式減去 umask 值建立,常見的 umask 是 022,這就是新建檔案通常是 644 而不是 666 的原因。
在這三位之前還可以有第四位,它攜帶三個特殊位:setuid(4)、setgid(2)和粘滯位(1)。它們改變程式以誰的身份執行,以及目錄如何對待其中新建的檔案。
執行檔上的 setuid 會讓它以檔案屬主而非啟動者的許可權執行。passwd 正是靠它在普通使用者執行時更新系統檔案,這也是 setuid 程式需要被嚴格審計的原因——其中一個缺陷就是通往屬主許可權的直通車。setgid 對屬組起同樣作用。在目錄上,setgid 的含義更為友好:目錄內新建的檔案會繼承該目錄的屬組,從而讓共享專案目錄始終保持一致。
粘滯位最常見於 /tmp,通常寫作 1777。它允許任何人在目錄中建立檔案,同時把刪除許可權限制為檔案自身的屬主,使使用者無法刪除彼此的臨時檔案。在長格式列表中這些位會替換執行位字元:s 取代 x 表示設定了 setuid 或 setgid,大寫 S 表示設定了該位但沒有執行許可權,t 則標記粘滯位。