Почему FreeBSD потеряла маску w, а Debian сохранил ее?

10

Я пытаюсь понять разницу в поведении между 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 сохранил ее?

Roxy
источник
1
Что getfacl storageпоказывает в обеих системах?
Микель
Работает ли это одинаково, если вы не используете sticky group bit ( g+s)?
Себастьян
@Mikel Я обновил исходное содержание вопроса, чтобы показать getfaclинформацию.
Рокси
@sebasth Я обновил исходный вопрос, чтобы убрать бит setgid. Это не имеет значения.
Рокси
После настройки ACL для storage, ls должен показать+ , так же я хотел бы ожидать getfaclвыход будет похож на то , что вы получили в системе Debian. Вернул ли setfaclкод завершения успешно?
Себастьян

Ответы:

1

Короче говоря, я бы сказал (предположим), что они используют umask по-другому.

0022 - это точно группа, не установленная W. Вы можете изменить umask, чтобы снять запрет на запись и проверить результат.

Ссылаясь на руководство по Solaris, также известное как SunOS (и комментарии), так как оно кажется довольно связанным: «… umask (1) не будет применяться, если каталог содержит записи ACL по умолчанию.…»

poige
источник
1
Одно правильно, а другое неправильно? Есть ли какой-то стандарт, которого это должно придерживаться?
Рокси
Я не эксперт в этом, но (как ни странно) WEB- менеджер
poige
«… Umask (1) не будет применяться, если каталог содержит записи ACL по умолчанию.…»
poige
Сама страница umaskруководства FreeBSD не упоминается , так что это кажется недостаточно определенным поведением. Должна ли реализация FreeBSD ACL работать так же, как SunOS?
Рокси
Очевидно, что это (упоминание) не вызывает, в противном случае было бы ясно видно противоречие между заявленными и сделанными вещами.
Пой