Como obter acesso sudo às ações montadas por Gigolo

0

Como encontrado em todo o web ou aqui , eu posso usar o Gigolo para montar um compartilhamento do Windows e até mesmo acessá-lo através de um terminal, via o diretório ~/.gvfs/share on server/ , como:

ls ~/.gvfs/share\ on\ server/

Infelizmente, quando tento acessar o mesmo diretório de um comando via sudo , e. g.

sudo ls ~/.gvfs/share\ on\ server/

que falha com:

ls: cannot access /home/user/.gvfs/share\ on\ server/: Permission denied

Alguma sugestão sobre como obter sudo de acesso a compartilhamentos montados em Gigolo? Ou, como executar o Gigolo para obter sudo de acesso aos compartilhamentos?

    
por FriendFX 07.01.2014 / 11:56

2 respostas

5

O Gigolo é um frontend para gvfs . gvfs usa o FUSE (Filesystem in Userspace) para montar dispositivos de rede (como compartilhamentos do Windows). Esses pontos de montagem normalmente não podem ser lidos por outros usuários além do usuário que o montou, mesmo por root . Por quê? Karl Auer sugere aqui que a razão é que

% bl0ck_qu0te%

Isto é, se você é o usuário A na máquina X e monta algum diretório da máquina Y (onde você também tem um login) em algum lugar na máquina X, então root na máquina X não deve poder para ler isso, porque root na máquina X geralmente não tem nenhum acesso à máquina Y.

Tendo isso em mente, se você quiser permitir que root acesse seu diretório ~/.gvfs , poderá proceder da seguinte maneira.

1) Edite o arquivo /etc/fuse.conf e descomente a linha que lê #user_allow_other . Isso permitirá que o usuário inicie o daemon gvfs-fuse com a opção allow_root , que é o que você deseja. O comando a seguir faz isso rapidamente para você:

$ sudo sed -i -e 's/#user_allow_other/user_allow_other/' /etc/fuse.conf

2) Adicione seu próprio usuário ao grupo fuse , para que você possa ler o arquivo /etc/fuse.conf . Caso contrário, a alteração no passo anterior não teria efeito.

$ sudo addgroup USERNAME fuse
$ newgrp fuse

Substitua USERNAME pelo seu nome de usuário, é claro. O comando newgrp evita a necessidade de sair e voltar novamente para que a mudança de grupo tenha efeito. Verifique se funciona enviando o comando:

$ groups

e verifique se fuse está listado entre os grupos aos quais seu usuário pertence. Se isso não funcionar, efetue logout e volte novamente. De qualquer forma, seu usuário deve ser capaz de ler /etc/fuse.conf antes de prosseguir com a próxima etapa.

3) Agora você pode reiniciar o daemon gvfs-fuse com a opção allow_root . Primeiro, desmonte o diretório ~/.gvfs :

$ fusermount -zu $HOME/.gvfs

Em seguida, para reiniciar o daemon, emita os seguintes comandos no Ubuntu 13.10:

$ killall gvfsd-fuse
$ /usr/lib/gvfs/gvfsd-fuse -o allow_root $HOME/.gvfs

Em versões mais antigas do Ubuntu, os dois últimos comandos podem ser:

$ killall gvfs-fuse-daemon
$ /usr/lib/gvfs/gvfs-fuse-daemon -o allow_root $HOME/.gvfs

4) Reinicie o Gigolo e monte seu compartilhamento do Windows novamente. root agora deve poder ler o diretório ~/.gvfs .

É isso aí!

Para tornar essas alterações permanentes:

Para tornar as alterações permanentes, você pode escrever os três comandos da etapa 3 em um pequeno script que você inicia automaticamente no momento do login. Pode haver maneiras mais limpas de fazer isso, mas isso deve funcionar. Seu script conteria algo como o seguinte:

!#/bin/bash
fusermount -zu $HOME/.gvfs
killall gvfsd-fuse
/usr/lib/gvfs/gvfsd-fuse -o allow_root $HOME/.gvfs

Salve isso em um arquivo e torne o arquivo executável:

chmod 755 /path/to/the/file

Este script deve ser executado automaticamente no momento do login. Para descobrir como iniciar automaticamente aplicativos, consulte Como faço para iniciar aplicativos automaticamente no login? .

Mais algumas discussões sobre o assunto podem ser encontradas aqui: link

    
por Malte Skoruppa 07.01.2014 / 13:42
1

Eu tinha um requisito semelhante em 18.04, em que eu queria permitir que o root acessasse um telefone Android montado em gvfs para fazer backup dos arquivos. Eu pensei que valeria a pena documentar o que eu fiz para as pessoas pesquisando uma solução. As etapas necessárias foram tiradas de @Malte Skoruppas answer e modificadas para 18.04.

Em 18.04, o ponto de montagem gvfs está em /run/user/$UID/gvfs not $HOME/.gvfs . No meu caso, UID = 1000.

Após o login, a situação é esta:

gvfsd-fuse está em execução:

$ pgrep gvfsd-fuse -l
1856 gvfsd-fuse

A montagem existe:

$ mount | grep gvfs
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)

E o root não tem permissão para ler o diretório

# ls /run/user/1000/gvfs
ls: cannot access '/run/user/1000/gvfs': Permission denied

Um usuário normal tem permissões de leitura para /etc/fuse.conf , por isso não precisamos criar um grupo de fusíveis e adicionar nosso usuário a ele.

$ grep allow /etc/fuse.conf
# Set the maximum number of FUSE mounts allowed to non-root users.
# Allow non-root users to specify the allow_other or allow_root mount options.
user_allow_other

Para fornecer root access, fiz o seguinte:

$ fusermount -zu /var/run/user/1000/gvfs/
$ pkill gvfsd-fuse
$ /usr/lib/gvfs/gvfsd-fuse -o allow_root /var/run/user/1000/gvfs/
$ mount | grep gvfs
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)

Depois que esta raiz puder acessar o diretório

Eu não sei porque o mount mostra allow_other em vez de allow_root . Se eu executar gvfsd-fuse com -o allow_other , o comportamento é o mesmo.

    
por htaccess 18.07.2018 / 05:28