Я пытаюсь понять разницу в поведении между ACL FreeBSD и Linux ACL. В частности, механизм наследования для ACL по умолчанию.
Я использовал следующее в Debian 9.6 и FreeBSD 12:
$ cat test_acl.sh
#!/bin/sh
set -xe
mkdir storage
setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
touch outside
cd storage
touch inside
cd ..
ls -ld outside storage storage/inside
getfacl -d storage
getfacl storage
getfacl outside
getfacl storage/inside
umask
Я получаю следующий вывод из Debian 9.6:
$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r-- 1 aaa aaa 0 Dec 28 11:16 outside
drwxr-xr-x+ 2 aaa aaa 4096 Dec 28 11:16 storage
-rw-rw----+ 1 aaa aaa 0 Dec 28 11:16 storage/inside
+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---
+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::---
+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--
+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx #effective:rw-
mask::rw-
other::---
+ umask
0022
Обратите внимание , что outside
и inside
файлы имеют разные права доступа. В частности, outside
файл имеет -rw-r--r--
, который является значением по умолчанию для этого пользователя, и inside
файл имеет -rw-rw----
, соблюдая ACL по умолчанию, которые я назначил storage
каталогу.
Вывод того же скрипта на FreeBSD 12:
$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r-- 1 aaa aaa 0 Dec 28 03:16 outside
drwxr-xr-x 2 aaa aaa 512 Dec 28 03:16 storage
-rw-r-----+ 1 aaa aaa 0 Dec 28 03:16 storage/inside
+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---
+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x
+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--
+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx # effective: r--
mask::r--
other::---
+ umask
0022
(Обратите внимание, что в Debian также getfacl
будут показаны списки ACL по умолчанию, даже если не используется -d
где, поскольку FreeBSD не использует, но я не думаю, что фактические ACL для storage
отличаются.)
Здесь outside
и inside
файлы также имеют разные разрешения, но inside
файл не имеет разрешения на запись группы , что версия Debian делает, вероятно , потому , что маска в Debian сохранила в w
то время как маска в FreeBSD потеряла w
.
Почему FreeBSD потеряла w
маску, а Debian сохранил ее?
источник
getfacl storage
показывает в обеих системах?g+s
)?getfacl
информацию.storage
,ls
должен показать+
, так же я хотел бы ожидатьgetfacl
выход будет похож на то , что вы получили в системе Debian. Вернул лиsetfacl
код завершения успешно?Ответы:
Короче говоря, я бы сказал (предположим), что они используют umask по-другому.
0022 - это точно группа, не установленная W. Вы можете изменить umask, чтобы снять запрет на запись и проверить результат.
Ссылаясь на руководство по Solaris, также известное как SunOS (и комментарии), так как оно кажется довольно связанным: «… umask (1) не будет применяться, если каталог содержит записи ACL по умолчанию.…»
источник
umask
руководства FreeBSD не упоминается , так что это кажется недостаточно определенным поведением. Должна ли реализация FreeBSD ACL работать так же, как SunOS?