การตั้งค่าการใช้ค่าเริ่มต้น "โดยอัตโนมัติ" จะต้องมีไดเรกทอรีทำตัวเหมือนsetuid setgidอย่างไรก็ตามในขณะนี้สามารถกำหนดค่าบน FreeBSD, ระบบ UNIX และ Linux อื่น ๆ u+sก็ไม่สนใจ อย่างไรก็ตามในกรณีของคุณอาจมีวิธีแก้ไขปัญหาอื่น
สิ่งที่ฉันต้องการคือมีไดเรกทอรีที่สามารถแชร์ได้โดยการเพิ่มกลุ่มให้กับผู้ใช้ สิ่งใดก็ตามที่สร้างในไดเรกทอรีนี้จะสืบทอดโครงร่างการอนุญาตจากพาเรนต์ หากมีวิธีที่ดีกว่าสิ่งที่ฉันพยายามฉันก็เป็นได้
ดังนั้นโดยทั่วไปจากสิ่งที่ฉันเห็นคุณต้องการควบคุมการเข้าถึงไดเรกทอรีโดยใช้กลไกกลุ่ม อย่างไรก็ตามสิ่งนี้ไม่ต้องการให้คุณ จำกัด สิทธิ์ในโครงสร้างไดเรกทอรีทั้งหมด จริงๆแล้ว--xบิตการประมวลผลไดเรกทอรีอาจเป็นสิ่งที่คุณต้องการ ผมขอยกตัวอย่างให้คุณ สมมติว่า ...
- กลุ่มควบคุมการเข้าถึงไปยังไดเรกทอรี
group_dirourgroup
- คนเท่านั้นในการเข้าถึงกลุ่มสามารถ
ourgroupgroup_dir
user1และเป็นของuser2ourgroup
- 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สิทธิ์การเข้าถึงแบบเต็มรูปแบบให้กับทุกคนในกลุ่มฉันถือว่าคุณเชื่อใจผู้ใช้เหล่านี้และคุณไม่คาดหวังว่าจะมีการดำเนินการที่เป็นอันตรายจากพวกเขามากเกินไป