A pasta compartilhada mostra diferentes permissões entre o host do Windows e o convidado do Ubuntu ao usar o VirtualBox

1

Eu me deparei com um problema estranho de permissões;

Uma pasta compartilhada mostra um conjunto de permissões no Windows e totalmente diferentes quando acessadas no Linux via VirtualBox.

A pasta compartilhada é o meu diretório XAMPP htdocs /, já que eu quero a habilidade de trabalhar nos mesmos repositórios / sites de 2 ambientes diferentes - então eu não posso mover a pasta.

Minha configuração atual

  • Windows 7 (Host), com o Ubuntu rodando dentro do VirtualBox (Guest)
  • Eu configurei a pasta como um local compartilhado e posso acessá-la pelo terminal do Ubuntu em /media/sf_<myfolder> .
  • A pasta compartilhada está configurada para automount e é permanente nas configurações do VirtualBox.
  • Meu usuário faz parte do grupo de usuários vboxsf e eu o confirmei por meio da verificação de /etc/group .
  • Eu instalei vitrualbox-guest-additions-iso . Clipboards compartilhadas estão funcionando bem.
  • Estou usando cygwin para meu terminal do Windows

Como as permissões aparecem

Windows (do terminal cygwin), usando $ ls -alF

me@my-server /cygdrive/c/xampp/htdocs/my-website$ ls -alF
total 61313
drwxrwxr-x+ 1 me Domain Users        0 Sep  6 12:12 ./
drwxrwx---+ 1 me Domain Users        0 Sep  8 16:22 ../
drwxrwxr-x+ 1 me Domain Users        0 Sep  8 15:57 .git/
drwxrwxr-x+ 1 me Domain Users        0 Sep  6 12:06 bal/
-rw-rw-r--+ 1 me Domain Users     1065 Sep  6 12:06 .csslintrc
-rw-rw-r--+ 1 me Domain Users      367 Sep  6 12:06 .editorconfig

Terminal do Ubuntu (VirtualBox), usando $ ls -alF

me@my-server:/media/sf_htdocs/my-website$ ls -alF
total 61256
drwxrwx--- 1 root vboxsf    12288 Sep  6 12:12 ./
drwxrwx--- 1 root vboxsf     4096 Sep  8 16:22 ../
drwxrwx--- 1 root vboxsf     4096 Sep  8 15:57 .git/
drwxrwx--- 1 root vboxsf        0 Sep  6 12:06 bal/
-rwxrwx--- 1 root vboxsf     1065 Sep  6 12:06 .csslintrc*
-rwxrwx--- 1 root vboxsf      367 Sep  6 12:06 .editorconfig*

Windows, usando $ stat

me@my-server /cygdrive/c/xampp/htdocs/my-website$ stat .csslintrc
  File: .csslintrc
  Size: 1065            Blocks: 4          IO Block: 65536  regular file
Device: bcd2ece6h/3167939814d   Inode: 4222124651673917  Links: 1
Access: (0664/-rw-rw-r--)  Uid: (1051198/me)   Gid: (1049089/Domain Users)
Access: 2017-09-06 12:06:15.578083600 +1000
Modify: 2017-09-06 12:06:15.578583700 +1000
Change: 2017-09-06 12:06:15.578583700 +1000
 Birth: 2017-09-06 12:06:15.578083600 +1000

Ubuntu, usando $ stat

me@my-server:/media/sf_htdocs/my-website$ stat .csslintrc 
  File: '.csslintrc'
  Size: 1065        Blocks: 3          IO Block: 4096   regular file
Device: 29h/41d Inode: 14          Links: 1
Access: (0770/-rwxrwx---)  Uid: (    0/    root)   Gid: (  999/  vboxsf)
Access: 2017-09-06 12:06:15.578083600 +1000
Modify: 2017-09-06 12:06:15.578583700 +1000
Change: 2017-09-06 12:06:15.578583700 +1000
 Birth: -

