Questão Permissão negada para ls / usr / bin no subsistema windows para linux


ls /usr/bin

dá a mensagem de erro:

ls: reading directory '/usr/bin': Permission denied

em wbash.exe. Por essa razão, o bash-completion e o eshell-completion falham ou dão resultados incompletos. Eu gostaria de começar a trabalhar.

Coisas que funcionam:

/usr/bin $ ls -l emacs
lrwxrwxrwx   1 root           root           23 2017-07-31 17:16 emacs -> /etc/alternatives/emacs
/usr/bin $ ls -l gcc-5
-rwxr-xr-x   1 root           root       915736 2017-09-14 06:01 gcc-5
/usr/bin $ ls -ld /usr/bin
drwxr-xr-x   0 root           root          512 2017-12-19 09:45 /usr/bin
/usr/bin $ ls -ld /usr/sbin
drwxr-xr-x   0 root           root          512 2017-12-19 09:45 /usr/sbin
/usr/bin $ ls -ld /
drwxr-xr-x   0 root           root          512 2017-11-17 10:23 /
/usr/bin $ ls -ld /usr
drwxr-xr-x   0 root           root          512 2017-03-30 11:55 /usr

A versão do Windows é: Windows 10 (64 bits), Versão 1703 (Build 15063.786)

o sbin diretório pode ser listado sem problemas e todas as configurações do Windows de bin dentro %USERPROFILE%\AppData\Local\lxss\rootfs\usr disponíveis através do Windows Explorer são as mesmas que para sbin.

Os comandos icacls.exe bin e icacls.exe sbin dentro %USERPROFILE%\AppData\Local\lxss\rootfs\usr dar exatamente a mesma resposta (até a primeira palavra que é bin para bin e sbin para sbin). Portanto, não parece estar relacionado aos atributos extras. Também os comandos icacls.exe bin /verify e icacls.exe sbin /verify não indique erros.

Existe algum recurso relacionado à segurança do Ubuntu (que eu não conheço) que me proíbe de listar o conteúdo do diretório de /usr/bin? (Nesse caso, seria estranho se não proibisse a listagem de /usr/sbin.)


0


origem


o que a saída de ls -ld / e ls -ld /usr ? - Giacomo Catenazzi
@GiacomoCatenazzi Eu adicionei os dois à lista. Nada de surpreendente lá. - Tobias
Então parece ser por causa de atributos extras, veja por exemplo technet.microsoft.com/pt-br/library/cc753525(v=ws.11).aspx - Giacomo Catenazzi
@GiacomoCatenazzi Os comandos icacls.exe bin e icacls.exe sbin dar exatamente a mesma resposta (até a primeira palavra que é bin para bine sbin para sbin). Portanto, não parece estar relacionado aos atributos extras. Isso esta certo? Ou existem alguns truques bacanas para obter ainda mais informações? icacls.exe bin /verify e icacls.exe sbin /verify não produz erros. - Tobias
@GiacomoCatenazzi Eu posso listar o conteúdo de bin (e sbin) sem problemas no Windows (por exemplo, WindowsExplorer ou PowerShell dir bin ou ls bin) - Tobias


Respostas:


Parece muito com um problema de permissões.

Como você verificou que o problema não é com o Windows, então este problema é com as configurações internas do WSL, onde emula permissões do Linux que não existem nativamente no Windows.

Eu não sei exatamente como a WSL faz sua emulação de permissões do Linux. Se ele usa o mecanismo do Windows da ACL, você pode redefinir todos eles:

icacls %localappdata%\lxss /reset /T /C

Se isso não ajudar, e sem um melhor conhecimento de como essas permissões são implementadas, Eu sugeriria reinstalar o WSL:

  1. Faça backup dos seus dados

  2. Desinstale o ambiente do Ubuntu, mas mantenha sua pasta pessoal e reinstale o WSL, usando os comandos:

    lxrun /uninstall
    lxrun /install
    
  3. Se isso não ajudar, reinstale totalmente o ambiente do Ubuntu incluindo a remoção da sua pasta pessoal, digitando:

    lxrun /uninstall /full
    lxrun /install
    

Entre os dois comandos acima, verifique se a pasta %localappdata%\lxss está vazia. Caso contrário, mova seu conteúdo para armazenamento temporário e exclua mais tarde quando não é mais necessário.


0



Lxrun está obsoleto agora. - Biswapriyo
@Biswa: Isto é para o futuro Windows build 16215. O lxrun é o método atual, e provavelmente continuará disponível por algum tempo. - harrymc


Não há problemas de permissão com o cygwin sob $HOME/AppData/Local/lxss/rootfs/usr/bin e fiz alguns testes com pastas de wsl em cygwin. Isso me leva à seguinte solução.

Na festa do cygwin eu fui a $HOME/AppData/Local/lxss/rootfs/usr e execute o seguinte comando:

find bin -mindepth 1 -maxdepth 1 -printf "cp -a %p fix/%p\n" > /temp/fix.sh

Isso criou um script /temp/fix.sh numa pasta /temp que é compartilhado entre cygwin e wsl através de links simbólicos.

Dentro wbash eu fui para /usr/, criou as pastas fix e fix/bin, execute o script e mova o diretório fix/bin para bin-fix.

cd /usr
mkdir -p fix/bin
. /temp/fix.sh
mv fix/bin bin-fix

Assim, wbash me disse que tinha problemas de permissão para bin/head. Ok, eu aceitei isso e re-instalei coreutils como último passo deste procedimento (ver abaixo). Em seguida fechei todos wbash aplicações e wbash em si e voltou para cygwin onde o usr pasta ainda estava aberta.

Lá eu mudei bin fora do caminho e renomeado bin-fix para bin.

mv bin bin.old
mv bin-fix bin

Eu reiniciei wbash e voilá tudo corre bem e ls /usr/bin trabalho.

Como eu já mencionei acima eu re-instalado coreutils como último passo:

sudo aptitude reinstall coreutils

0