Montando sem precisar de sudo * depois *

0

Estou tentando investigar as entranhas do FAT32 e, para isso, estou tentando criar uma imagem FAT32, montá-la e fazer algumas operações de arquivo na linha de comando. Pela pergunta aqui , sei que não há como usar sudo para montar a imagem. Eu ainda estou me perguntando por que eu acabei precisando de sudo para fazer operações de arquivo dentro do ponto de montagem. Um pequeno script segue o que demonstra o que funciona e o que não funciona. Alguém poderia me mostrar como fazer isso sem raiz?

DISK=/tmp/disk1.raw
MOUNTPOINT=/tmp/mount1
SIZE=512M
rm -f $DISK
rm -rf $MOUNTPOINT

# create disk image
qemu-img create -f raw $DISK $SIZE
# format disk image
mkfs.fat -v -F 32 $DISK
# make mountpoint
mkdir -p $MOUNTPOINT

# can't be helped
sudo mount -o loop -t msdos $DISK $MOUNTPOINT
# should work but doesn't
mkdir -p $MOUNTPOINT/tmp/
# actually works
sudo mkdir -p $MOUNTPOINT/tmp/
# should work but doesn't
dd of=$MOUNTPOINT/tmp/ticket2.txt if=/dev/zero bs=512 count=9
# actually works
sudo dd of=$MOUNTPOINT/tmp/ticket2.txt if=/dev/zero bs=512 count=9

ls -lR $MOUNTPOINT
sudo umount $MOUNTPOINT
    
por airbornemihir 16.04.2018 / 19:22

1 resposta

4

As variantes do sistema de arquivos do MS-DOS não suportam permissões ou proprietários de arquivos (armazenados em disco). Então, em vez disso, o kernel padroniza-os para o usuário de montagem - neste caso, root.

Você pode substituir isso passando as opções uid= e gid= . Por exemplo, sudo mount -o loop,uid=1000,gid=1000 -t msdos "$DISK" "$MOUNTPOINT" . (Eu adicionei citando lá, que é um bom hábito de entrar). Você pode verificar qual é o seu uid / gid com id ; pode ser algo diferente de 1000 ou, alternativamente, faça o seguinte:

UID='id -u'
GID='id -g'
sudo mount -o loop,uid=$UID,gid=$GID -t msdos "$DISK" "$MOUNTPOINT"

Estas opções estão documentadas em man 8 mount , pelo menos.

PS: Existem várias opções para montar w / o sudo mencionadas nessa questão; por exemplo, udisks.

    
por 16.04.2018 / 19:37

Tags