Чому FreeBSD втратив маску w, але Debian зберегла її?


10

Я намагаюся зрозуміти різницю в поведінці між ACBS на 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 зберегла її?


1
Що getfacl storageвідображається в обох системах?
Мікель

Чи працює це однаково, якщо ви не використовуєте липкий біт групи ( g+s)?
sebasth

@Mikel Я оновив оригінальний вміст питання, щоб показати getfaclінформацію.
Roxy

@sebasth Я оновив оригінальне запитання, щоб видалити встановлений біт. Це не має значення.
Roxy

Після встановлення ACL на storage, ls слід показати+ , аналогічно, я б очікував, що getfaclвихід буде подібний до того, який ви отримали в системі Debian. Чи setfaclповернувся код виходу успіху?
sebasth

Відповіді:


1

Коротше кажучи (припустимо), що вони використовують umask по-різному.

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

Посилаючись на посібник Solaris aka SunOS (і також коментарі), оскільки це, здається, досить пов'язане: "... umask (1) не застосовуватиметься, якщо каталог містить записи ACL за замовчуванням ..."


1
Одне право, а друге неправильно? Чи є стандарт, якого слід дотримуватися?
Roxy

Я не фахівець з цього питання, але (як не дивно, що) WEB-людина FreeBSD має запис для "канонічної" (імовірно) реалізації (SunOS), яка прямо говорить, що umask не слід рахувати: freebsd.org/cgi/man.cgi?query= setfacl & manpath = SunOS + 5.10
poige

"... umask (1) не застосовуватиметься, якщо каталог містить записи ACL за замовчуванням. ..."
poige

Власна сторінка FreeBSD не згадується umask, тому це, здається, є недостатньо визначеною поведінкою. Чи має реалізація ACL FreeBSD працювати так само, як SunOS?
Roxy

Очевидно, що це (не згадує) викликає інакше, було б чітко видно суперечність між заявленим і зробленим.
poige
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.