Berechtigung für ls / usr / bin unter Windows-Subsystem für Linux verweigert

3215
Tobias

ls /usr/bin

gibt die Fehlermeldung:

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

auf wbash.exe. Aus diesem Grund schlagen die Bash-Completion und die Eshell-Completion fehl oder liefern unvollständige Ergebnisse. Ich möchte, dass es funktioniert.

Dinge, die funktionieren:

/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 

Windows-Version ist: Windows 10 (64-Bit), Version 1703 (Build 15063.786)

Das sbinVerzeichnis kann ohne Probleme aufgelistet werden und alle Windows-Einstellungen von binin %USERPROFILE%\AppData\Local\lxss\rootfs\usrvia WindowsExplorer verfügbar sind die gleichen wie für sbin.

Die Befehle icacls.exe binund icacls.exe sbininnerhalb %USERPROFILE%\AppData\Local\lxss\rootfs\usrgeben genau die gleiche Antwort (bis zum ersten Wort binfür binund sbinfür sbin). Es scheint also nicht auf die zusätzlichen Attribute zurückzuführen zu sein. Auch die Befehle icacls.exe bin /verifyund icacls.exe sbin /verifyzeigen keine Fehler an.

Gibt es möglicherweise eine sicherheitsbezogene Funktion von Ubuntu (die ich nicht kenne), die es mir untersagt, den Inhalt des Verzeichnisses aufzulisten /usr/bin? (In diesem Fall wäre es merkwürdig, wenn die Auflistung von nicht verboten würde /usr/sbin.)

0
was ist die Ausgabe von "ls -ld /" und "ls -ld / usr"? Giacomo Catenazzi vor 6 Jahren 0
@ GiacomoCatenazzi Ich habe diese beiden der Liste hinzugefügt. Nichts überraschend dort. Tobias vor 6 Jahren 0
Es scheint also aufgrund von zusätzlichen Attributen zu sein, schauen Sie beispielsweise nach https://technet.microsoft.com/en-us/library/cc753525(v=ws.11).aspx Giacomo Catenazzi vor 6 Jahren 0
@GiacomoCatenazzi Die Befehle `icacls.exe bin` und` icacls.exe sbin` geben genau die gleiche Antwort (bis auf das erste Wort `bin` für` bin`und `sbin` für` sbin`). Es scheint also nicht auf die zusätzlichen Attribute zurückzuführen zu sein. Ist das richtig? Oder gibt es ein paar nette Tricks, um noch mehr Informationen zu erhalten? `icacls.exe bin / verify` und` icacls.exe sbin / verify` geben keine Fehler aus. Tobias vor 6 Jahren 0
@GiacomoCatenazzi Ich kann den Inhalt von `bin` (und` sbin`) ohne Probleme unter Windows auflisten (z. B. WindowsExplorer oder PowerShell `dir bin` oder` ls bin`) Tobias vor 6 Jahren 0
Ergibt `/ usr / bin / ls / usr / bin` andere Ergebnisse? (Ich fange an zu glauben, dass es ein Fehler des eingebauten ls ist, also mit wbash). Ev. Sie können überprüfen, ob Sie einen speziellen Alias ​​haben. Giacomo Catenazzi vor 6 Jahren 0
@GiacomoCatenazzi `/ bin / ls / usr / bin` gibt auch eine 'Erlaubnis verweigert' und das` ls` von `eshell`, an dem ich gerade arbeite, ist in` eshell` eingebaut und verwendet nicht das `wbash`` ls`. Ich habe auch "ls" auf "wbash" mit den gleichen Ergebnissen versucht. Tobias vor 6 Jahren 0
Ich denke, Sie haben es geschafft, Ihre Berechtigungen so festzulegen, dass die Shell nicht auf diese Ordner zugreifen kann. Diese Berechtigungen können in Windows und nicht in der Shell sein. harrymc vor 6 Jahren 0
@Biswa Zunächst einmal: Danke an alle, die versucht haben zu helfen. Ich habe versucht, meinen Benutzer zur Gruppe `sudo` mit dem vorgeschlagenen Befehl hinzuzufügen. "groups" zeigt unter anderem "sudo". Leider hilft es nicht, das Problem zu lösen. Tobias vor 6 Jahren 0
@ harrymc Nach all den Tests, die ich durchgeführt und in meiner Frage zitiert habe (insbesondere bei "icacls.exe"), glauben Sie immer noch, dass dies ein Berechtigungsproblem auf Windows-Ebene sein kann? Ich kann den Ordnerinhalt ohne Probleme innerhalb von Windows auflisten (z. B. `powershell` und` WindowsExplorer`). Tobias vor 6 Jahren 0
Basierend auf Ihren Informationen habe ich eine Antwort hinzugefügt. harrymc vor 6 Jahren 0

