Насправді дуже просто монтувати більш-менш все, що ви хочете, як звичайний користувач без привілеїв root, за умови, що в ньому створено правильний запис /etc/fstab
.
Звичайно, модифікації, щоб /etc/fstab
вимагати root права. Але один запис можна використовувати з великою гнучкістю, щоб (u) монтувати багато різних файлів на різних точках монтажу, без подальшого редагування /etc/fstab
.
Ось два дуже короткі (5 рядків + коментарі) сценарії Bash, які виконають цю роботу:
для кріплення
#!/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/
створений для ізоляції посилань та уникнення сутичок. Але символьні посилання можуть знаходитися в будь-якому місці в просторі користувача, якщо вони залишаються там же (той самий шлях). /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 на каталог (або каталоги), що містять символьні посилання.
Пояснення
Це пояснення було написане ще до того, як я зрозумів, що можу спростити речі двом вище сценаріям. Я не думав про них одразу частково, бо маю під рукою дещо складнішу проблему, яку вони не вирішують без зайвої техніки. Таким чином, моє пояснення може бути дещо складнішим, ніж слід, але я не маю сміливості переписати все з нуля.
Основна ідея полягає у створенні записів, /etc/fstab
які містять опцію user
або users
так, щоб користувач міг попросити mount
виконати монтаж, зазначений у цьому записі, надавши в якості аргументу файл, який потрібно монтувати, або точку монтажу, яку слід використовувати (але не обидва в моєму досвіді) .
Вам також потрібен належний запис umount
(це дещо інша проблема - див. Нижче). Цей параметр user
зазвичай кращий, ніж users
оскільки він обмежує дозвіл на umount
користувача, який встановив файлову систему, при users
цьому дозволить це усім. На жаль, варіант user
не завжди працює і може спричинити за собою деякі інші кроки, які потрібно зробити. Це обговорюється у варіанті "користувальницька" робота для монтування, а не для umount .
Спочатку ви додасте до /etc/fstab
таких записів, як:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
і використовувати /tmp/UFS/drive
як символічне посилання (або symlink) на будь-який пристрій чи файл, який ви хочете встановити, наприклад, файл, що містить зображення файлової системи ISO /home/johndoe/john-image-file.iso
.
Ви також визначаєте /tmp/UFS/mountpoint
як символьне посилання на точку монтажу, яку ви хочете використовувати, наприклад /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
запис можна зробити так, щоб вказати на пристрій правої петлі через симпосилання /tmp/UFS/drive
та на точку монтажу, як це було зроблено раніше /tmp/UFS/mountpoint
. Після цього файл може бути демонтований за допомогою будь-якої з наступних команд (за умови, що тут немає двозначності /etc/mtab
, що є іншою проблемою):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Оскільки два посилання потрібні лише тоді, коли команди видані, їх можна змінити динамічно. Таким чином, наш єдиний /etc/fstab
запис дозволяє монтувати будь-яку кількість файлів і редагувати їх у будь-якому порядку, без привілеїв root.
Інші посилання:
mount
двійковий файл не вимагає дозволів SUID, ви можете без проблем використовувати фальшивку .