ทำให้ไฟล์ใหม่ทั้งหมดในกลุ่มสามารถเข้าถึงไดเรกทอรีได้


131

สมมติว่าฉันมีผู้ใช้สองคนคืออลิสและบ็อบและกลุ่ม GROUPNAME และโฟลเดอร์fooผู้ใช้ทั้งสองเป็นสมาชิกของ GROUPNAME (โดยใช้ Linux และ ext3)

ถ้าผมเป็นผู้ใช้บันทึกไฟล์อลิซภายใต้สิทธิ์คือ:foo -rw-r--r-- Alice Aliceอย่างไรก็ตามเป็นไปได้หรือไม่ที่จะทำให้ทุกไฟล์ที่บันทึกภายใต้ไดเรกทอรีย่อยบางแห่งfooมีสิทธิ์ใช้งาน-rwxrwx--- Alice GROUPNAME(เช่นเจ้าของอลิซกลุ่ม GROUPNAME)


คำตอบ:


91

คุณสามารถควบคุมที่ได้รับมอบหมายบิตได้รับอนุญาตมีumaskและกลุ่มโดยการไดเรกทอรีsetgidGROUPNAMEไป

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

โปรดทราบว่าคุณต้องทำchgrp/ chmodสำหรับทุกไดเรกทอรีย่อย มันไม่แพร่กระจายโดยอัตโนมัติ (นั่นคือไม่ว่าจะเป็นไดเรกทอรีที่มีอยู่หรือสร้างในภายหลังภายใต้ไดเรกทอรีsetgidจะถูกsetgidแม้ว่าหลังจะอยู่ในกลุ่มGROUPNAME)

นอกจากนี้ทราบว่าumaskเป็นคุณลักษณะของกระบวนการและนำไปใช้กับไฟล์ทั้งหมดที่สร้างขึ้นโดยกระบวนการที่และเด็ก (ซึ่งสืบทอดumaskผลบังคับใช้ในผู้ปกครองของพวกเขาในfork()เวลา) ผู้ใช้อาจต้องตั้งค่านี้~/.profileและอาจต้องระวังสิ่งต่าง ๆ ที่ไม่เกี่ยวข้องกับไดเรกทอรีของคุณที่ต้องการการอนุญาตที่แตกต่างกัน โมดูลอาจมีประโยชน์หากคุณต้องการการตั้งค่าที่แตกต่างกันเมื่อทำสิ่งต่าง ๆ

คุณสามารถควบคุมสิ่งต่าง ๆ ได้ดีขึ้นเล็กน้อยหากคุณสามารถใช้ POSIX ACL มันควรจะเป็นไปได้ที่จะระบุทั้งหน้ากากและกลุ่มสิทธิ์และให้พวกเขาเผยแพร่อย่างสมเหตุสมผล การสนับสนุน POSIX ACL นั้นค่อนข้างผันแปร


6
ไดเรกทอรีย่อยที่สร้างขึ้นหลังจากการตั้งค่า setgid ในไดเรกทอรีหลักจะมีการตั้งค่า setgid โดยอัตโนมัติ
Arrowmaster

2
@Arrowmaster: ในบางระบบอาจจะ แต่ไม่ใช่ทั้งหมด ฉันทดสอบบน OSX และไม่ได้เผยแพร่อย่างน้อยสำหรับผู้ที่ไม่รูท
geekosaur

2
บนเดเบียน (และฉันถือว่า Linux distros อื่น ๆ ส่วนใหญ่) ชื่อ setgid และกลุ่มทั้งสองเผยแพร่
Arrowmaster

3
บน OS X บิต setgid ในไดเรกทอรีจะถูกละเว้น ไฟล์ใหม่และไดเรกทอรีจะเสมอให้กลุ่มไดเรกทอรีที่มีของพวกเขา
John Flatness

เป็นไปได้ไหมว่าไฟล์ที่คัดลอกหรือย้ายไปที่ foo (โดยใช้ cp resp. mv) ได้รับการอนุญาตที่ต้องการโดยอัตโนมัติ ( -rwxrwx--- A G)?
นักเรียน

106

ถ้าเป็นไปได้ใช้ทั้งหมดเข้าถึงรายการควบคุม (ACL)

ภายใต้ Linux ตรวจสอบให้แน่ใจว่าระบบไฟล์ที่คุณใช้รองรับ ACL (ระบบไฟล์ยูนิกซ์ส่วนใหญ่ทำ) คุณอาจจะต้องเปลี่ยนตัวเลือกภูเขาเพื่อเปิดใช้งาน ACLs: กับ ext2 / ext3 / ext4 คุณจะต้องระบุaclภูเขาตัวเลือกที่ชัดเจนเพื่อให้รายการในควรมีลักษณะดังนี้/etc/fstab /dev/sda1 / ext4 errors=remount-ro,acl 0 1รันmount -o remount,acl /เพื่อเปิดใช้งาน ACL โดยไม่ต้องบูตใหม่ นอกจากนี้ยังติดตั้งเครื่องมือบรรทัดคำสั่งของ ACL getfaclและให้มักจะอยู่ในแพคเกจที่เรียกว่าsetfaclacl

หลังจากการตั้งค่าแบบครั้งเดียวสิ้นสุดลงให้เปลี่ยน ACL ของไดเรกทอรีเพื่อให้สิทธิ์ในการเขียนกลุ่มและเพื่อให้สิทธิ์เหล่านี้สืบทอดโดยไฟล์ที่สร้างขึ้นใหม่ ภายใต้ Linux:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