2 Antworten auf die Frage

0
harrymc

Es sieht sehr nach einem Berechtigungsproblem aus.

Wenn Sie sich vergewissert haben, dass das Problem nicht bei Windows liegt, gilt dieses Problem bei den internen Einstellungen der WSL. Hier werden Linux-Berechtigungen emuliert, die unter Windows nicht vorhanden sind.

Ich weiß nicht genau, wie WSL die Linux-Berechtigungen emuliert. Wenn der Windows-Mechanismus der ACL verwendet wird, können Sie sie alle wie folgt zurücksetzen:

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

Wenn dies nicht hilft und ohne zu wissen, wie diese Berechtigungen implementiert werden, würde ich vorschlagen, WSL erneut zu installieren:

  1. Sichern Sie Ihre Daten

  2. Deinstallieren Sie die Ubuntu-Umgebung, behalten Sie jedoch den Basisordner bei, und installieren Sie die WSL mithilfe der folgenden Befehle erneut:

    lxrun /uninstall lxrun /install 
  3. Wenn dies nicht geholfen hat, installieren Sie die Ubuntu-Umgebung vollständig neu, und entfernen Sie Ihren Heimatordner. Geben Sie dazu Folgendes ein:

    lxrun /uninstall /full lxrun /install 

Vergewissern Sie sich zwischen den beiden obigen Befehlen, dass der Ordner %localappdata%\lxssleer ist. Wenn nicht, verschieben Sie den Inhalt in den temporären Speicher und löschen Sie ihn später, wenn er nicht mehr benötigt wird.

Lxrun ist jetzt veraltet. Biswapriyo vor 6 Jahren 0
@Biswa: Dies ist für den kommenden Windows-Build 16215 bestimmt. Lxrun ist die aktuelle Methode und wird höchstwahrscheinlich noch einige Zeit verfügbar sein. harrymc vor 6 Jahren 0
0
Tobias

Es gibt keine Berechtigungsprobleme mit cygwin $HOME/AppData/Local/lxss/rootfs/usr/binund ich habe einige Tests mit Spielplatzordnern von wsl unter cygwin durchgeführt. Das führte mich zu folgender Lösung.

In der Bash von Cygwin habe ich $HOME/AppData/Local/lxss/rootfs/usrfolgenden Befehl ausgeführt und ausgeführt:

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

Dadurch wurde ein Skript /temp/fix.shin einem Ordner erstellt /temp, der über symbolische Links von cygwin und wsl gemeinsam genutzt wird.

In wbashging ich zu /usr/, erstellte die Ordner fixund fix/binführte das Skript aus und verschob das Verzeichnis fix/binnach bin-fix.

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

Dabei wbasherzählte mir, dass es Erlaubnisprobleme für hatte bin/head. Okay, ich habe das akzeptiert und coreutilsals letzten Schritt dieses Verfahrens neu installiert (siehe unten). Als nächstes schloss ich alle wbashAnwendungen und sich wbashselbst und ging zurück zu cygwin, wo der usrOrdner noch geöffnet war.

Dort bin ich binweggegangen und bin-fixhabe umbenannt bin.

mv bin bin.old mv bin-fix bin 

Ich habe wieder angefangen wbashund voilá läuft alles gut und ls /usr/binfunktioniert.

Wie ich oben schon erwähnt habe, habe ich coreutilsals letzten Schritt neu installiert :

sudo aptitude reinstall coreutils