Я намагаюся зрозуміти різницю в поведінці між 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 зберегла її?
g+s
)?
getfacl
інформацію.
storage
, ls
слід показати+
, аналогічно, я б очікував, що getfacl
вихід буде подібний до того, який ви отримали в системі Debian. Чи setfacl
повернувся код виходу успіху?
getfacl storage
відображається в обох системах?