Saya mencoba memahami perbedaan perilaku antara FreeBSD ACL dan Linux ACL. Secara khusus, mekanisme pewarisan untuk ACL default.
Saya menggunakan yang berikut ini pada Debian 9.6 dan 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
Saya mendapatkan output berikut dari 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
Perhatikan bahwa file outside
dan inside
memiliki izin yang berbeda. Secara khusus, outside
file memiliki -rw-r--r--
, yang merupakan default untuk pengguna ini dan inside
file -rw-rw----
, menghormati ACL default yang saya tetapkan storage
direktori.
Output dari skrip yang sama pada 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
(Catatan Debian getfacl
juga akan menunjukkan ACL default bahkan ketika tidak menggunakan di -d
mana FreeBSD tidak, tapi saya tidak berpikir ACL sebenarnya storage
berbeda.)
Di sini, file outside
dan inside
juga memiliki izin yang berbeda, tetapi inside
file tidak memiliki izin menulis grup yang versi Debian lakukan, mungkin karena topeng di Debian mempertahankan w
sementara topeng di FreeBSD kehilangan w
.
Mengapa FreeBSD kehilangan w
topeng tetapi Debian mempertahankannya?
sumber
getfacl storage
ditunjukkan pada kedua sistem?g+s
)?getfacl
informasi.storage
,ls
harus menunjukkan+
, sama saya harapkangetfacl
output akan serupa dengan apa yang Anda dapatkan di sistem Debian. Apakahsetfacl
mengembalikan kode keluar berhasil?Jawaban:
Singkatnya saya akan mengatakan (menganggap) mereka menggunakan umask secara berbeda.
0022 persis grup-lainnya tidak disetel W. Anda dapat mengubah umask untuk menghapus larangan menulis dan memeriksa hasilnya.
Mengutip Solaris alias manual SunOS (dan komentar juga) karena itu tampaknya cukup terkait: "... Umask (1) tidak akan diterapkan jika direktori berisi entri ACL default. ..."
sumber
umask
, jadi ini kelihatannya merupakan perilaku yang kurang jelas. Apakah implementasi ACL FreeBSD seharusnya bekerja sama dengan SunOS?