Thực sự rất dễ dàng để gắn kết nhiều hơn hoặc ít hơn bất cứ thứ gì bạn muốn như một người dùng bình thường mà không có quyền root, miễn là mục đúng đã được tạo /etc/fstab
.
Tất nhiên, sửa đổi để /etc/fstab
yêu cầu quyền root. Nhưng một mục duy nhất có thể được sử dụng với tính linh hoạt để (u) gắn nhiều tệp khác nhau trên các điểm gắn khác nhau mà không cần chỉnh sửa thêm /etc/fstab
.
Dưới đây là hai đoạn script Bash rất ngắn (5 dòng + bình luận) sẽ thực hiện công việc:
để gắn
#!/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.
và để tháo dỡ
#!/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 :-)
Thư mục /tmp/UFS/
được tạo để cô lập các liên kết và tránh xung đột. Nhưng các liên kết tượng trưng có thể ở bất cứ đâu trong không gian người dùng, miễn là chúng ở cùng một nơi (cùng một đường dẫn). Các /etc/fstab
mục không bao giờ thay đổi.
CẢNH BÁO VITAL:
Gắn kết bị hạn chế vì lý do bảo mật tốt. Làm cho nó linh hoạt hơn có thể mở ra cánh cửa cho phần mềm độc hại. Tôi không phải là chuyên gia bảo mật và tôi khuyên bạn nên mở cửa không quá yêu cầu hoàn toàn ... sử dụng các tùy chọn để hạn chế những gì có thể được thực hiện với các hệ thống tệp có thể được gắn kết. Nếu một người đóng góp có kiến thức có thể bình luận thêm về các vấn đề bảo mật, nó có thể hữu ích.
Nhiều tùy chọn có sẵn để hạn chế việc sử dụng các hệ thống tệp được gắn kết, chẳng hạn như noexec
ngăn chặn việc thực thi nhị phân hoặc nosuid
do đó góp phần bảo mật. Trên thực tế, các tùy chọn này được thêm vào dưới dạng tùy chọn mặc định khi các tùy chọn user
hoặc users
được sử dụng, đó là điều cần thiết trong trường hợp chúng tôi làm dưới đây. Hãy suy nghĩ hai lần trước khi bạn ghi đè những mặc định này. http://en.wikipedia.org/wiki/Fstab
Các tùy chọn khác có thể được thêm vào để bảo vệ thêm. Ví dụ: tùy chọn owner
trong /etc/fstab
mục nhập sẽ cho phép người dùng chỉ xử lý các tệp hoặc thiết bị họ sở hữu. Xem man mount
để biết danh sách các tùy chọn: http://linux.die.net/man/8/mount .
Việc sử dụng /etc/fstab
mục này cũng có thể bị hạn chế thông qua quyền sở hữu user.group của thư mục (hoặc thư mục) có chứa các liên kết tượng trưng.
Giải trình
Lời giải thích này được viết trước khi tôi nhận ra rằng tôi có thể đơn giản hóa mọi thứ với hai kịch bản ở trên. Tôi đã không nghĩ về chúng ngay lập tức một phần bởi vì tôi có sẵn một vấn đề phức tạp hơn một chút mà chúng không giải quyết được nếu không có thêm máy móc. Do đó, lời giải thích của tôi có thể phức tạp hơn một chút so với bình thường, nhưng tôi không đủ can đảm để viết lại tất cả từ đầu.
Ý tưởng cơ bản là tạo các mục trong /etc/fstab
đó bao gồm tùy chọn user
hoặc users
để người dùng có thể yêu cầu mount
thực hiện việc gắn kết được chỉ định trong mục nhập đó bằng cách đưa ra làm đối số cho tệp được gắn hoặc điểm gắn kết để sử dụng (nhưng không phải cả trong trường hợp của tôi) .
Bạn cũng cần một mục thích hợp để umount
(đó là một vấn đề hơi khác - xem bên dưới). Tùy chọn user
này thường tốt hơn users
vì nó giới hạn quyền đối umount
với người dùng đã gắn hệ thống tệp, trong khi users
sẽ cho phép tất cả. Thật không may, tùy chọn user
không phải lúc nào cũng hoạt động và có thể đòi hỏi một số bước khác để thực hiện. Điều này được thảo luận trong Tùy chọn "người dùng" làm việc cho mount, không phải cho umount .
Đầu tiên bạn thêm vào /etc/fstab
một mục, chẳng hạn như:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
và sử dụng /tmp/UFS/drive
như một liên kết tượng trưng (hoặc liên kết tượng trưng) đến bất kỳ thiết bị hoặc tệp nào bạn muốn gắn kết, giả sử một tệp có chứa hình ảnh của hệ thống tệp ISO /home/johndoe/john-image-file.iso
.
Bạn cũng xác định /tmp/UFS/mountpoint
là một liên kết tượng trưng đến điểm gắn kết mà bạn muốn sử dụng /mnt/iso
.
Sau đó, bạn có thể gắn kết john-image-file.iso
với lệnh:
$ mount /tmp/UFS/drive
Điều này là đủ trên Mageia Linux của tôi, vì việc sử dụng các thiết bị vòng lặp hiện đã được thực hiện ẩn và không còn yêu cầu sử dụng -o loop
rõ ràng. Tôi không biết ngày hôm nay như thế nào. Xem
Khi lắp, khi nào tôi nên sử dụng thiết bị lặp?
Gắn kết này xuất hiện trong bảng và lệnh:
$ 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
Hoạt động gắn có thể hoạt động cho bất kỳ tệp hoặc ổ đĩa nào và chỉ yêu cầu tạo một liên kết tượng trưng từ /tmp/UFS/drive
tệp đó hoặc đến thiết bị cho ổ đĩa. Tất nhiên, một tên và địa điểm khác có thể được chọn cho liên kết tượng trưng, miễn là nó không bao giờ thay đổi.
Việc loại bỏ các tập tin dựa trên cùng một cách sử dụng các liên kết tượng trưng thích hợp. Trong trường hợp một thiết bị bình thường tương ứng với một số ổ đĩa harware, bạn chỉ cần sử dụng các liên kết tương tự.
Tuy nhiên, các tệp chứa hình ảnh của hệ thống tệp được gắn thông qua một loại thiết bị đặc biệt gọi là thiết bị lặp, được phân bổ tự động khi bạn gắn tệp.
Để tháo gỡ tệp, bạn cần tham khảo thiết bị vòng lặp, không phải tệp. Do đó, bạn cần /etc/fstab
có một mục khớp với cả thiết bị lặp được sử dụng tại /etc/mtab
đây /dev/loop0
và điểm gắn kết ở đây
/mnt/iso
.
Bạn không thể tạo trước một mục như vậy vì thiết bị lặp có thể thay đổi, vì chúng được phân bổ động. Lưu ý rằng cũng có thể sử dụng một thiết bị vòng lặp cố định, nhưng nó bất tiện theo những cách khác. Xem
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-THER-user/ ( blog này thực sự đã truyền cảm hứng cho câu trả lời ở đây ).
Tuy nhiên, bạn có thể tìm thấy tên của thiết bị lặp, ở đây /dev/loop0
, bằng cách hỏi hệ thống, giống như chúng tôi đã làm ở trên theo nhiều cách khác nhau. Sau đó, /etc/fstab
mục tiêu chuẩn của chúng tôi có thể được thực hiện để trỏ đến thiết bị vòng lặp bên phải thông qua liên kết tượng trưng /tmp/UFS/drive
và đến điểm gắn kết như đã thực hiện trước đó /tmp/UFS/mountpoint
. Điều này được thực hiện, tệp có thể được gỡ bỏ bằng bất kỳ lệnh nào sau đây (miễn là không có sự mơ hồ với /etc/mtab
, đây là một vấn đề khác):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Vì hai liên kết chỉ cần thiết khi các lệnh được ban hành, chúng có thể được thay đổi linh hoạt. Vì vậy, /etc/fstab
mục nhập duy nhất của chúng tôi cho phép gắn bất kỳ số lượng tệp nào và sắp xếp chúng theo bất kỳ thứ tự nào mà không có quyền root.
Tài liệu tham khảo khác:
mount
nhị phân của bạn không yêu cầu quyền SUID thì bạn sẽ có thể sử dụng fakeroot mà không gặp vấn đề gì.