หาก ACL ที่ไม่ได้เป็นตัวเลือกให้ไดเรกทอรีที่เป็นเจ้าของโดยกลุ่มGROUPNAMEและกำหนดสิทธิ์ในการ 2775 หรือ chmod g+rwxs /path/to/directory2770: sนี่หมายความว่าบิต setgid; สำหรับไดเรกทอรีหมายความว่าไฟล์ที่สร้างในไดเรกทอรีนี้จะเป็นของกลุ่มที่เป็นเจ้าของไดเรกทอรี

คุณจะต้องตั้งค่าumaskของอลิซและบ๊อบเพื่อให้ไฟล์ทั้งหมดของกลุ่มสามารถเขียนได้ตามค่าเริ่มต้น ค่าเริ่มต้น umask บนระบบส่วนใหญ่คือ 022 ซึ่งหมายความว่าไฟล์สามารถมีสิทธิ์ทั้งหมดยกเว้นการเขียนโดยกลุ่มและอื่น ๆ เปลี่ยนเป็น 002 หมายถึงห้ามไม่ให้มีการเขียนโดยได้รับอนุญาตเท่านั้น โดยทั่วไปคุณจะตั้งค่านั้นใน~/.profile:

umask 002    # or 007 to have files not readable by others

6
+1 - คำตอบที่ละเอียดมาก ฉันไม่เคยรู้ว่าใครสามารถนับใหม่ / ทันที ดีแล้วที่รู้.
boehj

1
คำสั่งของคุณ setfacl -d ไม่ทำงานสำหรับฉันเพราะไฟล์ที่อยู่ในไดเรกทอรีนั้นมีมาสก์ r-- ซึ่งลบล้างสิทธิ์การเขียนใด ๆ ชอบความช่วยเหลือบ้าง ดูunix.stackexchange.com/questions/71743/…
Ben McCann

2
@its_me Q1: ฉันแสดงmountคำสั่งที่มีตัวเลือกจึงไม่ได้ใช้remount fstabการมีaclสองครั้งหมายความว่าระบบไฟล์นั้นถูกเมาท์พร้อมกับaclตัวเลือกแล้วและมันก็ไม่เป็นอันตราย acl เป็นค่าเริ่มต้นสำหรับ ext4 ในเมล็ดล่าสุดโดยวิธี (แพทช์ยังคงเป็นแบรนด์ใหม่เมื่อฉันเขียนคำตอบนี้) Q2: คุณสามารถเรียกใช้คำสั่งในลำดับใดก็ได้
Gilles

1
@its_me ใช่ความเข้าใจของคุณถูกต้องมันเป็นเพียงแค่ว่ามันไม่สำคัญว่าคุณจะเพิ่มรายการในลำดับใด
Gilles

8
คุณควรจะปรับปรุงคำตอบแล้วจะใช้GROUPNAMEแทนการGที่จะทำให้มันชัดเจนมากขึ้น
knocte

24

aclคำถามนี้เป็นแบบที่ดีสำหรับลินุกซ์ เนื่องจากคุณไม่ได้ระบุระบบปฏิบัติการของคุณฉันจะถือว่า Linux เป็นดังนี้ นี่คือตัวอย่างเซสชัน

ฉันไม่รู้จักการaclสอนที่ดีจริงๆแต่คุณทำได้แย่กว่าhttp://www.vanemery.com/Linux/ACL/linux-acl.html

โปรดทราบว่าค่าเริ่มต้นaclจะทำงานเหมือน umask ในเครื่อง ตั้งแต่อย่างน้อยใน Linux, umasks ถูกนำไปใช้ทั่วโลกนี่เป็นวิธีเดียวที่ฉันรู้ว่าจะได้รับผลของ umask ในท้องถิ่น ด้วยเหตุผลบางอย่างนี้เป็นคุณสมบัติที่รู้จักกันเล็กน้อย สุทธิเป็นที่ทิ้งกระจุยกระจายกับคนถามเกี่ยวกับการแทนที่ umask ท้องถิ่น aclแต่เกือบจะดูเหมือนไม่มีใครคิดว่าการใช้

นอกจากนี้โปรดทราบว่าคุณต้องติดตั้งพาร์ติชันที่คุณกำลังทำงานด้วยaclการสนับสนุนเช่น

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

เซสชันดังต่อไปนี้:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

ตั้งกลุ่มของfooที่จะเป็นstaffและการตั้งค่า ACL ของผู้ใช้และกลุ่มของการfoorwx

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

ตั้งค่า acls เริ่มต้นของผู้ใช้และกลุ่มrwxเป็นเช่นกัน fooนี้กำหนดสิทธิ์ที่ไฟล์และไดเรกทอรีสืบทอดมาจาก ดังนั้นไฟล์และไดเรกทอรีทั้งหมดที่สร้างขึ้นภายใต้ foo rwจะมีสิทธิ์ของกลุ่ม

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

ตอนนี้สร้างไฟล์บางอย่างในการfooเป็นผู้ใช้และfaheemjohn

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

รายการไฟล์ ขอให้สังเกตว่าทั้งไฟล์ที่เป็นของfaheemและไฟล์ที่เป็นเจ้าของโดยถูกสร้างขึ้นด้วยสิทธิ์ของกลุ่มjohnrw

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.