ระบุกลุ่มเริ่มต้นและการอนุญาตสำหรับไฟล์ใหม่ในไดเรกทอรีที่แน่นอน


15

ฉันมีไดเรกทอรีที่แน่นอนซึ่งมีโครงการที่แบ่งใช้โดยผู้ใช้หลายคน ผู้ใช้เหล่านี้ใช้ SSH เพื่อเข้าถึงไดเรกทอรีนี้และแก้ไข / สร้างไฟล์

โปรเจ็กต์นี้ควรเขียนได้สำหรับผู้ใช้บางกลุ่มเท่านั้น: ให้เรียกมันว่า "mygroup" ในระหว่างเซสชัน SSH ไฟล์ / ไดเรกทอรีทั้งหมดที่สร้างโดยผู้ใช้ปัจจุบันควรเป็นค่าเริ่มต้นโดยกลุ่ม "mygroup" และมีสิทธิ์ในการเขียนกลุ่ม

ฉันสามารถแก้ปัญหาการอนุญาตด้วยumask:

$ cd project
$ umask 002
$ touch test.txt

ไฟล์ "test.txt" สามารถเขียนเป็นกลุ่มได้ แต่ยังคงเป็นกลุ่มเริ่มต้นของฉัน ("mislav" เหมือนกับชื่อผู้ใช้ของฉัน) และไม่ใช่ "mygroup" ฉันสามารถchgrpตั้งกลุ่มที่ต้องการซ้ำ แต่ฉันต้องการที่จะรู้ว่ามีวิธีการตั้งกลุ่มบางอย่างโดยนัยเช่น umask การเปลี่ยนแปลงสิทธิ์เริ่มต้นในช่วงเซสชั่น

ไดเรกทอรีเฉพาะนี้เป็น repo git ที่ใช้ร่วมกันกับสำเนาการทำงานและฉันต้องการgit checkoutและgit resetการดำเนินงานเพื่อตั้งค่ารูปแบบที่ถูกต้องและกลุ่มสำหรับไฟล์ใหม่ที่สร้างขึ้นในสำเนาการทำงาน ระบบปฏิบัติการคือ Ubuntu Linux

อัปเดต:เพื่อนร่วมงานแนะนำว่าฉันควรมองหา getfacl / setfacl ของPOSIX ACLแต่วิธีแก้ไขด้านล่างเมื่อรวมกับumask 002ในเซสชันปัจจุบันนั้นดีพอสำหรับฉันและง่ายกว่ามาก

คำตอบ:


19

เพื่อให้ไฟล์ทั้งหมดภายใต้ไดเรกทอรีที่กำหนดได้รับสิทธิ์ของกลุ่มคุณต้องใช้บิต setgid ในไดเรกทอรีของคุณ ดูลิงค์นี้

 $ mkdir test
 $ sudo chown raphink.staff test
 $ ls -lhd test
     drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
 $ sudo chmod g+s test # Set the setgid bit
 $ ls -lhd test
     drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
 $ touch test/foo
 $ ls -lh test
     total 0
     -rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo

ขอบคุณ ที่น่าสนใจที่ฉันไม่พบนี้โดย googling
Mislav

6

หากคุณต้องการทำเช่นนี้กับโฟลเดอร์ที่มีอยู่คุณต้องตรวจสอบให้แน่ใจว่าบิต setgid เปิดใช้งานสำหรับโฟลเดอร์ย่อยทั้งหมดด้วย อย่างไรก็ตามคุณไม่ต้องการใช้ไฟล์และคุณอาจไม่ต้องการใช้ไฟล์ นี่คือวิธีการตั้งค่าสำหรับโฟลเดอร์ย่อยทั้งหมดซ้ำ ๆ

find /path/to/base/dir -type d -exec chmod g+s {} +

4

ฉันไม่พบแหล่งที่มาคืน แต่ใช้setgidเพื่อแก้ปัญหานี้สำหรับที่เก็บ git เปลือยซึ่งฉันคิดว่าเป็นกรณีของคุณเลิกใช้แล้วและอาจทำให้เกิดปัญหาในบางกรณี

Git สามารถดูแลทั้งหมดนี้ได้ผ่านทางcore.sharedRepositoryธง ฉันมีปัญหาเดียวกันและแก้ไขได้ดังนี้

สมมติว่าrepogroupเป็นกลุ่มของคุณและคุณต้องcdไปที่ไดเรกทอรี repo:

ก่อนอื่นให้เปลี่ยนการตั้งค่าสถานะที่ใช้ร่วมกันเป็นgroup:

git config core.sharedRepository group 

หมายเหตุ: ที่นี่คุณต้องใช้คำหลักgroupไม่ใช่ชื่อกลุ่ม --shared=groupนี้จะเทียบเท่ากับการสร้างที่เก็บเปลือยที่มีตัวเลือก

จากนั้นเปลี่ยนกลุ่มสำหรับที่เก็บทั้งหมด:

chgrp -R repogroup .

ในการตรวจสอบให้แน่ใจว่าไดเรกทอรีที่มีอยู่นั้นเป็นกลุ่มที่เขียนได้ ( g+w) และไฟล์ที่มีอยู่ก็กลายเป็นไฟล์ที่เรียกใช้กลุ่มได้ ( g+X) คุณต้อง:

chmod -R g+wX .

เมื่อคุณได้กระทำนี้คอมไพล์จะให้เกียรติshared=groupธงและดูแลสิทธิ์ของกลุ่มในต่อไปนี้ทั้งที่มีอยู่และไฟล์ใหม่ดังนั้นคุณจะไม่จำเป็นอีกครั้งเพื่อหรือumaskchgrp

ฉันจะใส่แหล่งที่มาในความคิดเห็นหากฉันพบมันกลับมา


3

ฉันไม่ค่อยผู้เชี่ยวชาญเมื่อพูดถึงด้าน * ระวัง แต่ฉันคิดว่าสิ่งที่คุณกำลังมองหาเรียกว่า setgid

ดูที่นี่


1

เป็นการยากที่จะสืบทอดการอนุญาตไดเรกทอรีหลักใน Linux / UNIX โดยไม่ต้องใช้ ACL แต่มีวิธีการกำหนดสิทธิ์ไฟล์เริ่มต้นให้ตรวจสอบการเชื่อมโยงร้อง

คุณสามารถรับสิทธิ์การอนุญาตไดเรกทอรีหลักได้หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.