Eu quero ser capaz de executar o seguinte script como usuário normal (como root, ele corre bem):
#!/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
Para esse fim, eu
1) adicionou a entrada apropriada para / etc / fstab (somente então o usuário normal pode executar 'mount / dev / loop0'):
/dev/loop0 /mnt ext2 defaults,loop,users,noauto 0 0
2) adicionou o usuário em questão ao grupo 'disk' (somente então o usuário pode executar 'losetup' - / dev / loop0 é de propriedade do grupo 'disk')
Agora, esperamos que o último problema seja que, quando eu corro como usuário normal, recebo o erro 'permissão negada' de 'echo'. Não é de admirar, porque após a montagem, as permissões do diretório / mnt mudam para 755 root: root, e obviamente um usuário normal não pode criar arquivos dentro dele.
Como devo criar meu 'disk.img' para que, quando montado, seja gravável pelo próprio usuário que o criou?
Editar:
A solução 'pmount' proposta parece ter o mesmo problema. Etapas de reprodução:
1) instale 'pmount' e adicione '/ dev / loop0' ao /etc/pmount.allow
2) execute o seguinte como um usuário normal:
#!/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
Você ainda receberá 'permissão negada' pelo echo pela mesma razão que nós a obtivemos antes - as permissões do diretório / media / loop0 / são 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:
Consegui resolver isso - a opção 'root_owner' para mkfs.ext3 é útil:
#!/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
Em seguida, após a montagem, o ponto de montagem é de propriedade do usuário que está executando o script e, em seguida, o usuário pode escrever dentro de:)