На самом деле очень легко монтировать более или менее все, что вы хотите, как обычный пользователь, без привилегий root, при условии, что в нем была создана правильная запись /etc/fstab.
Конечно, для модификации /etc/fstabтребуются права суперпользователя. Но одну запись можно использовать с большой гибкостью, чтобы (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не всегда работает и может повлечь за собой некоторые другие шаги для работы. Это обсуждается в опции «пользователь» для монтирования, а не для монтирования .
Сначала вы добавляете к /etc/fstabзаписи, такой как:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
и использовать /tmp/UFS/driveв качестве символической ссылки (или символической ссылки) любое устройство или файл, который вы хотите смонтировать, например файл, содержащий образ файловой системы 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, вы можете использовать fakeroot без проблем.