Permissões de arquivo para WSL

Esta página detalha como as permissões de arquivo do Linux são interpretadas no Subsistema do Windows para Linux, especialmente ao acessar recursos dentro do Windows no sistema de arquivos NT. Esta documentação pressupõe uma compreensão básica da estrutura de permissões do sistema de arquivos do Linux e do comando umask.

Ao acessar arquivos do Windows do WSL, as permissões de arquivo são calculadas usando as permissões do Windows ou são lidas de metadados que foram adicionados ao arquivo pelo WSL. Esses metadados não são habilitados por padrão.

Metadados do WSL em arquivos do Windows

Quando os metadados são habilitados como uma opção de montagem no WSL, os atributos estendidos em arquivos do Windows NT podem ser adicionados e interpretados para fornecer permissões do sistema de arquivos do Linux.

O WSL pode adicionar quatro atributos estendidos do NTFS:

Nome do atributo Descrição
$LXUID ID de proprietário do usuário
$LXGID ID de proprietário do grupo
$LXMOD Modo de arquivo (tipo e octals de permissão de sistemas de arquivos, por exemplo: 0777)
$LXDEV Dispositivo, se for um arquivo de dispositivo

Além disso, um arquivo que não seja um arquivo ou diretório regular (por exemplo, symlinks, FIFOs, dispositivos de bloco, soquetes UNIX e dispositivos de caracteres) também tem um ponto de nova análise do NTFS. Isso torna muito mais rápida a determinação do tipo de arquivo em um determinado diretório sem precisar consultar seus atributos estendidos.

Cenários de acesso a arquivos

Abaixo está uma descrição de como as permissões são determinadas ao acessar arquivos de diferentes modos usando o Subsistema do Windows para Linux.

Como acessar arquivos no DrvFS (sistema de arquivos da unidade) do Windows no Linux

Esses cenários ocorrem quando você está acessando os arquivos do Windows no WSL, provavelmente por meio de /mnt/c.

Como ler permissões de arquivo de um arquivo existente do Windows

O resultado depende de se o arquivo já tem metadados existentes.

O arquivo do DrvFS não tem metadados (padrão)

Se o arquivo não tiver metadados associados a ele, converteremos as permissões efetivas do usuário do Windows para ler/gravar/executar bits e defini-los com o mesmo valor para usuário, grupo e outros. Por exemplo, se a sua conta de usuário do Windows tiver acesso de leitura e execução, mas não tiver acesso de gravação no arquivo, isso será mostrado como r-x para usuário, grupo e outros. Se o arquivo tiver o atributo 'Somente leitura' definido no Windows, não concederemos acesso de gravação no Linux.

O arquivo tem metadados

Se o arquivo tiver metadados presentes, bastará usar esses valores de metadados em vez de converter as permissões efetivas do usuário do Windows.

Como alterar as permissões de arquivo de um arquivo existente do Windows usando chmod

O resultado depende de se o arquivo já tem metadados existentes.

O arquivo do chmod não tem metadados (padrão)

O chmod terá apenas um efeito. Se você remover todos os atributos de gravação de um arquivo, o atributo 'somente leitura' no arquivo do Windows será definido, pois esse é o mesmo comportamento que o CIFS (Common Internet File System), que é o cliente SMB (Protocolo SMB) no Linux.

O arquivo do chmod tem metadados

O chmod será alterado ou adicionará metadados dependendo dos metadados existentes no arquivo.

Tenha em mente que você não pode dar a si mesmo mais acesso do que o que tem no Windows, mesmo que os metadados indiquem que é o caso. Por exemplo, você pode definir os metadados para exibir que você tem permissões de gravação em um arquivo usando chmod 777, mas, se você tentar acessar esse arquivo, não conseguirá gravar nele. Isso acontece devido à interoperabilidade, pois comandos de leitura ou gravação para arquivos do Windows são roteados por meio de suas permissões de usuário do Windows.

Como criar um arquivo no DriveFS

O resultado depende de se os metadados estão habilitados.

Os metadados não estão habilitados (padrão)

As permissões do Windows do arquivo recém-criado serão as mesmas que seriam caso o arquivo tivesse sido criado no Windows sem um descritor de segurança específico; ele herdará as permissões do pai.

Os metadados estão habilitados

Os bits de permissão do arquivo são definidos para seguir o umask do Linux e o arquivo será salvo com metadados.

Qual usuário e grupo do Linux é proprietário do arquivo?

O resultado depende de se o arquivo já tem metadados existentes.

O arquivo do usuário não tem metadados (padrão)

No cenário padrão, ao montar automaticamente as unidades do Windows, especificamos que a UID (ID de usuário) de qualquer arquivo é definida como a ID de usuário do seu usuário do WSL e a GID (ID do grupo) é definida como a ID do grupo principal do seu usuário do WSL.

O arquivo do usuário tem metadados

A UID e a GID especificadas nos metadados são aplicadas como proprietário do usuário e proprietário do grupo do arquivo.

Como acessar arquivos do Linux no Windows usando \\wsl$

O acesso a arquivos do Linux via \\wsl$ usará o usuário padrão da sua distribuição do WSL. Portanto, um aplicativo do Windows acessando os arquivos do Linux terá as mesmas permissões que o usuário padrão.

Como criar um arquivo

O umask padrão é aplicado ao criar um arquivo dentro de uma distribuição do WSL no Windows. O umask padrão é 022, ou seja, ele concede todas as permissões exceto as permissões de gravação a grupos e outros.

Como acessar arquivos no sistema de arquivos raiz do Linux no Linux

Todos os arquivos criados, modificados ou acessados no sistema de arquivos raiz do Linux seguem convenções padrão do Linux, como aplicação de umask a um arquivo recém-criado.

Como configurar permissões de arquivo

Você pode configurar suas permissões de arquivo dentro de suas unidades do Windows usando as opções de montagem em wsl.conf. As opções de montagem permitem que você defina as máscaras de permissões umask, dmask e fmask. A umask é aplicada a todos os arquivos, a dmask é aplicada apenas aos diretórios e a fmask é aplicada apenas aos arquivos. Essas máscaras de permissão passam por uma operação OR lógica antes de serem aplicadas a arquivos, por exemplo: Se você tiver um valor umask de 023 e um valor fmask de 022, a máscara de permissões resultante para os arquivos será 023.

Saiba mais: Opções de configuração por distribuição com wsl.conf.