ฉันสามารถโอนการอนุญาตของผู้ใช้ข้ามคอมพิวเตอร์สำหรับฮาร์ดไดรฟ์ภายนอก ext4 ได้หรือไม่


16

ฉันมีดิสก์ไดรฟ์ USB 3 ภายนอก (ความจุ 2TB) ที่น่าจะถูกย้ายจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง ดิสก์มีตารางพาร์ติชัน GUID และพาร์ติชัน ext4 ฉันไม่สามารถเขียนลงดิสก์ได้เว้นแต่จะยกระดับกระบวนการ ( sudo)

ณ ตอนนี้ฉันกำลังคิดว่าจะลองอย่างใดอย่างหนึ่งหรือทั้งสองอย่างต่อไปนี้และต้องการทราบข้อเสียของแต่ละข้อ -

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

ถ้าฉันให้สิทธิ์ 777 และ user1 (UID: 1005) เขียนลงไปและฉันก็ย้ายดิสก์ไปยังคอมพิวเตอร์เครื่องอื่นโดยที่ user7 เป็น UID: 1005 จะเกิดอะไรขึ้น user7 กลายเป็นเจ้าของไฟล์ในคอมพิวเตอร์เครื่องนั้นหรือไม่ ดูเหมือนว่าฉันจะต้องเรียกใช้chown -R nobody:nogroup /mnt/externalDriveบนดิสก์เป็นระยะ

มีสิ่งใดที่ฉันกำลังพิจารณาถึงการปฏิบัติที่ไม่ดีอย่างเห็นได้ชัดหรือไม่? ดิสก์ส่วนใหญ่จะมีวิดีโอเพลงและรูปภาพที่ไม่จำเป็นต้องได้รับการปกป้องเช่นเดียวกับข้อมูลทางการเงิน


ฉันไม่แน่ใจว่าฉันทำตามคุณ คุณลองตั้งค่าการอนุญาตในไดรฟ์ภายนอกหรือไม่
Ramesh

1
ใช่. นั่นเป็นสิ่งที่ดีหรือไม่?
ลอร์ดโลห์

คำตอบ:


19

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

  • มี UID เดียวกันสำหรับบัญชีของคุณในทุกเครื่องที่คุณใช้ไดรฟ์ภายนอก (จริง ๆ แล้วไม่สามารถทำได้เพราะส่วนใหญ่อาจไม่ใช่เครื่องทั้งหมดที่อยู่ภายใต้การควบคุมของคุณ)
  • ใช้ระบบไฟล์โดยไม่ทราบว่าเจ้าของ / กลุ่ม conecpt (FAT หรือ NTFS มาถึงใจ แต่… aaah, no)

แนวทางที่มีประสิทธิภาพมากที่สุดจะกลับมาสู่การปฏิบัติทั่วไป ส่วนใหญ่ (อย่างน้อย) ระบบ Linux ที่มีอยู่บางกลุ่มที่มีมักจะ GIDs ทั่วไป ตัวอย่างเช่นจะusersมี GID 100บน distros Linux ส่วนใหญ่ หากคุณสามารถจัดการให้มีบัญชีผู้ใช้ของคุณตามลำดับในกลุ่มนี้คุณสามารถทำได้

  1. ทำไฟล์และไดเรกทอรีทั้งหมดในไดรฟ์ของคุณเป็นเจ้าของโดยกลุ่มนี้
  2. อย่างใดจัดการเพื่อให้มีสิทธิ์กลุ่มที่เหมาะสมในไฟล์และไดเรกทอรีเหล่านั้น
  3. อย่างใดจัดการที่จะมีไฟล์ใหม่ที่สร้างขึ้นด้วยความเคารพความเป็นเจ้าของกลุ่มที่เหมาะสม สิทธิ์

จุดแรกและจุดที่สองทำได้ง่าย ( chown, chmod) จุดที่สามได้ยากกว่า

ส่วน "การเป็นเจ้าของกลุ่ม" นั้นค่อนข้างง่าย: คุณสามารถตั้งค่าบิต SGID ในไดเรกทอรีทั้งหมดในไดรฟ์ SGID บิตที่นำไปใช้กับไดเรกทอรีบอกเคอร์เนลให้ทำงานในลักษณะ BSDish: BSD ทำให้ทุกไฟล์ / ไดเรกทอรีที่สร้างขึ้นภายใต้ไดเรกทอรีเฉพาะกลุ่มที่ไม่ใช่เจ้าของโดยกลุ่มหลักของกระบวนการสร้างไฟล์ / ไดเรกทอรี (เช่น Linux) แต่ โดยเจ้าของ parent-directory

