Почему я получаю отказ в доступе к каталогу, для владельца которого установлен acl (после удаления всех стандартных разрешений posix)?

Почему я получаю отказ в доступе к каталогу, для владельца которого установлен acl (после удаления всех стандартных разрешений posix)?

Я пытаюсь выполнить lsкоманду в каталоге, который имеет разрешения acl для владельца и группы каталога (без стандартных разрешений posix). Это приводит к отказу в доступе, хотя и 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. Установите разрешения acl для jgazulaпользователя и группы.

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?

решение1

При запуске sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/вы создаете 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: предоставление - - - разрешений владельцу файла. (Но, похоже, ответ там получился ACL_USERобратным ACL_USER_OBJ.)

Связанный контент