Unix 權限
Unix 檔案權限:不靠猜測讀懂 chmod 模式
chmod 模式描述一般擁有者、群組與其他使用者的權限位元;它不包含真實主機上所有會影響存取的控制。
把每個八進位數字視為三個權限
讀取是 4、寫入是 2、執行是 1。將擁有者、群組與其他使用者已啟用的值相加:0755 就是 rwxr-xr-x。前方第四位代表 setuid、setgid 與 sticky bit。這適合檢查已知模式,不用來決定誰應取得存取權。
| 數值 | 權限 | 意義 |
|---|---|---|
| 4 | r-- | 讀取 |
| 2 | -w- | 寫入 |
| 1 | --x | 執行/搜尋 |
目錄的執行/搜尋不是執行檔案
一般檔案的執行權允許把它當作程式執行;目錄的執行/搜尋權允許穿越目錄,並在子項目自身權限允許時存取它們。目錄讀取權可列出名稱;目錄寫入權影響目錄項目,通常還需要執行/搜尋權。同一個 0755 對檔案與目錄的實際效果不同。
umask 影響未來建立,不代表有效存取
程序的 umask 會從建立檔案或目錄時所請求的普通權限中清除位元。慣用請求模式是一般檔案 0666、目錄 0777,因此 umask 022 通常會得到 0644 與 0755。它不會增加權限,且應用程式可請求比這些慣用值更少的位元。
數值 umask 計算器只是可重現的慣用模型,不會檢查程序、使用者設定檔、服務管理器、容器、檔案系統或既有路徑。Linux 上,父目錄的 default ACL 可能改變建立模式,而不是採用 umask 結果。
把特殊位元當成高度依賴情境的設定
setuid 可讓可執行檔以檔案擁有者的有效使用者 ID 執行。setgid 可影響可執行檔的有效群組 ID;許多系統上,它也會讓新目錄項目繼承目錄群組。sticky bit 會限制非特權使用者在目錄中刪除或重新命名項目。小寫 s 或 t 表示執行/搜尋權也已設定;大寫 S 或 T 表示特殊位元已設定但執行/搜尋權未設定。
只解讀絕對模式,再檢查主機
本工具接受三或四位八進位模式,或 ls 風格 rwx 字串。它拒絕 u+x 等相對操作,因為結果取決於既有模式,也可能受 umask 影響。工具不解析完整命令、不遞迴目錄,也不檢查路徑。
ACL、擁有者、特權、掛載選項、capabilities、強制存取控制政策、網路檔案系統與符號連結行為都可能改變有效存取。GNU chmod 也記錄目錄特殊位元的行為差異。變更正式環境權限前,請先檢查目標平台。
0755 = rwxr-xr-x;1777 = rwxrwxrwt;4644 = rwSr--r--資料可信度