Na verdade, é muito fácil montar mais ou menos o que você deseja como usuário normal, sem privilégios de root, desde que a entrada correta tenha sido criada /etc/fstab.
Obviamente, modificações para /etc/fstabexigir privilégios de root. Mas uma única entrada pode ser usada com muita flexibilidade para (u) montar muitos arquivos diferentes em diferentes pontos de montagem, sem nenhuma edição adicional /etc/fstab.
Aqui estão dois scripts Bash muito curtos (5 linhas + comentários) que farão o trabalho:
para montagem
#!/bin/sh
# usage: usmount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to mount device $1 on mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
mount /tmp/UFS/drive || mount /tmp/UFS/mountpoint
# The last statement should be a bit more subtle
# Trying both is generally not useful.
e para desmontar
#!/bin/sh
# usage: usumount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to umount device $1 from mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
umount /tmp/UFS/drive || umount /tmp/UFS/mountpoint
# One of the two umounts may fail because it is ambiguous
# Actually both could fail, with careless mounting organization :-)
O diretório /tmp/UFS/é criado para isolar os links e evitar conflitos. Mas os links simbólicos podem estar em qualquer lugar no espaço do usuário, desde que permaneçam no mesmo local (mesmo caminho). A /etc/fstabentrada também não muda.
AVISO VITAL: A
montagem é restrita por boas razões de segurança. Torná-lo mais flexível pode abrir portas para software malicioso. Não sou especialista em segurança e recomendo que você abra as portas não mais do que o absolutamente necessário ... usando opções para restringir o que pode ser feito com os sistemas de arquivos que podem ser montados. Se um colaborador experiente puder comentar mais sobre questões de segurança, pode ser útil.
Várias opções estão disponíveis para restringir o uso de sistemas de arquivos montados, como o noexecque impede a execução de binários ou nosuid, portanto, contribuem para a segurança. Na verdade, essas opções são adicionados como opções padrão quando as opções userou userssão usadas, que é necessariamente o caso no que fazemos abaixo. Pense duas vezes antes de substituir esses padrões. http://en.wikipedia.org/wiki/Fstab
Outras opções podem ser adicionadas para proteção adicional. Por exemplo, a opção owner na /etc/fstab entrada permitirá que os usuários lidem apenas com arquivos ou dispositivos que possuem. Veja man mount uma lista de opções: http://linux.die.net/man/8/mount .
O uso dessa /etc/fstabentrada também pode ser restrito pela propriedade user.group do diretório (ou diretórios) que contém os links simbólicos.
Explicação
Essa explicação foi escrita antes que eu percebesse que poderia simplificar as coisas nos dois scripts acima. Não pensei neles imediatamente, em parte porque tenho em mãos um problema um pouco mais complexo que eles não resolvem sem máquinas extras. Portanto, minha explicação pode ser um pouco mais complexa do que deveria, mas não tenho coragem de reescrever tudo do zero.
A idéia básica é criar entradas /etc/fstabque incluam a opção userou userspara que um usuário possa solicitar mounta montagem especificada nessa entrada, fornecendo como argumento o arquivo a ser montado ou o ponto de montagem a ser usado (mas não na minha experiência) .
Você também precisa de uma entrada adequada para umount(que é um problema ligeiramente diferente - veja abaixo). A opção usergeralmente é melhor do que, usersuma vez que restringe a permissão ao umountusuário que montou o sistema de arquivos, enquanto userspermite isso a todos. Infelizmente, a opção usernem sempre funciona e pode implicar em outras etapas a serem feitas para funcionar. Isso é discutido na opção "usuário", trabalho para montagem, não para quantidade .
Primeiro você adiciona a /etc/fstabuma entrada como:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
e use /tmp/UFS/drivecomo um link simbólico (ou link simbólico) para qualquer dispositivo ou arquivo que você deseja montar, digamos, um arquivo contendo a imagem de um sistema de arquivos ISO /home/johndoe/john-image-file.iso.
Você também define /tmp/UFS/mountpointcomo um link simbólico para o ponto de montagem que deseja usar, por exemplo /mnt/iso.
Você pode montar john-image-file.isocom o comando:
$ mount /tmp/UFS/drive
Isso é suficiente no meu Mageia Linux, já que o uso de dispositivos de loop agora está implícito e não requer mais o uso -o loopexplícito. Não sei como isso é geral hoje. Consulte
Ao montar, quando devo usar um dispositivo de loop?
Esta montagem aparece em tabelas e comandos:
$ df | tail -1
/dev/loop0 5,1G 5,1G 0 100% /mnt/iso
$ tail -1 /etc/mtab
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ mount | tail -1
/home/johndoe/john-image-file.iso on /mnt/iso type udf (ro,nosuid,nodev,noexec,relatime,utf8)
$ tail -1 /proc/mounts
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ tail -1 /proc/self/mountinfo
46 22 7:0 / /mnt/iso rw,nosuid,nodev,noexec,relatime - udf /dev/loop0 ro,utf8
$ tail -1 /proc/self/mountstats
device /dev/loop0 mounted on /mnt/iso with fstype udf
A operação de montagem pode funcionar para qualquer arquivo ou unidade e requer apenas a criação de um link simbólico /tmp/UFS/drivepara esse arquivo ou para o dispositivo da unidade. Obviamente, outro nome e local podem ser escolhidos para o link simbólico, desde que nunca mude.
A desmontagem do arquivo depende da mesma maneira do uso apropriado de links simbólicos. No caso de um dispositivo normal correspondente a alguma unidade de harware, basta usar os mesmos links.
No entanto, os arquivos que contêm a imagem de um sistema de arquivos são montados por meio de um tipo especial de dispositivo chamado dispositivo de loop, alocado automaticamente quando você monta o arquivo.
Para desmontar o arquivo, você precisa se referir ao dispositivo de loop, não ao arquivo. Portanto, você precisa de /etc/fstabuma entrada que corresponda ao dispositivo de loop usado /etc/mtabaqui /dev/loop0e ao ponto de montagem aqui
/mnt/iso.
Você não pode criar essa entrada antecipadamente, pois o dispositivo de loop pode variar, pois eles são alocados dinamicamente. Observe que também é possível usar um dispositivo de loop fixo, mas é inconveniente de outras maneiras. Consulte
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( este blog realmente inspirou a resposta aqui ).
No entanto, você pode encontrar o nome do dispositivo de loop aqui /dev/loop0, perguntando ao sistema, como fizemos acima, de várias maneiras diferentes. Em seguida, nossa /etc/fstabentrada padrão pode ser feita para apontar para o dispositivo de loop direito via link simbólico /tmp/UFS/drivee para o ponto de montagem, como feito anteriormente /tmp/UFS/mountpoint. Feito isso, o arquivo pode ser desmontado com qualquer um dos seguintes comandos (desde que não exista ambiguidade /etc/mtab, o que é um problema diferente):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Como os dois links simbólicos são necessários apenas quando os comandos são emitidos, eles podem ser alterados dinamicamente. Portanto, nossa /etc/fstabentrada única permite montar qualquer número de arquivos e montá-los em qualquer ordem, sem privilégios de root.
Outras referências:
mountbinário não exigir permissões SUID, você poderá usar o fakeroot sem problemas.