Uma submontagem que é inacessível devido às permissões FUSE, desaparece quando é acessada. Como?

1

Eu tentei criar um caso de teste usando o sistema de arquivos FUSE sshfs . Minha ideia era que sshfs seria um pouco mais fácil para os desenvolvedores testarem, em comparação com a edição original que envolvia NFS . Mas minha ideia não funcionou como eu esperava.

O que está acontecendo aqui?

$ mkdir /tmp/alan
$ sudo mkdir /root/mnt
$ sudo sshfs alan@localhost:/tmp/alan /root/mnt
$ mkdir /tmp/alan/mnt
$ sudo mount --bind /root/mnt/mnt /root/mnt/mnt
$ chmod a-rwx /tmp/alan
$ findmnt | grep mnt
  /root/mnt        alan@localhost:/tmp/alan  fuse.sshfs  ...
    /root/mnt/mnt  alan@localhost:/tmp/alan  fuse.sshfs  ...

$ mount -oremount,bind,ro /root/mnt/mnt
mount: /root/mnt/mnt: cannot mount (null) read-only.

$ findmnt | grep mnt
  /root/mnt        alan@localhost:/tmp/alan  fuse.sshfs  ...

A submontagem desapareceu.

Se eu executar novamente e prefixar o comando mount -oremount com sudo strace -e trace=mount , isso mostrará que a chamada do sistema falha com "Permission denied", de modo que a parte parece estar funcionando como esperado.

mount("none", "/root/mnt/mnt", 0x55b13233d620, MS_MGC_VAL|MS_RDONLY|MS_REMOUNT|MS_BIND, NULL) = -1 EACCESS (Permission denied)
    
por sourcejedi 15.08.2018 / 01:51

1 resposta

1

Você pode substituir o comando mount -oremount por sudo ls /root/mnt/mnt . Você recebe o mesmo erro EACCESS ("Permissão negada") e o ponto de montagem ainda desaparece.

ls /tmp/alan/mnt também falharia devido a EACCESS . Observe que o erro será EACCESS , mesmo se /tmp/alan/mnt também tiver sido removido ou substituído por um arquivo que não seja de diretório.

Normalmente, se /tmp/alan/mnt tiver sido removido ou substituído por um não diretório, a submontagem /root/mnt/mnt não será mais válida e será removida automaticamente. Nesse caso, quando o kernel perguntar sshfs if /root/mnt/mnt ainda existir como um diretório, sshfs apenas informará "Permissão negada". O kernel trata isso como uma falha, como "Nenhum arquivo ou diretório".

Eu não sei se é exatamente isso que acontece.

Além disso, as submontagens não parecem desaparecer quando ls na submontagem retorna ENOTCONN "O terminal de transporte não está conectado". Este erro acontece quando você mata o processo FUSE para a montagem pai. (Veja link )

    
por 15.08.2018 / 01:51