Eu também criei um arquivo de ambos os sistemas para inspecionar as permissões padrão. Eu fiz o mesmo com diretórios de teste, e ambos os arquivos + pastas mostram exatamente as mesmas permissões.

Windows

-rwxrwxr-x+ 1 Administrators Domain Users        0 Sep 11 08:52 .test-from-linux-vm*
-rw-rw-r--+ 1 me      Domain Users        0 Sep 11 08:52 .test-from-windows

UbuntuVM

-rwxrwx--- 1 root vboxsf        0 Sep 11 08:52 .test-from-linux-vm*
-rwxrwx--- 1 root vboxsf        0 Sep 11 08:52 .test-from-windows*

O que eu notei

  • Não consigo alterar as permissões de arquivo / pasta no Ubuntu, mesmo com sudo chmod <permissions> <file>
  • Embora eu possa alterar as permissões no Windows, essas alterações não se refletem no Ubuntu:

Windows ; atualizou o web.config de 664 para 755

-rwxr-xr-x+ 1 me      Domain Users     4555 Sep  6 12:06 web.config*

Ubuntu

-rwxrwx--- 1 root vboxsf     4555 Sep  6 12:06 web.config*

Eu já tentei ...

  • Reiniciando a VM (muitas vezes; D)
  • Confirmar o diretório compartilhado é o mesmo do Windows e do Linux, criando arquivos de teste em um e verificando se eles aparecem no outro.
  • As sugestões sugestões nesta questão

Minhas perguntas:

  • Por que os conjuntos de permissões diferem entre sistemas?
  • Eles estão sendo atribuídos em um nível de sistema operacional, não em nível de arquivo?

Qualquer ajuda seria incrível!

    
por Timmah 08.09.2017 / 09:36

1 resposta

1
% bl0ck_qu0te%

Em geral : armazenar um grupo e um usuário de um arquivo como uma string seria um desperdício demais. Não só precisaria de muito espaço em disco, mas também exigiria O (n) de tempo de processamento, no pior dos casos, para verificar se você tem permissões para um único arquivo!

Em vez disso, esses atributos são armazenados como um número, o que sempre exigiria apenas O (1) para verificar as permissões. Você pode vê-los usando, por exemplo, Comando stat :

$ stat r600_state_common.c 
  File: r600_state_common.c
  Size: 90718           Blocks: 184        IO Block: 4096   regular file
Device: 26h/38d Inode: 70588       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/constantine)   Gid: ( 1000/constantine)
Access: 2017-09-08 00:18:26.243828226 +0300
Modify: 2017-09-07 10:52:33.387136858 +0300
Change: 2017-09-07 10:52:33.387136858 +0300
 Birth: -

Assim, no seu sistema, o UID do arquivo corresponde ao usuário root . No outro sistema, é Domain .

Em caso de trabalho cruzado com sistemas Windows , há mais. Apesar do padrão POSIX não ter tido nenhuma mudança realmente fundamental, os programadores da Microsoft sempre tiveram dificuldades com isso. Durante o curso do Windows NT para o Windows 10, houve três reescritas compatíveis com a implementação . Portanto, para fins de compatibilidade, o Cygwin está usando sua própria implementação do mapeamento de descritores de segurança do Windows para permissões POSIX.

Além disso, você está tentando acessar um sistema de arquivos do Windows através do VirtualBox. O VirtualBox também implementou seu próprio mapeamento, e esse mapeamento não funciona muito bem (como você pode ver alterando as permissões através do chmod, e não vendo as mudanças refletidas) .

Então, agora, você tem 3 implementações no seu sistema, incompatíveis entre si. Esta é a razão de você ver os problemas.

FTR : O VirtualBox é de código aberto, portanto, se você estiver realmente interessado, poderá reescrevê-lo para ser compatível com o Cygwin (já que a implementação é a única compatível com versões anteriores) Implementação POSIX no Windows, tanto quanto eu sei) .

NB: usar um sistema como root é uma prática muito ruim! Especialmente porque você é um desenvolvedor. Considere usar um usuário comum em seu lugar.

    
por Hi-Angel 08.09.2017 / 19:58