開發者工具 · Chmod 計算器
第四個 chmod 數字:setuid、setgid 和黏滯位如何運作
· 工作原理
chmod UNIX 開發人員工作流程
諸如 4755 和 2775 之類的模式帶有一個前導數字,可以更改程式執行的身份或新檔案的擁有者。這篇文章解釋了這三個特殊位元以及它們如何在 ls -l 中顯示。
drwxrwsr-x 中的 s — 共享項目目錄的行為不同,且 ls 輸出的字母不在基本備忘單中
rwxrwsr-x 中的 s 在一個位置記錄了兩個事實:setgid 已啟用,並群組執行也已啟用。此實作將 setgid 儲存為八進位 2000,然後用 s 取代群組執行字元。選擇目錄類型標記後,模式 2775 顯示為 drwxrwsr-x,而四位數摘要保留前導特殊位數字。
此輸出是轉換,而不是檔案系統觀察。目標選擇器變更頁面解釋位元的方式,但它從不開啟目錄或檢查所有權。對於目錄,實作的解釋是新建立的檔案繼承該目錄的群組。無論特定儲存系統應用該行為,還是其他策略影響訪問,都需要超出此計算器的證據。
第四位數字及其字母 — 4、2 和 1 作為熟悉模式的前綴,在執行位置顯示為 s 和 t,當下面的執行位關閉時為大寫
前導八進位數字組合了三個獨立的遮罩:setuid 為 4000,setgid 為 2000,黏性為 1000。它們的字母佔據現有的執行位置,而不是將字元添加到九位置顯示中。 setuid 使用擁有者位置,setgid 使用群組位置,黏性其他位置。此矩陣將所有三個部分與普通的讀取、寫入和執行分開公開。
大小寫揭示了底層的執行位。模式 4755 呈現 rwsr-xr-x,因為所有者執行伴隨 setuid;第4644章 渲染rwSr--r--,因為它沒有。解析器將兩種形式讀回對應的特殊位元和執行位元。相同的下與上規則產生 s 或 S(用於 setgid)和 t 或 T(用於黏性),在往返過程中保留所有組合。
setuid — /usr/bin/passwd 如何以檔案擁有者的權限運作以及為什麼 Linux 在解釋腳本上忽略 setuid
對於常規檔案,實作的 setuid 解釋取決於擁有者執行。當這兩個位元都存在時,頁面表示執行檔案使用檔案所有者的身份而不是呼叫者的身份。當 setuid 存在而沒有擁有者執行時,顯示內容將使用大寫 S 並說明沒有任何可執行的內容。這是該部分經過更正、有原始碼支援的範圍。
計算器不會辨識特定的執行檔、啟動執行檔或檢查平台如何處理腳本。它的證據是提供的模式和目標選擇。模式 4755 可以分解為 setuid 加 rwxr-xr-x,賦值預覽在普通子句後面追加 u+s。僅驗證渲染和解釋;計劃的適用性和實際執行仍然是外部問題。
常規檔案的 setuid 渲染與解釋
目錄上的 Setgid 的表示獨立於普通群組權限。模式 2775 將 2000 遮罩與擁有者和群組 7 以及其他 5 結合。顯示 rwxrwsr-x 保持群組讀取、寫入和執行,同時用 s 取代可見的 x。目錄解釋將特殊位元與新建立檔案的目錄群組的繼承相關聯。
刪除群組執行同時保留 setgid 會將群組位置字母改為大寫 S。此可見警告直接來自渲染器,無論目標措詞為何。該頁面可以比較這些已完成的值並顯示哪個複選框發生了更改,但它無法檢查共享目錄、其當前群組或建立條目的身份。觀點之間的一致是算術證據,而不是操作批准。
目錄上的黏性位元 - /tmp 中的限制刪除以及為什麼 1777 與 777 不同
Sticky 占據其他执行位置並提供八进制 1000。對於目錄模式 1777,所有普通權限保持啟用狀態,最終符號字元變成 t。實現的目錄解釋添加了刪除和重命名限制,而 777 解釋則警告可寫目錄没有粘性。因此,轉換器在不改變底層 rwx 三元組的情況下使一位差異可見。
如果黏性存在而沒有其他執行,則最終字元為大寫 T。解析器和渲染器在兩個方向上都保留了這種差異。該頁面不會檢查真實的共享目錄、條目所有者或嘗試的刪除。它的可靠結論更窄:提供的整數包含黏性,其執行同伴透過大小寫可見,並選擇面向目錄的解釋文字。
工作範例:為共享目錄建立 2775 — 派生數字和等效的符號 chmod g+s,a+rwx,o-w
將 2775 建構成四個可見元件:用於 setgid 的特殊數字 2,用於 rwx 的所有者數字 7,用於 rwx 的群組數字 7,以及用於 r-x 的其他數字 5。輸入完整的值會產生 rwxrwsr-x。矩陣單獨選擇 setgid,而摘要則命名擁有者、群組和其他權限以及該特殊位元。
產生的賦值列表為u=rwx,g=rwx,o=rx,g+s。這與九字顯示不同,但表示相同的十二位元值。選擇目錄會更改已實現的群組繼承措辭的解釋;選擇檔案會更改措辭,但不會更改 2775。計算器從不驗證目標群組或建立檔案,因此該範例仍然是一個模型而不是部署方案。
工作範例:為共享目錄模型建置和讀取 2775
安裝行為、功能和附加平台語義未建模。該頁面沒有安裝輸入、功能集、核心查詢或檔案系統探測。它可以表示 setuid、setgid 和 Sticky,並且可以在常規檔案和目錄之間改變其解釋。它無法確定外部規則是否在實際目標上中和、擴展或以不同方式解釋這些位元。
即使是來源的角落措辭也不應該超出介面範圍。有效的特殊位元模式證明解析器、渲染器、矩陣、摘要和產生的分配是一致的。它並不證明發生了執行、繼承或刪除行為。將不受支援的策略宣告排除在診斷之外,並將複製的命令視為惰性文字,直到單獨檢查的環境提供缺少的上下文。
掛載策略、功能和未實現的角落語義仍然是外部的
實現的要點是具有位置意義的往返。 setuid 對應到擁有者執行位置,setgid 對應到群組執行,黏滯到其他執行。小寫表示相關執行位已開啟;大寫表示關閉。前導八進制數字和專用複選框保留相同的訊息,因此不需要單獨從散文中推斷出特殊位。
透過比較所有表示來測試特殊模式。對於 2775,預計前導 2、群組位置 s、選取的 setgid 方塊以及產生的 g+s 加法。不匹配會暴露轉換問題。協議只建立一種一致的模式。所有權、安裝策略、功能、應用程式規則以及執行 chmod 的後果仍然超出了瀏覽器計算器的證據範圍。