Montar imagem legível pelo usuário com udisks2

3

Dispositivos de loop, ou seja, para montar imagens de disco brutas, podem ser gerenciados sem privilégios de root usando os udisks.

Para fins de teste, uma imagem pode ser criada e formatada da seguinte forma:

dd if=/dev/urandom of=img.img bs=1M count=16
mkfs.ext4 img.img

E, em seguida, configure usando os udisks

udisksctl loop-setup -f img.img

Isso cria um dispositivo de loop para a imagem e a monta em um novo diretório em /run/$USER , exatamente como qualquer disco rígido local gerenciado pelos udisks. Apenas as permissões não são o que eu esperava.

# ls -l /run/media/$USER/
drwxr-xr-x 3 root  root   1024 Apr 10 11:19 [some id]
drwx------ 1 auser auser 12288 Oct 30  2012 [a device label]

O primeiro listado é o dispositivo de loop, de propriedade do root e não gravável por mais ninguém. O segundo é um disco rígido local ou um pen drive USB montado para comparação, pertencente ao usuário que o montou. Eu sei que eu poderia consertar isso com um simples chmod executado como root.

Mas por que os udisks atribuem permissões e proprietários diferentes? Pode ser configurado para fazer o contrário?

    
por XZS 13.04.2014 / 23:33

1 resposta

3

Eu dei uma olhada detalhada no código-fonte do udisks2 e encontrei a solução lá.

Os dispositivos montados corretamente sob as permissões do usuário foram formatados com sistemas de arquivos antigos, como fat . Eles aceitam as opções uid= e gid= mount para definir o proprietário. Os udiscos definem automaticamente essas opções para o usuário e o id do grupo do usuário que emitiu a solicitação de montagem.

Sistemas de arquivos modernos, como a série ext, não possuem essas opções, mas lembram-se de proprietário e modo do nó raiz. Portanto, chown auser /run/media/auser/[some id] funciona de forma persistente. Uma alternativa é passar -E root_user para mkfs.ext4 , que inicializa o uid e o gid do sistema de arquivos recém-criado para o seu criador.

    
por 17.04.2014 / 12:28