ทำไม FreeBSD ถึงสูญเสียหน้ากาก w แต่เดเบียนยังคงเก็บมันไว้?


10

ฉันพยายามเข้าใจความแตกต่างของพฤติกรรมระหว่าง FreeBSD ACL และ 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----เคารพ ACLs เริ่มต้นที่ฉันกำหนด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จะแสดง ACLs เริ่มต้นด้วยแม้ว่าจะไม่ได้ใช้ใน-dกรณีที่ FreeBSD ไม่ได้ แต่ฉันไม่คิดว่า ACL จริงstorageนั้นแตกต่างกัน)

ที่นี่outsideและinsideไฟล์ยังมีสิทธิ์ที่แตกต่างกัน แต่insideไฟล์ไม่ได้รับอนุญาตเป็นกลุ่มเขียนว่ารุ่น Debian ไม่อาจจะเป็นเพราะหน้ากากใน Debian ไว้wขณะที่หน้ากากใน FreeBSD wแพ้

ทำไม FreeBSD ถึงสูญเสียwหน้ากาก แต่เดเบียนยังคงใช้มันอยู่?


1
สิ่งที่จะgetfacl storageแสดงในทั้งสองระบบ?
มิเคล

ใช้งานได้เหมือนกันหรือไม่ถ้าคุณไม่ใช้กลุ่มเหนียว ( g+s)
sebasth

@Mikel ฉันได้อัปเดตเนื้อหาคำถามเดิมเพื่อแสดงgetfaclข้อมูล
Roxy

@sebasth ฉันได้อัปเดตคำถามเดิมเพื่อลบบิต setgid มันไม่เกี่ยวข้อง
Roxy

หลังจากตั้งค่า ACL จะstorage, ls ควรจะแสดง+ในทำนองเดียวกันผมจะคาดหวังgetfaclการส่งออกจะคล้ายกับสิ่งที่คุณมีในระบบ Debian ไม่setfaclรหัสทางออกที่ประสบความสำเร็จกลับมา?
sebasth

คำตอบ:


1

ในระยะสั้นฉันพูด (สมมติ) พวกเขากำลังใช้ umask แตกต่างกัน

0022 เป็นกลุ่มที่ไม่ได้ตั้งค่าไว้อย่างแน่นอน W. คุณสามารถเปลี่ยน umask เพื่อลบข้อห้ามการเขียนและตรวจสอบผลลัพธ์

การอ้างถึงโซลาริสอาคา SunOS ด้วยตนเอง (และความคิดเห็นด้วย) เนื่องจากดูเหมือนว่าจะเกี่ยวข้องกันค่อนข้างสวย: "… umask (1) จะไม่ถูกนำมาใช้หากไดเรกทอรีมีรายการ ACL เริ่มต้น ... "


1
เป็นสิ่งที่ถูกและผิดอื่น ๆ ? มีมาตรฐานที่ควรปฏิบัติตามหรือไม่?
Roxy

ฉันไม่ใช่ผู้เชี่ยวชาญเกี่ยวกับเรื่องนี้ แต่คน WEB ของ FreeBSD มีรายการสำหรับการดำเนินการ "canonical" (arguably) (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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.