chmod,umask,acl
我認為答案是“這就是它的工作原理”,但我想我會問,以防我做錯了什麼。
我帳戶的預設 umask 是
0077
. 我在wheel
群裡。我有一個帶有此 ACL 的目錄:
# file: . # owner: root # group: wheel # flags: -s- user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:group:wheel:rwx default:mask::rwx default:other::r-x
我創建了一個文件,根據上面的ACL正確設置了權限。
$ touch z $ ls -al drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 . drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 .. -rw-rw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z
我現在決定這是一個執行檔,所以我更改了權限。這一次,它不遵循ACL,而是遵循 umask。
$ chmod +x z $ ls -al drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 . drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 .. -rwxrw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z
我需要指定
a+x
使這項工作。$ chmod a+x z $ ls -al drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 . drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 .. -rwxrwxr-x+ 1 ehymowitz wheel 0 Aug 7 12:36 z
我想我只是不明白為什麼要
touch
根據 ACL 創建文件,但chmod
會忽略 ACL 來調整權限。
您正在見證 Unix/Linux 權限的更微妙之處之一。當您
touch
從創建文件的父目錄呼叫命令時,將獲取 ACL。ACL 包含傳統權限(模式)+ ACL。當您使用時,
chmod
您只是在操作您正在操作的文件或目錄的 MODE 位。請記住,這些是離散的不同,因此在操作它們時必須小心。例子
如果你使用
strace
,你可以看到它是如何chmod
工作的。首先讓我們創建一個文件file_077
:$ rm afile_077*; umask 077; strace -s 2000 touch afile_077 > afile_077.tr 2>&1
查看結果:
$ ll afile_077 -rw------- 1 user1 user1 0 Aug 7 09:32 afile_077
將文件的權限更改為
a+x
:$ strace -s 2000 chmod a+x afile_077 > afile_077_chmod.tr 2>&1
查看生成的日誌:
$ cat afile_077_chmod.tr ... umask(0) = 02 stat("afile_077", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0 fchmodat(AT_FDCWD, "afile_077", 0711) = 0 ...
在這裡我們可以看到它
chmod
正在詢問umask
,然後相應地設置 MODE 位。它從不依賴 ACL。**注意:**請記住,這種詢問chmod
並不是要將輸出合併到umask
其操作中。
chmod 的顯式特性。
man chmod
字母 ugoa 的組合控制哪些使用者對文件的訪問權限將被更改:擁有文件的使用者 (u)、文件組中的其他使用者 (g)、不在文件組中的其他使用者 (o) 或所有使用者(一)。如果這些都沒有給出,效果就像給出 (a) 一樣,但在 umask 中設置的位不受影響。
如果您想查看有關 ACL 的一些相關想法,我發現有一個答案很有用。它使您可以查看設置文件權限的系統呼叫的確切詳細資訊。(謝謝slm!)
但是,它不一定是如何使用這些細節的一個很好的介紹。一旦您開始想要使用預設 ACL(或傳統的 set-GID),*nix 權限就會非常奇怪。目前存在一個限制,即使用 systemd 的多使用者工作站作業系統不支持您想要的最一致行為的 umask (並且 udisk 使用錯誤的權限位安裝 FAT 文件系統)。
預設 ACL 可能用於 Windows 工作站的 Unix 文件伺服器。我認為在某些情況下,這可能涉及使用 hacky Samba 配置來有效地覆蓋 umask。當然 Linux 可以訪問 Samba,然後您可以從這個覆蓋 hack^W 功能中受益。可以使用 FUSE 文件系統“bindfs”在 Linux 中配置相同的 hack。
(也就是說,
mv
同一掛載文件系統上的文件夾之間的 Linux 從不尊重不同的預設 ACL。nautilus(GNOME 文件)也不會在移動時實現預設 ACL。Windows 資源管理器會這樣做)。