В ls / usr / bin отказано в доступе для подсистемы windows для linux

3180
Tobias

ls /usr/bin

выдает сообщение об ошибке:

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

на wbash.exe. По этой причине завершение bash и завершение eshell не дают результатов или дают неполные результаты. Я хотел бы, чтобы это работало.

Вещи, которые работают:

/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: Windows 10 (64-разрядная версия), версия 1703 (сборка 15063.786)

sbinКаталог может быть перечислен без проблем и всех окна настроек binв %USERPROFILE%\AppData\Local\lxss\rootfs\usrналичии через WindowsExplorer то же, что те, для sbin.

Команды icacls.exe binи icacls.exe sbinвнутри %USERPROFILE%\AppData\Local\lxss\rootfs\usrдают одинаковый ответ (вплоть до первого слова, которое binдля binи sbinдля sbin). Так что, похоже, это не связано с дополнительными атрибутами. Также команды icacls.exe bin /verifyи icacls.exe sbin /verifyне указывают на какие-либо ошибки.

Может быть, есть какая-то связанная с безопасностью функция ubuntu (я не знаю), которая запрещает мне перечислять содержимое каталога /usr/bin? (В этом случае было бы странно, если бы оно не запрещало внесение в список /usr/sbin.)

0
что это вывод `ls -ld /` и `ls -ld / usr`? Giacomo Catenazzi 6 лет назад 0
@GiacomoCatenazzi Я добавил этих двоих в список. Ничего удивительного там нет. Tobias 6 лет назад 0
Так что, похоже, из-за дополнительных атрибутов, посмотрите, например, https://technet.microsoft.com/en-us/library/cc753525(v=ws.11).aspx Giacomo Catenazzi 6 лет назад 0
@GiacomoCatenazzi Команды `icacls.exe bin` и` icacls.exe sbin` дают одинаковый ответ (вплоть до первого слова, которое `bin` для` bin` и `sbin` для` sbin`). Так что, похоже, это не связано с дополнительными атрибутами. Это правильно? Или есть некоторые хитрости, чтобы получить еще больше информации? `icacls.exe bin / verify` и` icacls.exe sbin / verify` не выдают никаких ошибок. Tobias 6 лет назад 0
@GiacomoCatenazzi Я могу без проблем перечислить содержимое `bin` (и` sbin`) под окнами (например, WindowsExplorer или PowerShell `dir bin` или` ls bin`) Tobias 6 лет назад 0
`/ Usr / bin / ls / usr / bin` дает разные результаты? (Я начинаю думать, что это ошибка встроенного ls, поэтому с wbash). Ev. Вы можете проверить, есть ли у вас специальный псевдоним. Giacomo Catenazzi 6 лет назад 0
@GiacomoCatenazzi `/ bin / ls / usr / bin` также дает« разрешение запрещено », а« ls »из« eshell », над которым я работаю, встроен в« eshell »и не использует« wbash »« ls ». Я также пробовал `ls` на` wbash` с теми же результатами. Tobias 6 лет назад 0
Я думаю, что вам удалось настроить свои разрешения таким образом, чтобы оболочка не могла получить доступ к этим папкам. Эти разрешения могут быть в Windows, а не в оболочке. harrymc 6 лет назад 0
@ Бисва Прежде всего: Спасибо всем, кто пытался помочь. Я попытался добавить моего пользователя в группу `sudo` с помощью предложенной команды. `groups` показывает` sudo` среди других. К сожалению, это не помогает решить проблему. Tobias 6 лет назад 0
@harrymc После всех тестов, которые я выполнил и процитировал в своем вопросе (особенно с `icacls.exe`), вы все еще думаете, что это может быть проблемой с разрешениями на уровне Windows? Я могу без проблем перечислить содержимое папки изнутри Windows (например, `powershell` и` WindowsExplorer`). Tobias 6 лет назад 0
Основываясь на вашей информации, я добавил ответ. harrymc 6 лет назад 0

2 ответа на вопрос

0
harrymc

Это очень похоже на проблему с разрешениями.

Поскольку вы убедились, что проблема не в Windows, то эта проблема связана с внутренними настройками WSL, где он эмулирует разрешения Linux, которые изначально не существуют в Windows.

Я не знаю точно, как WSL эмулирует разрешения Linux. Если он использует механизм Windows ACL, вы можете сбросить их все:

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

Если это не помогает, и без лучшего знания о том, как реализованы эти разрешения, я бы предложил переустановить WSL:

  1. Сделайте резервную копию ваших данных

  2. Удалите среду Ubuntu, но сохраните домашнюю папку, затем переустановите WSL, используя команды:

    lxrun /uninstall lxrun /install 
  3. Если это не помогло, полностью переустановите среду Ubuntu, включая удаление вашей домашней папки, введя:

    lxrun /uninstall /full lxrun /install 

В промежутке между двумя приведенными выше командами убедитесь, что папка %localappdata%\lxssпуста. Если нет, переместите его содержимое во временное хранилище и удалите позже, когда оно больше не требуется.

Lxrun устарела сейчас. Biswapriyo 6 лет назад 0
@Biswa: Это для будущей сборки Windows 16215. lxrun является текущим методом, и, скорее всего, будет доступен в течение некоторого времени. harrymc 6 лет назад 0
0
Tobias

С cygwin нет проблем с правами доступа, $HOME/AppData/Local/lxss/rootfs/usr/binи я провел несколько тестов с папками wsl для игровых площадок под cygwin. Это привело меня к следующему решению.

В Bash Cygwin я пошел $HOME/AppData/Local/lxss/rootfs/usrи запустить следующую команду:

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

Это создало скрипт /temp/fix.shв папке, /tempкоторая используется Cygwin и WSL через символические ссылки.

В wbashя пошел /usr/, создал папки fixи fix/binзапустить скрипт, и переехал в каталог fix/binс bin-fix.

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

Таким образом, wbashсказал мне, что у него были проблемы с разрешением bin/head. Хорошо, я принял это и переустановил coreutilsкак последний шаг этой процедуры (см. Ниже). Затем я закрыл все wbashприложения и wbashсам и вернулся в cygwin, где usrпапка была еще открыта.

Там я binушел с дороги и переименовал bin-fixв bin.

mv bin bin.old mv bin-fix bin 

Я перезапустил wbashи вуаля все работает отлично и ls /usr/binработает.

Как я уже упоминал выше, я переустановил coreutilsв качестве последнего шага:

sudo aptitude reinstall coreutils 

Похожие вопросы