บิตการอนุญาตค่อนข้างยาก สิทธิ์ของไฟล์ / ไดเรกทอรีที่สร้างขึ้นใหม่นั้น (ซึ่งอยู่ในกลุ่มอื่น ๆ ) ที่ได้รับอิทธิพลจากumask, บิตมาสก์จะบอกว่าบิตใดที่ไม่ควรตั้งค่าหากไม่ได้ระบุไว้อย่างชัดเจน umaskค่าทั่วไปตัวอย่างเช่น022หมายความว่าไม่ควรตั้งค่า write-bits สำหรับ»กลุ่ม«และ»อื่น ๆ « คุณสามารถเปลี่ยนumaskเป็นได้002โดยบอกว่าคุณไม่ต้องการให้ลบสิทธิ์การเขียนสำหรับกลุ่ม แต่ข้อเสียคือคุณไม่สามารถตั้งค่าไดเรกทอรีตามค่านี้และโดยปกติคุณไม่ต้องการให้มีสิทธิ์เขียน กลุ่มหลักของคุณตั้งค่าไว้สำหรับทุกไฟล์ที่คุณสร้าง

สิ่งนี้สามารถแก้ไขได้โดยใช้ ACL: ใน ACL คุณสามารถตั้งค่าmaskและdefaultชุดการอนุญาตซึ่งใช้กับไฟล์และไดเรกทอรีทั้งหมดที่สร้างขึ้นภายในไดเรกทอรีด้วยชุด ACL นี้ ดังนั้นทางออกหนึ่งที่เป็นไปได้สำหรับปัญหาของคุณคือ

  • ตรวจสอบให้แน่ใจว่าคุณเป็นสมาชิกของกลุ่มทั่วไปในทุกระบบที่คุณต้องการใช้ไดรฟ์ภายนอก
  • ทำไฟล์และไดเรกทอรีทั้งหมดในไดรฟ์ของคุณเป็นเจ้าของกลุ่มนี้และตั้งค่าบิต SGID ในทุกไดเรกทอรี
  • เปลี่ยน ACL ของไดเรกทอรีทั้งหมดเพื่อรวมมาสก์และสิทธิ์เริ่มต้นที่บอกเคอร์เนลให้สร้างทุกไฟล์ / ไดเรกทอรีใหม่ด้วยสิทธิ์การเขียนที่ตั้งค่าสำหรับกลุ่ม

ดูsetfacl(1)และacl(5)สำหรับรายละเอียดเพิ่มเติม


1
มีแพทช์ลอยอยู่รอบ ๆ สำหรับการแมปและ gid ของเขาใน ext4, spinics.net/lists/linux-fsdevel/msg57240.htmlแต่ฉันไม่คิดว่ามันจะผ่าน ...
Rmano

11

มีอีกคำถามที่คล้ายกันและแนะนำ bindfs ที่นั่น:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

ผู้ใช้ OSX แนะนำnoownersตัวเลือกการเมาท์ที่อธิบายดังนี้:

ละเว้นฟิลด์ความเป็นเจ้าของสำหรับโวลุ่มทั้งหมด สิ่งนี้ทำให้วัตถุทั้งหมดปรากฏเป็นเจ้าของโดย ID ผู้ใช้ 99 และกลุ่ม ID 99 ID ผู้ใช้ 99 ถูกตีความว่าเป็น ID ผู้ใช้ที่มีประสิทธิภาพปัจจุบันในขณะที่ใช้ ID กลุ่ม 99 โดยตรงและแปลเป็น `` unknown ''


bindfs ค่อนข้างช้า อาจเป็นเพราะมันเป็นระบบไฟล์ของ FUSE
Navin

4

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

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

น่าเสียดายที่ฉันไม่คิดว่าจะมีวิธีปิดการใช้งานการตรวจสอบสิทธิ์ใน ext4 ดูตัวอย่างเช่นเป็นไปได้ไหมที่จะปิดการอนุญาตการใช้ไฟล์ในระบบไฟล์ ext3 หรือ ext4


2

Andreas Wieseกล่าวว่าหากคุณมีรหัสกลุ่มทั่วไปในทุกครอบครัวคุณอาจแก้ไขปัญหาของคุณด้วยsetgidบิตและ ACL

ฉันถามคำถามรหัสกลุ่มที่กำหนดไว้ล่วงหน้าใน Linux distros หรือไม่

หลังจากการวิจัยของตัวเองพบว่ากลุ่มดังกล่าวมีอยู่ใน distros ที่ถูกสัมผัสทั้งหมด: sysid ของกลุ่มที่ใช้ร่วมกัน3บน Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, Solaris

ด้วยสิ่งนี้:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

และรสชาติของสิ่งนี้:

$ sudo adduser user sys

คุณuserสามารถอ่าน / เขียนไฟล์ใด ๆ /dirบน

งานส่วนใหญ่อาจจะทำsetgidบิต umaskแต่โชคร้ายที่คุณมักจะมีการควบคุมน้อยบน ดังนั้น ACL จะถูกใช้เพื่อให้โซลูชันที่สมบูรณ์

ดูสิ่งนี้ด้วย:

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