Поведение Linux ACL: настройка маски изменяет вывод 'ls', но не фактические разрешения

Это может быть время ночи, но это озадачивает меня. Изобразите следующее.

[root@node1 acltest]# getfacl foo/
# file: foo
# owner: root
# group: testuser
user::rwx
group::r-x
other::---

[root@node1 acltest]# ls -la .
total 24
drwxr-xr-x  3 root root     4096 Feb  9 21:53 .
drwxr-xr-x 25 root root     4096 Feb  9 21:54 ..
drwxr-x---  2 root testuser 4096 Feb  9 21:53 foo
[root@node1 acltest]# setfacl -m m::rwx foo
[root@node1 acltest]# getfacl foo/
# file: foo
# owner: root
# group: testuser
user::rwx
group::r-x
mask::rwx
other::---

[root@node1 acltest]# ls -la .
total 24
drwxr-xr-x   3 root root     4096 Feb  9 21:53 .
drwxr-xr-x  25 root root     4096 Feb  9 21:54 ..
drwxrwx---+  2 root testuser 4096 Feb  9 21:53 foo
[root@node1 acltest]# su - testuser
[testuser@node1 ~]$ cd /acltest/foo/
[testuser@node1 foo]$ ls -la .
total 16
drwxrwx---+ 2 root testuser 4096 Feb  9 21:53 .
drwxr-xr-x  3 root root     4096 Feb  9 21:53 ..
[testuser@node1 foo]$ touch bar
touch: cannot touch `bar': Permission denied

На словах: создаю каталог fooс режимом 0750, root как владелец и testuser как группа. (testuser это частная группа testuser, но это не имеет значения.)

getfacl Команда корректно не отображает ACL в этом каталоге и пока не имеет маски. Маска будет установлена ​​в соответствии с разрешениями группы, если я добавлю именованную группу или пользователя сейчас.

Если я явно установить маску rwx Теперь разрешения группы, как показано ls изменить тоже. Я знаю, что это происходит наоборот (маска меняется при изменении разрешений группы), но это кажется загадочным.

Чем больше озадачивает, потому что getfacl вывод не показывает разрешения группы как rwx но - как сказано - ls делает.

Какой из них прав? По-видимому, вывод getfacl правильно, потому что testuser не могу написать foo, Как и ожидалось, кстати, потому что я не предоставил testuser сгруппируйте любые разрешения для этого.

Это продолжается. Я не могу допустить testuser разрешения на запись в группу foo просто используя chmod, Я должен явно установить ACL, используя setfacl -m g:testuser:rwx foo позволять testuser наконец прикоснуться foo/bar,

Может кто-нибудь объяснить обоснование разницы в результатах getfacl а также ls? Я знаю, что может быть сложно иметь нормальные разрешения вместе с ACL, но это кажется неправильным. (Хотя я ожидаю пропустить что-то явно очевидное;))

Я уже видел, почему chmod(1) в группе влияет на маску ACL?

2 ответа

Решение

С мужской (5) страницы ACL

    ACL_MASK        The ACL_MASK entry denotes the maximum access
                       rights that can be granted by entries of type
                       ACL_USER, ACL_GROUP_OBJ, or ACL_GROUP.

и позже:

  1. иначе, если эффективный идентификатор группы или любой из дополнительных идентификаторов группы процесса соответствуют файловой группе или квалификатору любой записи типа ACL_GROUP, то
          if the ACL contains an ACL_MASK entry, then

              if  the ACL_MASK entry and any of the matching ACL_GROUP_OBJ
              or ACL_GROUP  entries  contain  the  requested  permissions,
              access is granted,

              else access is denied.

Это означает, что rwx МОЖЕТ быть предоставлен на dir, но биты chmod должны с этим согласиться.

Я хотел бы добавить, что когда ACL используются для объекта, разрешения, указанные в ls -l, немного отличаются.

По мужскому списку ACL(5):

ПЕРЕПИСКА МЕЖДУ ЗАПИСЯМИ ACL И БИТАМИ РАЗРЕШЕНИЯ НА ФАЙЛ

Разрешения, определенные списками ACL, представляют собой расширенный набор разрешений, указанных в битах разрешений файла.

Существует соответствие между владельцем файла, группой и другими разрешениями и определенными записями ACL: разрешения владельца соответствуют разрешениям записи ACL_USER_OBJ. Если ACL имеет запись ACL_MASK, разрешения группы соответствуют разрешениям записи ACL_MASK. В противном случае, если ACL не имеет записи ACL_MASK, групповые разрешения соответствуют разрешениям записи ACL_GROUP_OBJ. Другие разрешения соответствуют разрешениям записи ACL_OTHER_OBJ.

Поэтому при использовании ACL вы должны рассматривать раздел разрешений группы вывода ls -l как маску ACL.

Другие вопросы по тегам