Поведение 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.
и позже:
- иначе, если эффективный идентификатор группы или любой из дополнительных идентификаторов группы процесса соответствуют файловой группе или квалификатору любой записи типа 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.