Autorisation refusée pour ls / usr / bin sur le sous-système Windows pour Linux

0

ls /usr/bin

donne le message d'erreur:

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

sur wbash.exe. Pour cette raison, achèvement de bash et achèvement de eshell échouent ou donnent des résultats incomplets. Je voudrais le faire fonctionner.

Les choses qui fonctionnent:

/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

La version Windows est la suivante: Windows 10 (64 bits), version 1703 (build 15063.786)

le sbin répertoire peut être répertorié sans problèmes et tous les paramètres de Windows de bin dans %USERPROFILE%\AppData\Local\lxss\rootfs\usr disponibles via Windows Explorer sont les mêmes que ceux pour sbin.

Les commandes icacls.exe bin et icacls.exe sbin dans %USERPROFILE%\AppData\Local\lxss\rootfs\usr donner exactement la même réponse (jusqu'au premier mot qui est bin pour bin et sbin pour sbin ). Donc, cela ne semble pas être lié aux attributs supplémentaires. Aussi les commandes icacls.exe bin /verify et icacls.exe sbin /verify n'indiquez aucune erreur.

Existe-t-il une fonctionnalité d'ubuntu liée à la sécurité (je ne sais pas) qui m'empêche de lister le contenu du répertoire de /usr/bin? (Dans ce cas, il serait étrange de ne pas interdire l’inscription de /usr/sbin.)

Tobias
la source
quelle est la sortie de ls -ld / et ls -ld /usr ?
Giacomo Catenazzi
@GiacomoCatenazzi J'ai ajouté ces deux-là à la liste. Rien d'étonnant là-bas.
Tobias
Il semble donc que ce soit à cause d'attributs supplémentaires, regardez par exemple. technet.microsoft.com/en-us/library/cc753525(v=ws.11).aspx
Giacomo Catenazzi
@GiacomoCatenazzi Les commandes icacls.exe bin et icacls.exe sbin donner exactement la même réponse (jusqu'au premier mot qui est bin pour bin et sbin pour sbin ). Donc, cela ne semble pas être lié aux attributs supplémentaires. Est-ce correct? Ou y at-il des astuces astucieuses pour obtenir encore plus d'informations? icacls.exe bin /verify et icacls.exe sbin /verify ne génère aucune erreur.
Tobias
@GiacomoCatenazzi Je peux lister le contenu de bin (et sbin ) sans problème sous Windows (par exemple, WindowsExplorer ou PowerShell dir bin ou ls bin )
Tobias

Réponses:

0

Cela ressemble beaucoup à un problème d'autorisations.

Comme vous avez vérifié que le problème ne vient pas de Windows, alors ce problème est avec les paramètres internes WSL, où il émule des autorisations Linux qui n'existent pas de manière native sur Windows.

Je ne sais pas exactement comment WSL émule les autorisations Linux. S'il utilise le mécanisme Windows de la liste de contrôle d'accès, vous pouvez tous les réinitialiser en:

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

Si cela ne vous aide pas, et sans une meilleure connaissance de la mise en œuvre de ces autorisations, Je suggère de réinstaller WSL:

  1. Sauvegardez vos données

  2. Désinstallez l’environnement Ubuntu tout en conservant votre dossier personnel, puis réinstallez WSL à l'aide des commandes suivantes:

    lxrun /uninstall
    lxrun /install
    
  3. Si cela n'a pas aidé, réinstallez complètement l'environnement Ubuntu y compris la suppression de votre dossier personnel, en entrant:

    lxrun /uninstall /full
    lxrun /install
    

Entre les deux commandes ci-dessus, vérifiez que le dossier %localappdata%\lxss est vide. Sinon, déplacez son contenu dans la mémoire temporaire et supprimez-le plus tard lorsqu'il n'est plus nécessaire.

harrymc
la source
Lxrun est obsolète maintenant.
Biswapriyo
@Biswa: Ceci concerne la prochaine version de Windows 16215. La méthode actuelle est lxrun, et restera probablement disponible pendant un certain temps.
harrymc
0

Il n’ya pas de problèmes de permission avec cygwin sous $HOME/AppData/Local/lxss/rootfs/usr/bin et j'ai fait des tests avec des dossiers de jeux de wsl sous cygwin. Cela m'a conduit à la solution suivante.

Dans le bash de cygwin je suis allé à $HOME/AppData/Local/lxss/rootfs/usr et lancez la commande suivante:

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

Cela a créé un script /temp/fix.sh dans un dossier /temp qui est partagé entre cygwin et wsl via des liens symboliques.

Dans wbash je suis allé à /usr/, créé les dossiers fix et fix/bin, lancez le script et déplacez le répertoire fix/bin à bin-fix.

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

Ainsi, wbash m'a dit qu'il avait des problèmes de permission pour bin/head. D'accord, j'ai accepté et réinstallé coreutils comme dernière étape de cette procédure (voir ci-dessous). Ensuite j'ai tout fermé wbash applications et wbash lui-même et est retourné à cygwin où le usr le dossier était toujours ouvert.

Là j'ai déménagé bin hors du chemin et renommé bin-fix à bin.

mv bin bin.old
mv bin-fix bin

J'ai recommencé wbash et voila tout se passe bien et ls /usr/bin travaux.

Comme je l'ai déjà mentionné ci-dessus, j'ai réinstallé coreutils comme dernière étape:

sudo aptitude reinstall coreutils
Tobias
la source