Permissions

為什麼我為目錄所有者設置了 acl 的目錄被拒絕權限(在刪除所有標準 posix 權限之後)?

  • November 1, 2021

我正在嘗試在ls對目錄的所有者和組具有 acl 權限的目錄上執行命令(沒有設置標準的 posix 權限)。即使getfacl說使用者應該能夠這樣做,這也會導致 Permission Denied。

這就是我正在做的事情:

  1. 在其中創建一個目錄和一個文件。

mkdir /tmp/mydir && touch /tmp/mydir/myfile

  1. 檢查我是否可以ls在此目錄上執行。
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwxr-x  2 jgazula jgazula   4096 Nov  1 11:57 .
drwxrwxrwt 25 root    root    909312 Nov  1 11:57 ..
-rw-rw-r--  1 jgazula jgazula      0 Nov  1 11:57 myfile
  1. 現在,讓我們刪除此目錄上的所有標準 posix 權限。

chmod 000 /tmp/mydir

  1. 驗證權限。
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d---------  2 jgazula jgazula   4096 Nov  1 11:57 mydir
  1. 我們現在應該做不到ls
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied
  1. 設置jgazula使用者和組的 acl 權限。

sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/

  1. 驗證 acl 權限。
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::---
user:jgazula:rwx        #effective:rwx
group::---          #effective:---
group:jgazula:rwx       #effective:rwx
mask::rwx
other::---
  1. 既然acl權限(包括有效權限)看起來不錯,應該可以ls在目錄上執行吧?
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied

但我不能,我不明白為什麼。

  1. 有趣的是,當我檢查標準 posix 權限時,組權限位已設置?不確定我是否理解為什麼只更新了組權限。
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d---rwx---+  2 jgazula jgazula   4096 Nov  1 12:13 mydir
  1. 讓我們為所有者和組設置 acl 權限(即,從命令中省略所有者/組)。

sudo setfacl --mask -Rm u::rwx,g::rwx /tmp/mydir/

  1. 再次驗證 acl 權限。
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::rwx
user:jgazula:rwx        #effective:rwx
group::rwx          #effective:rwx
group:jgazula:rwx       #effective:rwx
mask::rwx
other::---
  1. 檢查我ls現在是否可以執行。
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwx---+  2 jgazula jgazula   4096 Nov  1 11:57 .
drwxrwxrwt  25 root    root    909312 Nov  1 11:57 ..
-rwxrwxr--+  1 jgazula jgazula      0 Nov  1 11:57 myfile

為什麼步驟#6 不能單獨工作?我正在為使用者和組顯式設置 acl 權限。為什麼我需要執行步驟 #11?

執行時sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/,您正在為 user 創建一個ACL_USER條目jgazula。但是ACL_USER_OBJ對於文件的所有者來說仍然是---. getfacl(您可以在步驟 7的輸出中看到這一點。)

根據man ACL,訪問檢查算法如下:

1.   If the effective user ID of the process matches the user ID of the file object owner, then
           if the ACL_USER_OBJ entry contains the requested permissions, access is granted,
           else access is denied.

2.   else if the effective user ID of the process matches the qualifier of any entry of type ACL_USER, then
           if the matching ACL_USER entry and the ACL_MASK entry contain the requested permissions, access is granted,
           else access is denied.

因此,該ACL_USER條目甚至從未被檢查過。

關於 serverfault 基本上有同樣的問題:ACL:giving - - permissions for the owner of the file。(但看起來那裡的答案是ACL_USER相反ACL_USER_OBJ的。)

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