Как скопировать в отформатированное изображение без полномочий пользователя root?

Массивы в Bash основаны на нуле. Они просто. Тем не менее, если Вы знаете, что массив всегда будет индексированным числами, запускающимися от 1, просто добавьте +1 к результату. Добавьте второй аргумент функции, которая скажет его, какое число начать с или добавить к результату, и добавляют разумное значение по умолчанию для случаев, где второй аргумент отсутствует. Или цикл по индексам как mr.spuratic предлагает.

3
17.08.2014, 04:08
2 ответа

Среди прочего, можно блокировать / перекрывать структуры файловой системы с помощью монтирования, поэтому вам обычно не разрешается монтировать что-либо где-либо без прав суперпользователя. В тех случаях, когда это делается (или кажется, что это делается), обычно задействован помощник монтирования, который запускается от имени пользователя root (например, fusermount, udisks, ...).

Если по какой-то причине использование помощника монтирования не является вариантом, «широко поддерживаемый способ копирования файлов в форматированный образ» - это использовать mkisofs , который создает образ, содержащий ваши файлы, а не корень вовлечены где угодно.

Было бы вполне возможно реализовать то, что mkisofs (и многое другое), в программе пользовательского пространства, но поскольку у большинства людей нет проблем с монтированием, я не уверен, существует ли такая программа для большинство файловых систем.

Для ext * существует debugfs , который частично выполняет его.

$ echo Hello World > hello.txt
$ truncate -s 100M foobar
$ /sbin/mkfs.ext4 foobar
$ /sbin/debugfs -w foobar
debugfs 1.42.11 (09-Jul-2014)
debugfs:  ls
2  (12) .    2  (12) ..    11  (20) lost+found
debugfs:  mkdir hey
debugfs:  mkdir what
debugfs:  mkdir up
debugfs:  ls
2  (12) .    2  (12) ..    11  (20) lost+found    12  (12) hey   
 13  (12) what    14  (956) up
debugfs:  write hello.txt hello.txt
Allocated inode: 15
debugfs:  cat hello.txt
Hello World

Так что, похоже, это работает. Автоматизация возможна (опция -f cmdfile ), но звучит как домашнее задание.

1
27.01.2020, 21:31

Монтирование файловых систем по умолчанию зарезервировано для root, потому что многие файловые системы позволяют пользователю получать привилегии, если они управляют образом диска (например, создавая файлы setuid).

Ищите реализацию файловой системы FUSE , которая поддерживает файловую систему в вашем образе. Драйверы файловой системы FUSE запускаются в пространстве пользователя без каких-либо привилегий, в отличие от драйверов файловой системы ядра. К сожалению, не все файловые системы имеют реализации FUSE; в частности, я не знаю ни одной реализации ext4 FUSE для чтения и записи.

Путь наименьшего сопротивления часто заключается в доступе к образу файловой системы через виртуальную машину.

0
27.01.2020, 21:31

Теги

Похожие вопросы