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