Как создать файловую систему как пользователь без полномочий root?

в Федоре находится в /var/log/audit/audit.log

.
7
17.10.2018, 13:24
4 ответа

sudoestá diseñado exactamente para este tipo de problema, debe otorgar permiso al usuario para ejecutar el comando de montaje en el archivo /etc/sudoers

luego, en su secuencia de comandos, puede anteponer el comando de montaje con sudo:

sudo mount -o loop $IMG $MNT

Puede configurar la regla para que no requiera contraseña

1
27.01.2020, 20:16

Должен ли он быть ext4?

Если возможны альтернативы, вы можете попытать счастья с

  • mksquashfs, создает сжатую файловую систему -только для чтения из пользовательского пространства
  • mkisofs создает файловую систему -только для чтения, обычно используемую для оптических носителей
  • cpio, tar,... архивы, которые необходимо распаковать в первую очередь

В противном случае, чтобы воплотить ext4в пользовательском пространстве реальность, необходимо

  • сойти с умаdebugfs
  • загрузите ядро ​​в виртуальной машине пользователя
  • Найдите другую чистую утилиту пользовательского пространства, которая знает, как обрабатывать изображения ext4

Что касается debugfs, в большинстве файловых систем даже нет таких утилит, вам повезло.

Сеанс пользователя:

$ truncate -s 64M app.ext4
$ /sbin/mkfs.ext4 app.ext4
Creating filesystem with 65536 1k blocks and 16384 inodes
$ /sbin/debugfs -w app.ext4
debugfs:  mkdir this_is_crazy
debugfs:  cd this_is_crazy
debugfs:  write /proc/config.gz config.gz
Allocated inode: 13

Корневой сеанс:(просто для проверки, работает ли он)

# mount -o loop app.ext4 loop/
# cd loop/
# ls
lost+found  this_is_crazy
# md5sum this_is_crazy/config.gz /proc/config.gz 
7b414ad844272a9e3c31931037fe0495  this_is_crazy/config.gz
7b414ad844272a9e3c31931037fe0495  /proc/config.gz

Итак, это возможно, и это работает.

Тем не менее, наиболее практичным вариантом все равно должно быть использование root каким-либо образом.

5
27.01.2020, 20:16

Вы можете добавить его в fstab с опцией user, чтобы его мог монтировать пользователь.

/path/to/app.ext4 /mount/point ext4 loop,user,noauto 0 0

Затем ваш пользователь может создать файл и просто запустить:

mount /mount/point
1
27.01.2020, 20:16

mke2fs -d минимальный исполняемый пример безsudo

mke2fsявляется частью пакета e2fsprogs. Он написан известным разработчиком файловой системы ядра Linux Теодором Цо, который работает в Google с 2018 года, а исходный код находится на kernel.org по адресу :https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs. Таким образом, этот репозиторий можно считать эталонной пользовательской реализацией файловой системы ext. операции:

#!/usr/bin/env bash
set -eu

root_dir=root
img_file=img.ext2

# Create a test directory to convert to ext2.
mkdir -p "$root_dir"
echo asdf > "${root_dir}/qwer"

# Create a 32M ext2 without sudo.
# If 32M is not enough for the contents of the directory,
# it will fail.
rm -f "$img_file"
mke2fs \
  -L '' \
  -N 0 \
  -O ^64bit \
  -d "$root_dir" \
  -m 5 \
  -r 1 \
  -t ext2 \
  "$img_file" \
  32M \
;

# Test the ext2 by mounting it with sudo.
# sudo is only used for testing.
mountpoint=mnt
mkdir -p "$mountpoint"
sudo mount "$img_file" "$mountpoint"
sudo ls -l "$mountpoint"
sudo cmp "${mountpoint}/qwer" "${root_dir}/qwer"
sudo umount "$mountpoint"

Восходящий поток GitHub .

Ключевым параметром является -d, который выбирает, какой каталог использовать для образа, и это относительно новое дополнение к v1.43 в фиксации 0d4deba22e2aa95ad958b44972dc933fd0ebbc59

Поэтому он работает на Ubuntu 18.04 из коробки, в которой есть e2fsprogs 1.44.1 -1, но не на Ubuntu 16.04, которая имеет версию 1.42.13.

Однако мы можем сделать так же, как Buildroot, и легко скомпилировать его из исходного кода в Ubuntu 16.04 с:

git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
cd e2fsprogs
git checkout v1.44.4
./configure
make -j`nproc`
./misc/mke2fs -h

Если mke2fsне работает с:

__populate_fs: Operation not supported while setting xattrs for "qwer"
mke2fs: Operation not supported while populating file system

при добавлении опции:

-E no_copy_xattrs

Это требуется, например, когда корневой каталог находится в NFS или tmpfsвместо extX, поскольку эти файловые системы не имеют расширенных свойств .

mke2fsчасто ссылается на mkfs.extX, а man mke2fsговорит, что если вы используете call if с такой символической ссылкой, то подразумевается -t.

Как я это обнаружил и как решить будущие проблемы:Buildroot генерирует образы ext2 без sudo , как показано здесь , поэтому я просто запустил сборку с V=1и извлек команды из части создания изображения, которая находится в самом конце. Старый добрый копипаст меня никогда не подводил.

TODO :опишите, как решить следующие проблемы:

Несколько разделов в одном файле образа

См.:https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819

9
27.01.2020, 20:16

Теги

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