На самом деле очень легко монтировать более или менее все, что вы хотите, как обычный пользователь, без привилегий 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 без проблем.