Posso montar uma imagem do sistema de arquivos sem permissão root? Normalmente eu faria:
mount -o loop DISK_IMAGE FOLDER
Sem usar o sudo ou ativar o suid mount
, existe alguma maneira adequada de fazer isso?
Eu sei que posso usar fusermount
com algumas imagens ISO, mas isso é bastante limitado, mesmo para imagens ISO, algumas das minhas imagens não podem ser montadas, mas mount
sempre funcionam.
mount
binário não exigir permissões SUID, você poderá usar o fakeroot sem problemas.fakeroot
não vai ajudar aqui: ele finge que a propriedade do arquivo é diferente, mas não pode fornecer permissões que você não possui, como ligarmount(2)
quando você não é root.Respostas:
Você não pode montar nada que o administrador não tenha dado permissão para montar. Somente o root pode chamar a chamada do
mount
sistema. A razão para isso é que existem muitas maneiras de escalar privilégios através da montagem, como montar algo em um local do sistema, fazer com que os arquivos pareçam pertencer a outro usuário e explorar um programa que depende da propriedade do arquivo, criar arquivos setuid ou explorar bugs nos drivers do sistema de arquivos.O
mount
comando é raiz setuid. Mas apenas permite montar coisas mencionadas emfstab
.O
fusermount
comando é raiz setuid. Ele só permite montar coisas através de um driver FUSE e restringe sua capacidade de fornecer arquivos com propriedade ou permissões arbitrárias dessa maneira (na maioria das configurações, todos os arquivos em uma montagem FUSE pertencem a você).Sua melhor aposta é encontrar um sistema de arquivos FUSE capaz de ler sua imagem de disco. Para imagens ISO 9660, tente o suporte a fuseiso e ISO 9660 da UMfuse (disponível no Debian como o
fuseiso9660
pacote ).fonte
sudo
(embora tenha o bit SUID definido) apenas permite montarfstab
entradas. A partir disso, segue-se que (a) o bit SUID faz sentido, pois um usuário comum pode montarfstab
entradas (e tem permissão para executar omount
syscall) e (b) que é umamount
restrição do utilitário permitir apenas que asfstab
entradas sejam montadas por usuários root.fstab
são para rootfs e boot. Para montar unidades USB, eu olholsblk
e demount
acordo. Não tive problemas para fazer isso.O Debian Wiki mostra várias maneiras de fazer isso. Aqui está uma maneira. (Isso requer o
udisks2
pacote.)Primeiro
/dev/loop0
será usado para o seguinte.Mas se o
udisksctl loop-setup
comando tivesse retornado/dev/loop1
,/dev/loop1
teria sido usado para o seguinte.Pode ser necessário executar se o dispositivo de auto-retorno (criado anteriormente) não for montado automaticamente:
Você pode ver os arquivos no disco
Você pode desmontá-lo quando terminar
e se necessário:
fonte
sudo
apenas. travessuras setsid ou relacionadas ?-r
opção paraudisksctl loop-setup
significa somente leitura, que o OP não solicitou, abandone isso para obter uma montagem gravável.Você pode usar o módulo de montagem do FUSE para montar vários tipos de imagens de disco. Faz parte do ecossistema guestfs e não requer permissões de root.
Dê uma olhada na página de manual para obter mais detalhes.
Exemplos
1. Para um hóspede típico do Windows, que possui seu sistema de arquivos principal na primeira partição:
2. Para um hóspede típico do Linux que possui um sistema de arquivos / boot na primeira partição e o sistema de arquivos raiz em um volume lógico:
fonte
A maneira possível seria adicionar uma
/etc/fstab
entrada para o ISO com o parâmetro 'user', como/test.iso /mnt/iso auto defaults,user 0 1
Mas você geralmente precisa de acesso root de qualquer maneira para editar este arquivo, portanto não é muito útil.
fonte
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
e para desmontar
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 ounosuid
, portanto, contribuem para a segurança. Na verdade, essas opções são adicionados como opções padrão quando as opçõesuser
ouusers
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/FstabOutras 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. Vejaman 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çãouser
ouusers
para que um usuário possa solicitarmount
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çãouser
geralmente é melhor do que,users
uma vez que restringe a permissão aoumount
usuário que montou o sistema de arquivos, enquantousers
permite isso a todos. Infelizmente, a opçãouser
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: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: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:
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):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:
Montando e modificando um arquivo de loopback sem sudo / root, é possível?
http://www.tuxfiles.org/linuxhelp/fstab.html
fonte
mount
comando para todos os usuários normais? E, portanto, os problemas de segurança associados a ele? Corrija-me se eu estiver errado.device
amountpoint
seção ou do fstab não apontar para uma entrada válida. O usuário precisa fazer login via sessão do console e entrarstartx
para iniciar explicitamente um gerenciador de exibição.O pacote libguestfs-tools-c possui o comando guestmount, portanto
o df mostrará image.iso montado
para montar temos:
fonte