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/fstab
exigir 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/fstab
entrada 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 noexec
que 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 user
ou users
sã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/fstab
entrada 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/fstab
que incluam a opção user
ou users
para que um usuário possa solicitar mount
a 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 user
geralmente é melhor do que, users
uma vez que restringe a permissão ao umount
usuário que montou o sistema de arquivos, enquanto users
permite isso a todos. Infelizmente, a opção user
nem 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/fstab
uma entrada como:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
e use /tmp/UFS/drive
como 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/mountpoint
como um link simbólico para o ponto de montagem que deseja usar, por exemplo /mnt/iso
.
Você pode montar john-image-file.iso
com 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 loop
explí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/drive
para 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/fstab
uma entrada que corresponda ao dispositivo de loop usado /etc/mtab
aqui /dev/loop0
e 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/fstab
entrada padrão pode ser feita para apontar para o dispositivo de loop direito via link simbólico /tmp/UFS/drive
e 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/fstab
entrada única permite montar qualquer número de arquivos e montá-los em qualquer ordem, sem privilégios de root.
Outras referências:
mount
binário não exigir permissões SUID, você poderá usar o fakeroot sem problemas.