วิธีที่ดีและง่ายต่อการแชร์ไฟล์ในเครื่องท้องถิ่น


13

ฉันต้องการมีไดเรกทอรีที่มีคุณสมบัติดังต่อไปนี้:

  • ผู้ใช้หลายคนสามารถคัดลอกไฟล์ลงไปได้
  • ไฟล์เหล่านี้สามารถลบ / เปลี่ยนแปลงโดยผู้ใช้เหล่านี้ (ผู้ใช้ A สามารถลบ / แก้ไขไฟล์ที่คัดลอกไปยังไดเรกทอรีนี้)

มันไม่สามารถทำได้โดยใช้สิทธิ์ไฟล์ปกติ (เพราะสิทธิ์จะถูกเก็บไว้ในการคัดลอก)

นี่คือสิ่งที่ฉันพบในเน็ต:

บางกรณีใช้:

  • แบ่งปันเพลงบนเครื่องท้องถิ่น
  • การแชร์พื้นที่เก็บข้อมูล git ง่าย ๆ (เพียงแค่สร้างที่เก็บเปลือยที่คนทั่วไปสามารถเขียนได้) --- ฉันรู้ว่ามีวิธีแก้ปัญหาเช่น gitosis
  • อนุญาตให้นักพัฒนาหลายคนปรับเปลี่ยนอินสแตนซ์ทดสอบของแอป php โดยไม่ให้รูท (ฉันเดาว่าพวกเขาจะคัดลอกไฟล์) --- ฉันเป็นผู้นำทีมนักพัฒนารุ่นเยาว์ที่ไม่แสวงหากำไรและฉันต้องการทำให้มันง่าย!

แก้ไข

AFAIK การตั้งค่า SGID บิตไม่เพียงพอมีผลกับไฟล์ที่สร้างขึ้นใหม่เท่านั้นและเวิร์กโฟลว์พื้นฐานสำหรับกรณีการใช้งานเหล่านี้ ivnolves การคัดลอกและการดำเนินการอื่น ๆ (ซึ่งแยกไฟล์ gid ไม่เปลี่ยนแปลง)

คำตอบ:


9

รายการควบคุมการเข้าถึง

คำตอบที่ตรงเป็นรายการควบคุมการเข้าถึง (ACL) ใช่คุณสามารถหาตัวอย่างตัวอย่างได้ แต่มันก็ใช้ได้ดีในทางปฏิบัติ (ต่างจากการเขียนแบบกลุ่มซึ่งต้องการให้ผู้ใช้คิดตลอดเวลา) สิ่งที่พวกเขาต้องการคือผู้ดูแลระบบ (root) กำหนดกลุ่มหากคุณต้องการให้ไฟล์ถูกแชร์โดยกลุ่มที่มีชื่อเท่านั้น (รูทสามารถเลือกที่จะมอบสิทธิ์ตัวอย่างเช่นโดยการยอมรับกลุ่มจาก LDAP แต่นั่นเป็นอีกเรื่องหนึ่ง)

คุณต้องการให้ผู้ใช้ที่เข้าร่วมมีจำนวน um ที่ 022 หากพวกเขาสร้างไฟล์ที่ไม่สามารถอ่านได้ทั่วโลกชุดรูปแบบนี้จะไม่ทำงาน แต่ถ้าพวกเขามี umask ที่ จำกัด ก็น่าจะเป็นเพราะพวกเขาไม่ต้องการแบ่งปันไฟล์อยู่ดี

เปิดใช้งาน ACL

Ubuntu ไม่เปิดใช้งาน ACL ตามค่าเริ่มต้นดังนั้นจึงมีข้อกำหนดของผู้ดูแลระบบเพียงครั้งเดียว แก้ไข/etc/fstabโดยใช้เครื่องมือแก้ไขที่คุณชื่นชอบและเปลี่ยนทุกบรรทัดที่สอดคล้องกับระบบไฟล์ที่คุณต้องการแชร์ไฟล์: เพิ่มaclในตัวเลือก (ตรวจสอบให้แน่ใจว่าจะไม่เปลี่ยนบรรทัดอื่นและไม่ใช้ตัวแก้ไขที่ตัดบรรทัดยาว) นี่คือตัวอย่างบรรทัดที่มีaclตัวเลือกเพิ่ม:

UUID=5e1ec7ed-face-dead-beef-c011ec7ab1e5  /  ext4  errors=remount-ro,acl  0 1

เพื่อให้ตัวเลือกมีผลในครั้งแรกให้ใช้คำสั่งดังต่อไปนี้ (สำหรับระบบไฟล์แต่ละระบบ):

sudo mount -o remount,acl /

ติดตั้งเครื่องมือ ACL จากaclแพ็คเกจ

การตั้งค่าไดเรกทอรีที่ใช้ร่วมกัน

ในการแบ่งปันไฟล์โดยกลุ่มmygroup:

setfacl -m group:mygroup:rwx /path/to/shared/root
setfacl -d -m group:mygroup:rwx /path/to/shared/root

