จริงๆแล้วมันเป็นเรื่องง่ายมากที่จะเมานต์มากกว่าหรือน้อยกว่าสิ่งที่คุณต้องการในฐานะผู้ใช้ปกติโดยไม่มีสิทธิ์รูทหากมีการสร้างรายการที่ถูก/etc/fstab
ต้อง
แน่นอนว่าการแก้ไขเพื่อ/etc/fstab
ต้องการสิทธิ์พิเศษ แต่รายการเดียวสามารถนำมาใช้มีความยืดหยุ่นมากที่จะ (U) /etc/fstab
ติดตั้งไฟล์ที่แตกต่างกันจำนวนมากในที่แตกต่างกันจุดเมาโดยไม่ต้องแก้ไขเพิ่มเติมใด
ต่อไปนี้เป็นสองสั้นมาก (5 บรรทัด + ความคิดเห็น) สคริปต์ทุบตีที่จะทำงาน:
สำหรับการติดตั้ง
#!/bin/sh
# usage: usmount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to mount device $1 on mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
mount /tmp/UFS/drive || mount /tmp/UFS/mountpoint
# The last statement should be a bit more subtle
# Trying both is generally not useful.
และลงจากหลังม้า
#!/bin/sh
# usage: usumount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to umount device $1 from mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
umount /tmp/UFS/drive || umount /tmp/UFS/mountpoint
# One of the two umounts may fail because it is ambiguous
# Actually both could fail, with careless mounting organization :-)
ไดเรกทอรี/tmp/UFS/
ถูกสร้างขึ้นเพื่อแยกลิงก์และหลีกเลี่ยงการปะทะกัน แต่ symlink สามารถอยู่ที่ใดก็ได้ในพื้นที่ผู้ใช้ตราบใดที่พวกเขาอยู่ในสถานที่เดียวกัน (เส้นทางเดียวกัน) /etc/fstab
รายการไม่เคยเปลี่ยนแปลงอย่างใดอย่างหนึ่ง
คำเตือนสำคัญ: การ
ติดตั้งถูก จำกัด ด้วยเหตุผลด้านความปลอดภัยที่ดี การทำให้มีความยืดหยุ่นมากขึ้นอาจเปิดประตูสำหรับซอฟต์แวร์ที่เป็นอันตราย ฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัยและฉันขอแนะนำให้คุณเปิดประตูไม่เกินความจำเป็นอย่างแน่นอน ... โดยใช้ตัวเลือกเพื่อ จำกัด สิ่งที่สามารถทำได้กับระบบไฟล์ที่สามารถติดตั้งได้ หากผู้มีความรู้สามารถแสดงความคิดเห็นเพิ่มเติมเกี่ยวกับปัญหาด้านความปลอดภัยอาจเป็นประโยชน์
ตัวเลือกต่าง ๆ พร้อมใช้งานเพื่อ จำกัด การใช้ระบบไฟล์ที่ถูกเมาท์เช่นnoexec
ซึ่งป้องกันการเรียกใช้ไบนารีหรือnosuid
ดังนั้นจึงนำไปสู่ความปลอดภัย ที่จริงแล้วตัวเลือกเหล่านี้จะถูกเพิ่มเป็นตัวเลือกเริ่มต้นเมื่อมีการใช้ตัวเลือกuser
หรือusers
ซึ่งเป็นสิ่งจำเป็นในกรณีที่เราทำด้านล่าง คิดสองครั้งก่อนที่คุณจะแทนที่ค่าเริ่มต้นเหล่านี้ http://en.wikipedia.org/wiki/Fstab
สามารถเพิ่มตัวเลือกอื่น ๆ เพื่อการป้องกันเพิ่มเติม ตัวอย่างเช่นตัวเลือก owner
ใน /etc/fstab
รายการจะช่วยให้ผู้ใช้จัดการกับไฟล์หรืออุปกรณ์ที่พวกเขาเป็นเจ้าของเท่านั้น ดู man mount
รายชื่อตัวเลือก: http://linux.die.net/man/8/mount
การใช้งานของ/etc/fstab
รายการนี้สามารถถูก จำกัด ผ่านความเป็นเจ้าของ user.group ของไดเรกทอรี (หรือไดเรกทอรี) ที่มี symlink
คำอธิบาย
คำอธิบายนี้เขียนขึ้นก่อนที่ฉันจะรู้ว่าฉันสามารถทำให้สิ่งต่าง ๆ ง่ายขึ้นสำหรับสคริปต์ทั้งสองด้านบน ฉันไม่ได้คิดถึงพวกเขาทันทีเพราะฉันมีปัญหาที่ซับซ้อนกว่าเล็กน้อยซึ่งพวกเขาไม่สามารถแก้ปัญหาได้หากไม่มีเครื่องจักรพิเศษ ดังนั้นคำอธิบายของฉันอาจจะค่อนข้างซับซ้อนกว่าที่ควร แต่ฉันไม่มีความกล้าที่จะเขียนใหม่ทั้งหมดตั้งแต่ต้น
แนวคิดพื้นฐานคือการสร้างรายการใน/etc/fstab
ที่มีตัวเลือกuser
หรือusers
เพื่อให้ผู้ใช้สามารถขอmount
ให้ทำการติดตั้งที่ระบุในรายการนั้นโดยให้อาร์กิวเมนต์ไฟล์ที่จะติดตั้งหรือจุดเมานท์ที่จะใช้ (แต่ไม่ทั้งสองในexpérienceของฉัน) .
คุณต้องป้อนข้อมูลให้ถูกต้องด้วยumount
(ซึ่งเป็นปัญหาที่แตกต่างออกไปเล็กน้อย - ดูด้านล่าง) ตัวเลือกuser
มักจะดีกว่าusers
เนื่องจากมันจะ จำกัด การอนุญาตให้umount
กับผู้ใช้ที่เมานต์ระบบไฟล์ในขณะที่users
จะอนุญาตให้ทุกคน น่าเสียดายที่ตัวเลือกuser
นั้นใช้ไม่ได้เสมอไปและอาจนำไปสู่ขั้นตอนอื่น ๆ ที่ต้องใช้ในการทำงาน สิ่งนี้ถูกกล่าวถึงในตัวเลือก "ผู้ใช้" ใช้สำหรับเมาท์ไม่ใช่สำหรับการต่อเชื่อม
ก่อนอื่นคุณเพิ่มลงใน/etc/fstab
รายการเช่น:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
และการใช้/tmp/UFS/drive
เป็นสัญลักษณ์การเชื่อมโยง (หรือ symlink) /home/johndoe/john-image-file.iso
กับสิ่งที่อุปกรณ์หรือไฟล์ที่คุณต้องการที่จะติดพูดไฟล์ที่มีภาพของระบบไฟล์
นอกจากนี้คุณยังกำหนด/tmp/UFS/mountpoint
เป็น symlink /mnt/iso
ไปยังจุดที่คุณต้องการที่จะใช้ติดการพูด
จากนั้นคุณสามารถเมานท์john-image-file.iso
ด้วยคำสั่ง:
$ mount /tmp/UFS/drive
นี่เพียงพอสำหรับ Mageia Linux ของฉันเนื่องจากการใช้อุปกรณ์วนรอบได้ถูกสร้างขึ้นโดยปริยายและไม่จำเป็นต้องใช้-o loop
อย่างชัดเจนอีกต่อไป ฉันไม่ทราบว่าทั่วไปว่าวันนี้ ดู
เมื่อติดตั้งฉันควรใช้อุปกรณ์ลูปเมื่อใด
การติดตั้งนี้จะปรากฏในตารางและคำสั่ง:
$ df | tail -1
/dev/loop0 5,1G 5,1G 0 100% /mnt/iso
$ tail -1 /etc/mtab
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ mount | tail -1
/home/johndoe/john-image-file.iso on /mnt/iso type udf (ro,nosuid,nodev,noexec,relatime,utf8)
$ tail -1 /proc/mounts
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ tail -1 /proc/self/mountinfo
46 22 7:0 / /mnt/iso rw,nosuid,nodev,noexec,relatime - udf /dev/loop0 ro,utf8
$ tail -1 /proc/self/mountstats
device /dev/loop0 mounted on /mnt/iso with fstype udf
การดำเนินการติดตั้งสามารถทำงานกับไฟล์หรือไดรฟ์ใด ๆ และต้องการเพียงการสร้างลิงก์สัญลักษณ์จาก/tmp/UFS/drive
ไฟล์นั้นหรือไปยังอุปกรณ์สำหรับไดรฟ์ แน่นอนว่าสามารถเลือกชื่อและที่ตั้งอื่นสำหรับลิงก์สัญลักษณ์ตราบใดที่ไม่มีการเปลี่ยนแปลง
การแยกไฟล์อาศัยในลักษณะเดียวกันกับการใช้ลิงก์สัญลักษณ์อย่างเหมาะสม ในกรณีของอุปกรณ์ปกติที่สอดคล้องกับไดรฟ์ฮาร์แวร์คุณเพียงแค่ใช้ลิงก์เดียวกัน
อย่างไรก็ตามไฟล์ที่มีอิมเมจของระบบไฟล์จะถูกเมาท์ผ่านอุปกรณ์ชนิดพิเศษที่เรียกว่าอุปกรณ์ลูปซึ่งจะถูกจัดสรรโดยอัตโนมัติเมื่อคุณเมาท์ไฟล์
ในการยกเลิกการต่อเชื่อมไฟล์คุณต้องอ้างถึงอุปกรณ์ลูปไม่ใช่ไฟล์ ดังนั้นที่คุณต้องการใน/etc/fstab
รายการที่ตรงกับทั้งอุปกรณ์ห่วงที่ใช้ใน/etc/mtab
ที่นี่และจุดติดตั้งที่นี่/dev/loop0
/mnt/iso
คุณไม่สามารถสร้างรายการดังกล่าวล่วงหน้าเนื่องจากอุปกรณ์วนรอบอาจแตกต่างกันไปเนื่องจากมีการจัดสรรแบบไดนามิก โปรดทราบว่ามันเป็นไปได้ที่จะใช้อุปกรณ์วงคงที่ แต่ไม่สะดวกในวิธีอื่น ดู
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user// ( บล็อกนี้เป็นแรงบันดาลใจให้กับคำตอบจริงๆที่นี่ )
อย่างไรก็ตามคุณสามารถค้นหาชื่อของอุปกรณ์ลูปได้ที่นี่/dev/loop0
โดยขอให้ระบบเหมือนกับที่เราทำข้างต้นในหลายวิธี แล้วมาตรฐานของเรา/etc/fstab
รายการสามารถทำเพื่อชี้ไปที่อุปกรณ์ห่วงขวาผ่าน symlink และไปยังจุดที่ติดเหมือนที่ดำเนินการก่อนหน้านี้ด้วย/tmp/UFS/drive
/tmp/UFS/mountpoint
สิ่งนี้ทำไฟล์อาจถูก dismounted ด้วยคำสั่งใด ๆ ต่อไปนี้ (หากไม่มีความกำกวม/etc/mtab
ซึ่งเป็นปัญหาที่แตกต่างกัน):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
เนื่องจากจำเป็นต้องใช้ symlink สองชุดเมื่อมีการใช้คำสั่งเท่านั้นจึงสามารถเปลี่ยนได้แบบไดนามิก ดังนั้น/etc/fstab
รายการเดียวของเราอนุญาตให้ติดตั้งไฟล์จำนวนเท่าใดก็ได้และขยายในลำดับใด ๆ โดยไม่ต้องใช้สิทธิ์รูท
การอ้างอิงอื่น ๆ :
mount
ไบนารีของคุณไม่ต้องการการอนุญาตแบบ SUID คุณควรจะสามารถใช้fakeroot ได้โดยไม่มีปัญหา