Linux中umask是如何計算的?
所以我知道
umask
可以限制特權使用者,使用這種格式umask ugo
。我知道 read = 4、write = 2 和 exec = 1。但是,當我輸入 時
umask
,它返回 4 位數字,即0022
or0073
。我現在不知道這是如何工作的,因為有一個額外的數字。那個多餘的數字是什麼0022
意思?
假設預設遮罩 0666。0022
umask
將使新遮罩 0644 (0666-0022=0644) 意味著該組和其他人具有讀取(無寫入或執行)權限。“額外”數字(第一個數字 = 0)表示沒有特殊模式。
如果模式以數字開頭,它將被解釋為八進制,否則它意味著是符號。
0 是一個數字,1(對於粘性位)或 6(對於 SGID)也是如此。諸如
chmod
可以通過其他方法呼叫的命令,例如chmod ug+rw mydir
您將在其中向使用者和組添加讀取和寫入權限的位置。請注意,這種情況下的模式 (ug+rw) 不是以數字開頭,因此不會被解釋為八進製而是符號。有關符號,請參閱en.wikipedia.org/wiki/Chmod#Symbolic_examples以及有關特殊模式的www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/。
我不知道你會用 揭露第一位
umask
,但從技術上講你可以。它可以解釋為什麼您幾乎總是將其視為零。歸功於pinkfloydx33
遮罩的第一個數字處理不太適合所有者/組/其他模型的特殊權限。當為文件權限提供四位數字時,第一位指的是那些特殊值:
4000 = SUID 2000 = SGID 1000 = sticky bit
SUID 位是 set-user-ID 的縮寫,它使可執行程序以所有者的有效使用者 ID (uid) 執行——換句話說,無論誰執行它,程序都以所有者的權限執行。這在執行需要 root 權限但旨在由普通使用者執行的程序中很常見:
passwd
就是一個這樣的例子。SGID 位是 set-group-ID 的縮寫,非常相似,但使用所有者的有效組id (gid) 執行。
粘性位有點複雜,如果您想了解更多資訊,可以閱讀
sticky
.這些位也可以與目錄一起使用,但它們的含義會發生變化。
我不相信您實際上可以將 設置
umask
為允許您在預設情況下啟用任何這些額外的位,但您可能永遠都不想這樣做。歸功於user470379