การตั้งค่าการใช้ค่าเริ่มต้น "โดยอัตโนมัติ" จะต้องมีไดเรกทอรีทำตัวเหมือนsetuid
setgid
อย่างไรก็ตามในขณะนี้สามารถกำหนดค่าบน FreeBSD, ระบบ UNIX และ Linux อื่น ๆ u+s
ก็ไม่สนใจ อย่างไรก็ตามในกรณีของคุณอาจมีวิธีแก้ไขปัญหาอื่น
สิ่งที่ฉันต้องการคือมีไดเรกทอรีที่สามารถแชร์ได้โดยการเพิ่มกลุ่มให้กับผู้ใช้ สิ่งใดก็ตามที่สร้างในไดเรกทอรีนี้จะสืบทอดโครงร่างการอนุญาตจากพาเรนต์ หากมีวิธีที่ดีกว่าสิ่งที่ฉันพยายามฉันก็เป็นได้
ดังนั้นโดยทั่วไปจากสิ่งที่ฉันเห็นคุณต้องการควบคุมการเข้าถึงไดเรกทอรีโดยใช้กลไกกลุ่ม อย่างไรก็ตามสิ่งนี้ไม่ต้องการให้คุณ จำกัด สิทธิ์ในโครงสร้างไดเรกทอรีทั้งหมด จริงๆแล้ว--x
บิตการประมวลผลไดเรกทอรีอาจเป็นสิ่งที่คุณต้องการ ผมขอยกตัวอย่างให้คุณ สมมติว่า ...
- กลุ่มควบคุมการเข้าถึงไปยังไดเรกทอรี
group_dir
ourgroup
- คนเท่านั้นในการเข้าถึงกลุ่มสามารถ
ourgroup
group_dir
user1
และเป็นของuser2
ourgroup
- umask เริ่มต้นคือ 0022
... พิจารณาการตั้งค่าต่อไปนี้:
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
ที่นี่สมมติว่าทุกรายการถูกสร้างโดยเจ้าของ
ตอนนี้ในการตั้งค่านี้:
ourgroup
ไดเรกทอรีทั้งหมดสามารถเรียกดูได้อย่างอิสระโดยทุกคนใน ทุกคนจากกลุ่มสามารถสร้างย้ายลบไฟล์ได้ทุกที่ภายในgroup_dir
(แต่ไม่ลึกกว่า)
- ทุกคนที่ไม่ได้อยู่ใน
ourgroup
นั้นจะถูกบล็อกที่group_dir
และจะไม่สามารถจัดการอะไรได้ ตัวอย่างเช่นuser3
(ผู้ที่ไม่ได้เป็นสมาชิกของourgroup
) ไม่สามารถอ่านได้group_dir/user2_submission/README
(แม้ว่าเขาจะได้r--
รับอนุญาตในไฟล์เอง)
อย่างไรก็ตามมีปัญหาเล็กน้อยในกรณีนี้เนื่องจาก umask ทั่วไปรายการที่สร้างโดยผู้ใช้ไม่สามารถจัดการโดยสมาชิกคนอื่น ๆ ของกลุ่ม นี่คือที่มา ACL โดยการตั้งค่าการอนุญาตเริ่มต้นคุณจะต้องแน่ใจว่าทุกอย่างเรียบร้อยแม้จะมีค่า umask:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
ชุดการโทรนี้:
rw(x)
สิทธิ์เริ่มต้นสำหรับเจ้าของ
rw(x)
สิทธิ์เริ่มต้นสำหรับกลุ่ม
- ไม่มีการอนุญาตตามค่าเริ่มต้นสำหรับผู้อื่น โปรดทราบว่าเนื่องจากคนอื่นไม่สามารถเข้าถึง
group_dir
ได้จึงไม่สำคัญว่าสิทธิ์ของพวกเขาจะอยู่ที่ใด
ตอนนี้ถ้าฉันสร้างรายการเป็นuser2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
ด้วย ACL นี้เราสามารถลองสร้างโครงสร้างก่อนหน้านี้อีกครั้ง:
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
ที่นี่อีกครั้งแต่ละรายการจะถูกสร้างขึ้นโดยเจ้าของ
นอกจากนี้หากคุณต้องการเพิ่มกำลังไฟ / ความปลอดภัยให้กับผู้ที่ใช้ไดเรคทอรีอีกเล็กน้อยคุณอาจต้องพิจารณาว่าเป็นบิตเหนียว ๆ เช่นนี้จะป้องกันไม่ให้user1
ลบuser2_submission
(เนื่องจากเขาได้-w-
รับอนุญาตgroup_dir
):
$ chmod +t group_dir/
ตอนนี้ถ้าuser1
พยายามที่จะลบuser2
's Operation not permitted
ไดเรกทอรีเขาจะได้รับที่น่ารัก อย่างไรก็ตามโปรดทราบว่าแม้ว่าสิ่งนี้จะช่วยป้องกันการปรับเปลี่ยนโครงสร้างไดเรกทอรีในgroup_dir
ไฟล์และไดเรกทอรีด้านล่างยังสามารถเข้าถึงได้:
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
อีกสิ่งที่ควรคำนึงถึงคือ ACLs ที่เราใช้ตั้งค่าการอนุญาตเริ่มต้น ดังนั้นจึงเป็นไปได้สำหรับเจ้าของรายการที่จะเปลี่ยนสิทธิ์ที่เกี่ยวข้อง ตัวอย่างเช่นuser2
สามารถทำงานได้อย่างสมบูรณ์แบบ ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... ด้วยเหตุนี้ทำให้ทุกคนในกลุ่มไม่สามารถใช้งานไดเรกทอรีส่งแบบเต็มได้
อย่างไรก็ตามเนื่องจากเดิมคุณเต็มใจที่จะให้rws
สิทธิ์การเข้าถึงแบบเต็มรูปแบบให้กับทุกคนในกลุ่มฉันถือว่าคุณเชื่อใจผู้ใช้เหล่านี้และคุณไม่คาดหวังว่าจะมีการดำเนินการที่เป็นอันตรายจากพวกเขามากเกินไป