Як змонтувати файл зображення без дозволу root?


41

Чи можу я монтувати зображення файлової системи без дозволу root? Зазвичай я б робив:

mount -o loop DISK_IMAGE FOLDER

Не використовуючи sudo і не встановлюючи костюм mount, чи є підходящий спосіб зробити це?

Я знаю, що можу використовуватись fusermountіз деякими ISO-образами, але це досить обмежено, навіть для ISO-образів деякі мої зображення не можуть бути змонтовані, але mountзавжди працюють.


1
Якщо ваш mountдвійковий файл не вимагає дозволів SUID, ви можете без проблем використовувати фальшивку .
sakisk

5
@faif fakerootтут не допоможе: він робить вигляд, що право власності на файл інше, але воно не може дати вам дозволів, яких у вас немає, наприклад, дзвонити, mount(2)коли ви не отримуєте root.
Жил "ТАК - перестань бути злим"

@faif Mount абсолютно вимагає кореневих прав. Потенційні наслідки в іншому випадку були б досить згубними.
Шадур

Відповіді:


25

Ви не можете встановити нічого, що адміністратор якось не дав вам дозволу на встановлення. Лише корінь може викликати mountсистемний виклик. Причиною цього є те, що існує багато способів ескалації привілеїв за допомогою монтажу, наприклад, встановлення чогось над системним розташуванням, надання файлів, здається, належать іншому користувачеві та використання програми, яка покладається на право власності на файли, створення встановлених файлів або використання помилок. у драйверах файлових систем.

mountКоманда УИП корінь. Але це дозволяє лише монтувати речі, про які йдеться fstab.

fusermountКоманда УИП корінь. Це дозволяє лише монтувати речі через драйвер FUSE і обмежує ваші можливості надавати файли з довільним володінням або дозволами таким чином (у більшості налаштувань усі файли на кріпленні FUSE належать вам).

Ваша найкраща ставка - знайти файльну систему FUSE, яка здатна прочитати зображення вашого диска. Для зображень ISO 9660 спробуйте як підтримку fuseiso, так і підтримку UMfuse ISO 9660 (доступна в fuseiso9660пакеті Debian як пакет ).


+1 для пояснення того, що sudo(хоча у нього встановлений біт SUID), можна встановлювати fstabзаписи лише однієї . З цього випливає, що (a) біт SUID має сенс, оскільки звичайний користувач може монтувати fstabзаписи (і їм дозволено виконувати mountsyscall) та (b), що mountобмеження утиліти дозволяють встановлювати fstabзаписи лише не- користувачі root.
Девід

Якщо ви працюєте із зображеннями дискети, ви також можете використовувати mtools для запису даних на зображення. Дивіться: stackoverflow.com/questions/11202706/…
Giles Bathgate

@David, чи змінилося це зараз? Єдині записи, які я маю, fstab- це рутові файли та завантаження. Для монтажу USB-накопичувачів я дивлюся lsblkі mountвідповідно. У мене не було проблем з цим.
sherrellbc

16

Debian Wiki показує кілька способів зробити це. Ось один із способів. (Для цього потрібен udisks2пакет.)

Спочатку

$ udisksctl loop-setup -f $PATH_TO_IMAGE
Mapped file $PATH_TO_IMAGE as /dev/loop0.

/dev/loop0 буде використовуватися для наступного

Але якби udisksctl loop-setupкоманда повернулася /dev/loop1, то /dev/loop1вона була б використана для наступного.

Можливо, вам доведеться запустити, якщо пристрій циклу (раніше створений) не монтується автоматично:

$ udisksctl mount -b /dev/loop0
Mounted /dev/loop0 at /media/$USER/$IMAGE_NAME

Ви можете переглянути файли на диску

$ ls -l /media/$USER/$IMAGE_NAME/

Ви можете його відключити, коли закінчите

$ udisksctl unmount -b /dev/loop0
Unmounted /dev/loop0.

а при необхідності:

$ udisksctl loop-delete -b /dev/loop0

1
Удевіль був більш зручним варіантом
Анвар

Він працював на Ubuntu 16.04, але як? Здається, використовують петлеві пристрої, які я б очікував бути sudoлише ними. сетсид або споріднені шенагігани ?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 Я не впевнений. Вихідний код інструменту тут . Здається, DBus використовує для спілкування з демоном, але я не знаю, що DBus або Glib так добре.
Нік Оделл

1
Зауважте, що -rопція udisksctl loop-setupозначає лише для читання, яку ОП не просила, тому відміньте це, щоб отримати змогу записувати.
Пелле Нілссон

15

Ви можете використовувати гостьовий модуль FUSE для монтажу декількох типів зображень на диску. Він є частиною екосистеми guestfs і не потребує кореневих дозволів.

Перегляньте сторінку чоловіка, щоб отримати детальнішу інформацію.

Приклади

1. Для типового гостя Windows, який має основну файлову систему на першому розділі:

guestmount -a windows.img -m /dev/sda1 --ro /mnt

2. Для типового гостя Linux, який має файлову систему / boot на першому розділі, і кореневої файлової системи на логічному томі:

guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt

1
Прикро, що для запуску гостьового рахунку на Ubuntu зараз потрібен певний кореневий доступ для читання зображень ядра: bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
Clément

@ Clément Я хотів би зрозуміти, чому libguestfs потрібен образ ядра, щоб виконувати свою роботу ...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功, тому що libguestfs уникає необхідності використання root, запустивши мінімальну систему Linux всередині віртуальної машини qemu (будь-хто може запустити віртуальну машину qemu, не будучи root). Для завантаження цієї машини йому потрібно деяке ядро ​​та initrd.
Джош

3

Можливим способом було б додати /etc/fstabзапис для ISO за допомогою параметра "user", наприклад

/test.iso /mnt/iso auto defaults,user 0 1

Але зазвичай вам потрібен кореневий доступ для редагування цього файлу, тому це не дуже корисно.


2

Насправді дуже просто монтувати більш-менш все, що ви хочете, як звичайний користувач без привілеїв 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.

Інші посилання:


Коли записи fstab вказують на посилання на символи, чи не можна їх використовувати для встановлення нічого без кореня, просто створюючи посилання? Побічно, чи не просто mountкоманда підняття для кожного звичайного користувача? І тому проблеми безпеки, пов'язані з цим? Виправте мене, якщо я помиляюся.
Бхарат G

І останні версії дистрибутивів GNU / Linux (скажімо, debian jessie) не забезпечуватимуть входу в систему, коли він виявить недійсний запис у fstab. Він повертається до сеансу входу в консоль, якщо fstab deviceабо mountpointрозділ не вказує на дійсну запис. Користувач повинен увійти через сеанс консолі та ввести, startxщоб явно запустити диспетчер дисплеїв.
Бхарат G

0

Пакет libguestfs-tools-c має команду guestmount так

mkdir dvd    
guestmount -a image.iso -r -i dvd 

df покаже image.iso

df

щоб прорахувати, ми маємо:

guestunmount dvd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.