Создание образов дисков как обычный пользователь

Я хочу смочь запустить следующий скрипт как обычный пользователь (как корень, он хорошо работает):

#!/bin/sh

dd if=/dev/zero bs=8192 count=128 of=disk.img
mkfs -t ext2 -F disk.img
losetup /dev/loop0 disk.img
mount /dev/loop0
echo aaaa > /mnt/aa
umount /mnt
losetup -d /dev/loop0

С этой целью, я

1) добавленная соответствующая запись в/etc/fstab (только затем обычный пользователь может работать, 'монтирует/dev/loop0'):

/dev/loop0  /mnt  ext2    defaults,loop,users,noauto      0 0

2) добавленный рассматриваемый пользователь к 'дисковой' группе (только затем пользователь может выполнить 'losetup'-/dev/loop0, принадлежит 'дисковой' группе),

Теперь, надо надеяться, последняя проблема состоит в том, что, когда я работаю как обычный пользователь, я получаю 'разрешение, отклоненное' ошибка от 'эха'. Неудивительный, потому что после монтирования, полномочия/mnt каталога изменяются на 755 root:root и очевидно обычный пользователь не может создать файлы внутри.

Как я должен создать свой 'disk.img' так, чтобы при монтировании это было записываемым самым пользователем, который создал его?

Править:

Предложенное 'pmount' решение, кажется, имеет ту же проблему. Этапы воспроизведения:

1) установите 'pmount' и добавьте '/dev/loop0' к/etc/pmount.allow

2) выполните следующее как обычного пользователя:

#!/bin/sh

dd if=/dev/zero bs=8192 count=128 of=disk.img
mkfs -t ext2 -F disk.img
losetup /dev/loop0 disk.img
pmount -w /dev/loop0
echo aaaa > /media/loop0/aa
pumount /media/loop0
losetup -d /dev/loop0

Вы все еще получите 'разрешение, отклоненное' от эха по той же причине, мы получили его прежде - полномочия/media/loop0/каталога 755:

[user@server test]$ ls -l /media/
total 1
drwxr-xr-x 3 root root 1024 Jul 22 13:40 loop0
[user@server test]$ ls -l /media/loop0/
total 12
drwx------ 2 root root 12288 Jul 22 13:40 lost+found

Edit2:

Мне удалось решить это - опция 'root_owner' к mkfs.ext3 пригождается:

#!/bin/sh

WHOAMI=`whoami`

uid=$(id -u $WHOAMI)
gid=$(id -g $WHOAMI)

dd if=/dev/zero bs=8192 count=128 of=disk.img
mkfs.ext3 -E root_owner=$uid:$gid disk.img
losetup /dev/loop0 disk.img
mount /dev/loop0
echo aaaa > /mnt/aa
umount /mnt
losetup -d /dev/loop0

Затем после монтирования точки монтирования принадлежит пользователю, который запускает скрипт, и затем пользователь может записать внутри :)

4
задан 22 July 2016 в 16:54

2 ответа

Используйте pmount вместо mount.

pmount ("политика монтируются") является оберткой вокруг стандартной программы монтирования, которая разрешает обычным пользователям монтировать съемные устройства без соответствия /etc/fstab запись.

, Вероятно, хочу...

-w, --read-write

Сила устройство, чтобы быть смонтированным чтением-записью. Если ни-r, ни-w не будут указаны, то ядро выберет соответствующее значение по умолчанию.

, Таким образом, можно отбросить fstab запись и не должными быть добавлять пользователя к disk группа.

Это позволяет монтироваться где угодно под /media/, если устройство перечислено в /etc/pmount.allow, таким образом, это также решит любые проблемы полномочий.

3
ответ дан 1 December 2019 в 09:46

Rinzwind: мой упрощенный сценарий, который я отправил в вопросе выше, не показывает его, но существует проблема с 'pmount' решением.

проблема состоит в том, что это только, кажется, может смонтироваться к / медиа.

полный сценарий более сложен: это создает файл изображения 500 МБ шириной (изображение USB pendrive), делит его в 2 раздела (FAT32 и Ext3), монтируется и к TMPFS (/tmp/loop0p1 и к/tmp/loop0p2) и пишет loooot данных внутри.

важно смочь смонтироваться к TMPFS так, чтобы эта операция была быстра - по моему опыту, делание его в TMPFS делает это больше чем в 10 раз быстрее, чем выполнение его в фактическом блочном устройстве в HD.

/ медиа не TMPFS...

1
ответ дан 1 December 2019 в 09:46

Другие вопросы по тегам:

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