Existe uma ferramenta linux vfs que permite ligar um diretório em uma localização diferente (como mount --bind) no espaço do usuário?

6

Para um processo de usuário, quero montar um diretório em outro local, mas no espaço do usuário, sem privilégios de root. Algo como mount --bind / origin / dest, mas com um wrapper vfs. Como um chroot ajustado pelo modo de usuário.

O programa envolveria os syscalls em arquivos para "substituir" os caminhos necessários. Poderia ser chamado com uma linha de comando como:

bindvfs / fake-home: / home ls / home

Eu tenho certeza que isso já existe! :)

    
por Keymon 09.09.2010 / 10:42

4 respostas

2

Você pode usar o PRoot quase da mesma maneira que no seu exemplo:

proot -b /fake-home:/home ls /home

Ao contrário do BindFS / FUSE, o PRoot é capaz de ligar arquivos e diretórios que você não possui.

    
por 30.07.2012 / 10:06
2

O programa papagaio pode faça o que você pede: intercepte as chamadas do sistema e redirecione caminhos (por exemplo, todos os caminhos que começam com /anonftp são remapeados para acesso transparente a arquivos remotos via FTP). Ele também é executado inteiramente em userspace.

No entanto, apesar de uma impressionante variedade de redes comuns e incomuns protocolos, parrot não tem nenhum módulo para fazer simples sistema de arquivos- > sistema de arquivos reescrevendo como você pede. Isso deveria ser bastante simples de adicionar, se você souber alguma programação em linguagem C.

Como alternativa, bindfs (que funciona em cima de FUSE ), funciona como um mount --bind no espaço do usuário. (Mas isso vai na direção inversa em relação a redirecionar /home para /fake-home como você mencionou na sua pergunta.

    
por 09.09.2010 / 16:43
0

O VFS já permite a montagem não-raiz de sistemas de arquivos. Você pode adicionar a opção user ou users à entrada fstab e certificar-se de que vfs.usermount=1 esteja em /etc/sysctl .

Nada disso lhe dará controles parecidos com o chroot. A opção bind não vai alterar permissões ou permitir um acesso 'alternativo', esta é uma segunda entrada do mtab para o mesmo sistema de arquivos e conteúdo exatos. Modificações na montagem da ligação afetam o original.

Eu me certificaria de esclarecer sua meta final antes de prosseguir.

    
por 09.09.2010 / 15:38
0

mount_namespaces permitirá que você faça mount --bind não visto por outros processos. Mas normalmente mount --bind é restrito apenas ao usuário root (por motivos de segurança). Portanto, para que mount_namespaces sejam de alguma utilidade para um usuário não-root, você deve primeiro usar user_namespaces para se tornar um "raiz local" em um novo namespace, onde essa operação seria permitida.

Você pode brincar com isso em seu shell assim: este exemplo mostra especificamente o uso de espaços de usuário e montagem na preparação de um diretório chroot (e a operação chroot é normalmente privilegiada também):

unshare --user --map-root-user --mount-proc --pid --fork
mkdir -p newroot/dev
mount --rbind /dev newroot/dev
....other chroot preparation....
chroot newroot
su - user1

Note que estou usando mount --rbind (em vez de mount --bind ), porque somente isso funcionará no novo espaço de nome de usuário e montagem, se o diretório incluir outros pontos de montagem (e /dev/ no meu caso ).

Talvez a explicação para isso seja que o usuário não deve conseguir ver algo que normalmente um usuário sem privilégios não veria, ou seja, os subdiretórios ocultos pelas "submontagens". Para não retirar as submontagens, apenas --rbind é permitido.

    
por 16.08.2016 / 10:17