2013-03-06 25 views
3

當沒有組寫入位時,爲什麼目錄顯示drwxrwxr-x+ACL如何影響ls/stat()結果?

讓我們給一個額外的用戶(約翰)上的目錄rwx權限,就像這樣:

$ mkdir logfiles 
$ setfacl -m user:john:rwx logfiles 
$ getfacl -ce logfiles 
user::rwx 
user:john:rwx     #effective:rwx 
group::r-x      #effective:r-x 
mask::rwx 
other::r-x 

這只是我多麼想的東西,約翰現在有獲得等同於目錄的所有者。但是,

$ ls -ld logfiles 
drwxrwxr-x+ 2 bob users 4096 Mar 6 22:38 logfiles 

$ find -perm +020 -ls 
    8197 4 drwxrwxr-x 2 bob  users  4096 Mar 6 22:38 ./logfiles 

沒有組具有寫入權限,但ls的輸出和來自查找的匹配結果會有其他建議。這直接來自lstat(2)系統調用的st_mode字段;爲什麼S_IWGRP位被設置?

+0

創建目錄時必須設置組寫入位。你的'umask'是什麼? – Celada 2013-03-06 23:47:03

+0

不,umask是022,在setfacl之前的perms是755(參見示例中的getfacl輸出 - 「group :: r-x」)。你有不同的結果嗎? – Phil 2013-03-06 23:54:25

+0

不,我得到和你一樣的結果,帶有一個xfs文件系統。我不知道爲什麼! – Celada 2013-03-07 01:22:09

回答

1

這裏可能在於你的答案 - ACL傳播:

http://users.suse.com/~agruen/acl/linux-acls/online/ 

一些filesytems允許它作爲一個安裝選項。我不知道你有什麼文件系統,所以這可能是一個不好的答案。

+0

該文檔確實解決了我的問題,在「訪問ACL示例」一節中。儘管如此,我並不困惑,因爲它的例子顯示'chmod g-w'和'chmod g + w'用於編輯掩碼條目,而不是組。 – Phil 2013-03-07 00:28:22

+0

我想你可能錯過了這個想法。ACL根據父目錄的acls或其他地方的某些情況創建在新文件上。你的chmod與它沒有多大關係。 setfacl和getfacl一般都是ACL接口。 – 2013-03-07 00:47:19

+0

我指的是你的答案中的「訪問ACL示例」中給出的特定chmod示例。你能解釋爲什麼組可寫位的行爲是這樣嗎?我可能已經錯過了這個想法,因此這整個問題:) – Phil 2013-03-07 07:25:30

2

一旦爲給定的文件或目錄激活了POSIX ACL。組類權限模式不再是組權限,它實際上是掩碼ACL條目(與umask不相關)。因此,現在因爲您的文件具有POSIX ACL擴展(如ls -l中的+後綴所示),ls,stat和find所示的rwx實際上不再是組類權限模式。使用chmod修改組類允許模式也只會更改掩碼,並且不會更改實際組類的權限模式。這意味着更改組類權限模式的唯一方法是使用setfacl

掩碼ACL條目似乎是「分配」組類的所有ACL條目的最大可能權限。這包括命名用戶,命名組和擁有組。它不包括擁有用戶和其他類。這可以限制任何指定用戶,指定組或所屬組的所分配的權限。爲了獲得最大的靈活性,請將掩碼設置爲rwx,然後根據您的意願設置指定用戶,命名組和擁有組權限。這將適用於諸如cd,ls等東西。但是,這確實意味着當使用lsstat ..等時,它們都將顯示rwx作爲組類,即使這不正確。

這是什麼面具?它解決了什麼目的?看來這個掩碼是爲了與不理解POSIX ACL的程序向後兼容。如果程序不理解POSIX ACL並且在組類中看到rwx(實際上它實際上是掩碼),它會成功訪問目錄/文件嗎? (我不知道這個問題的答案)。我認爲這很奇怪,應該刪除。但這就是POSIX ACL的工作原理。