ディレクトリの所有者に ACL が設定されているにもかかわらず、ディレクトリのアクセス権が拒否されるのはなぜですか (すべての標準 POSIX 権限を削除した後)?

ディレクトリの所有者に ACL が設定されているにもかかわらず、ディレクトリのアクセス権が拒否されるのはなぜですか (すべての標準 POSIX 権限を削除した後)?

ディレクトリの所有者とグループに ACL 権限があるディレクトリ (標準の POSIX 権限が設定されていない) でコマンドを実行しようとしています。ユーザーは実行できるはずlsなのに、権限が拒否されます。getfacl

私がやっていることは次のとおりです:

  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. lsACL 権限 (有効な権限を含む) が適切であるように見えるので、ディレクトリで実行できるはずですか?
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 を実行する必要があるのはなぜですか?

答え1

を実行すると、ユーザー のエントリsudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/が作成されます。ただし、ファイルの所有者の はまだ です。(これは手順 7 の出力で確認できます。)ACL_USERjgazulaACL_USER_OBJ---getfacl

によると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: ファイルの所有者に - - - 権限を付与する(ただし、その答えは逆ACL_USERになっているようですACL_USER_OBJ。)

関連情報