Acl

chmod,umask,acl

  • August 7, 2018

我認為答案是“這就是它的工作原理”,但我想我會問,以防我做錯了什麼。

我帳戶的預設 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!)

umask 如何影響 ACL?

但是,它不一定是如何使用這些細節的一個很好的介紹。一旦您開始想要使用預設 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 資源管理器會這樣做)。

引用自:https://unix.stackexchange.com/questions/461060