Я хочу смочь запустить следующий скрипт как обычный пользователь (как корень, он хорошо работает):
#!/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
Затем после монтирования точки монтирования принадлежит пользователю, который запускает скрипт, и затем пользователь может записать внутри :)
Используйте pmount вместо mount
.
pmount ("политика монтируются") является оберткой вокруг стандартной программы монтирования, которая разрешает обычным пользователям монтировать съемные устройства без соответствия
/etc/fstab
запись.
, Вероятно, хочу...
-w
,--read-write
Сила устройство, чтобы быть смонтированным чтением-записью. Если ни-r, ни-w не будут указаны, то ядро выберет соответствующее значение по умолчанию.
, Таким образом, можно отбросить fstab запись и не должными быть добавлять пользователя к disk
группа.
Это позволяет монтироваться где угодно под /media/
, если устройство перечислено в /etc/pmount.allow
, таким образом, это также решит любые проблемы полномочий.
Rinzwind: мой упрощенный сценарий, который я отправил в вопросе выше, не показывает его, но существует проблема с 'pmount' решением.
проблема состоит в том, что это только, кажется, может смонтироваться к / медиа.
полный сценарий более сложен: это создает файл изображения 500 МБ шириной (изображение USB pendrive), делит его в 2 раздела (FAT32 и Ext3), монтируется и к TMPFS (/tmp/loop0p1 и к/tmp/loop0p2) и пишет loooot данных внутри.
важно смочь смонтироваться к TMPFS так, чтобы эта операция была быстра - по моему опыту, делание его в TMPFS делает это больше чем в 10 раз быстрее, чем выполнение его в фактическом блочном устройстве в HD.
/ медиа не TMPFS...