Мне нужны обычные пользователи, чтобы монтировать / dev / loop0p1 и / dev / loop0p2 на моем компьютере. / dev / loop0p1 всегда будет разделом FAT32, а loop0p2 - ext3.
Для этого у меня есть:
1) созданы каталоги / tmp / loop0p1 и / tmp / loop0p2 (я знаю, что в сценарии запуска они исчезают после перезагрузки):
[root@machine tmp]$ ls -l
(...)
drwxrwxrwx 2 root root 80 Jul 22 00:25 loop0p1
drwxrwxrwx 2 root root 40 Jul 22 00:50 loop0p2
2) добавил в / etc / fstab следующие строки:
/dev/loop0p1 /tmp/loop0p1 vfat defaults,loop,users,noauto 0 0
/dev/loop0p2 /tmp/loop0p2 ext3 defaults,loop,users,noauto 0 0
3) Теперь, как обычный пользователь, я могу смонтировать их без проблем.
Проблема связана с разрешениями раздела loop0p2 Ext3 - перед монтированием, как вы можете видеть выше, точка монтирования / tmp / loop0p2 имеет разрешения '777', но после 'mount / dev / loop0p2' они внезапно волшебным образом меняются на ' 755 ':
[root@machine tmp]$ ls -l /tmp
(...)
drwxrwxrwx 2 user user 16384 Jan 1 1970 loop0p1
drwxr-xr-x 3 root root 1024 Jul 22 00:37 loop0p2
и, разумеется, мой пользователь не может ничего писать внутри точки монтирования / tmp / loop0p2, что бесполезно.
Почему меняются разрешения и есть ли опция монтирования ext3, которая дает мне полный доступ? gid, uid, umask кажутся неподдерживаемыми этим проклятым ext3 !!
Проблема здесь в том, что смонтированная файловая система имеет собственные разрешения и не наследует разрешения каталога (или точки монтирования), к которой она смонтирована.
Решение состоит в том, чтобы установить разрешения после монтирования раздела.
Для этого вы можете использовать:
chmod 777 /tmp/loop0p2
Однако это может не полностью решить проблему, поскольку, если у вас также есть дополнительные файлы в пределах точки монтирования также сохранят свои предыдущие разрешения, поэтому более полезной для вас командой может быть:
chmod -R 777 /tmp/loop0p2
Альтернативно - если только вашему пользователю нужен доступ к нему - вы можете разделить файлы только с пользователем, которому нужен доступ:
chown <user>:<group> /tmp/loop0p2 [/ only]
chown -R <user>:<group> /tmp/loop0p2 [recursively]
Надеюсь это поможет!
После монтирования вам придется вручную предоставить права на запись.
chmod 777 / ваш каталог
umask и rw не будут работать в файловой системе ext.
Спасибо за все ответы, теперь я понимаю, что разрешения точки монтирования исходят из смонтированного каталога.
Дело в том, что я монтирую не каталог, а образ блочного устройства в файле. Дело в том, чтобы иметь возможность создать образ USB-диска в памяти (поэтому мы монтируем его в TMPFS в / tmp, это намного быстрее, чем запись на фактическое блочное устройство)
Обычные пользователи должны иметь возможность запускать скрипт, который это делает.
Итак, вот общая картина:
1) Создаю точку монтирования / tmp / loop0p1
2) Я добавляю в / etc / fstab следующее (чтобы обычные пользователи могли монтировать / dev / loop0p1):
/dev/loop0p1 /tmp/loop0p1 ext3 defaults,loop,users,noauto 0 0
Я запускаю следующий сценарий (упрощенный, чтобы показать суть проблемы):
#!/bin/sh
dd if=/dev/zero of=usb.img bs=1M seek=9 count=1
sfdisk usb.img << EOF
,20480,83
EOF
losetup -P /dev/loop0 usb.img
sleep 2
mkfs.ext3 /dev/loop0p1
mount /dev/loop0p1
echo "loop0p1" > /tmp/loop0p1/p1.txt
umount /tmp/loop0p1
losetup -d /tmp/loop0
Как видите, сценарий создает пустой файл размером 10 МБ, устанавливает в нем раздел Linux (тип '83'), монтирует его в / dev / loop0, создает в нем файловую систему Ext3, а затем монтирует его в / tmp / loop0p1 и пытается записать туда файл.
Проблема в том, что сценарий не работает с 'Permission denied' пытается записать файл в / tmp / loop0p1, и это неудивительно, потому что, как я уже сказал, когда я монтируюсь, разрешения / tmp / loop0p1 меняются на 755 root: root , поэтому очевидно, что как обычный пользователь я не могу там ничего писать.
То, что я монтирую, просто создано из ничего с помощью 'dd', 'sfdisk' и 'mkfs.ext3'. Что именно мне следует изменить, чтобы пользователь, выполнявший сценарий, действительно имел права записи?
На самом деле есть еще более простой сценарий, который показывает проблему.
Мы хотим иметь возможность запускать следующий сценарий от имени обычного пользователя (с правами root он работает нормально):
#!/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
С этой целью мы