หากผู้คนสร้างไฟล์และคัดลอกไปยังไดเรกทอรีที่ใช้ร่วมกันไฟล์จะสามารถอ่านได้ทั่วโลก (เพราะ umask) และทุกคนในกลุ่มสามารถเพิ่มและลบไฟล์ได้ (เพราะกลุ่มนั้นเป็นกลุ่มที่เขียนได้) ผู้คนไม่สามารถแก้ไขไฟล์ของกันและกันได้ แต่มันเป็นสิ่งที่ดีหรือคุณต้องเจอกับความขัดแย้งในการแก้ไขทันที

หากคุณไม่มีกลุ่ม unix คุณสามารถเพิ่มผู้ใช้ทีละคน:

setfacl -m user:bob:rwx /path/to/shared/root
setfacl -d -m user:bob:rwx /path/to/shared/root

การควบคุมเวอร์ชัน

หากคุณต้องการให้ผู้อื่นสามารถแก้ไขไฟล์ได้คุณต้องมีบางสิ่งในการป้องกันความขัดแย้ง นั่นคือการควบคุมเวอร์ชัน

คุณไม่จำเป็นต้องใช้สิ่งนี้เพื่อแชร์ที่เก็บ git คุณรู้ว่ามีวิธีแก้ปัญหาเช่น gitosis ดังนั้นใช้พวกเขา


ACL จะทำงานได้อย่างสมบูรณ์หากการสืบทอดอัตโนมัติไม่ถูกทำลายโดย cp (และ mv?) ที่จะทิ้ง (ละเว้น) acl เริ่มต้นที่ตั้งไว้ที่ระดับไดเรกทอรีเป้าหมาย
มีประโยชน์

2

เพียงทำสิ่งนี้:

mkdir /src/teamA
addgroup teamA
chgrp teamA /src/teamA
chmod g+rws /src/teamA

ตอนนี้ทุกคนในteamAกลุ่มสามารถทำทุกอย่างภายใน/src/teamA

ความมหัศจรรย์คือบิต sgid (set group id) ในไดเรกทอรี


AFAIK มันใช้งานไม่ได้ดูโพสต์อัพเดท
jb

1

หากคุณต้องการให้ผู้ใช้สามารถเข้าถึงไฟล์ในโฟลเดอร์ที่ใช้ร่วมกัน (ตัวอย่างเช่นคนอื่นเข้าสู่ระบบเครื่องเดียวกันในเวลาที่ต่างกันและต้องการเข้าถึงไฟล์เดียวกัน) คุณสามารถใช้bindfsเพื่อสร้างไดเรกทอรีที่ใช้ร่วมกัน

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

คุณทำงานสั้น ๆ

sudo bindfs -o perms=0700,mirror-only=user1:user2:user3 /home/shared /home/shared

เพื่อให้ / home / shared พร้อมใช้งานกับ user1, user2 และ user3

คำแนะนำ

ดูBindfs-SharedDirectoryLocalUsers (เอกสาร Ubuntu)สำหรับคำแนะนำแบบเต็มรวมถึงการตั้งค่าอย่างถาวร (ทุกครั้งที่คุณเปิดเครื่องคอมพิวเตอร์) ฉันใช้สิ่งนี้ในเครื่องของตัวเองสำหรับไดเรกทอรีจำนวนหนึ่งซึ่งแต่ละแห่งมีกลุ่มการแชร์ที่แตกต่างกัน (มีโฟลเดอร์เดียวสำหรับทุกบัญชีอีกบัญชีหนึ่งทำงานบัญชีและอีกบัญชีเฉพาะสำหรับบัญชีส่วนบุคคล)

จากโพสต์:

bindfs เป็นระบบไฟล์ FUSE สำหรับติดตั้งไดเรกทอรีไปยังตำแหน่งอื่น (จุดเมานท์) พร้อมการตั้งค่าการอนุญาต อนุญาตให้คุณระบุความเป็นเจ้าของและการอนุญาตของไฟล์จากภายในจุดติดตั้ง

...

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

รายการควบคุมการเข้าถึง (ACL)

หมายเหตุในเอกสารประกอบ:

หากคุณต้องการตั้งค่าสิทธิ์ที่สูงขึ้นสำหรับผู้ใช้ที่แตกต่างกันและ / หรือกลุ่มพยายามเข้าถึงตัวควบคุมรายการ

ดูคำตอบของ Gillesสำหรับรายละเอียดเพิ่มเติม


หากคุณมีปัญหาในการเพิ่ม bindfs บน oneiric คุณสามารถรับแพ็คเกจที่ผู้ใช้สร้างขึ้นได้ที่นี่bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone

-3

คุณสามารถรวมวิธีการแก้ปัญหาของ shellholic เข้ากับงาน cron ที่อัพเดท gid สำหรับไฟล์ทั้งหมดในโฟลเดอร์นั้นทุก ๆ 15 วินาทีหรือคล้ายกัน

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