Ошибка доступа при выполнении ls /usr/bin в подсистеме Windows для Linux.

Вопрос или проблема

ls /usr/bin

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

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

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

Что работает:

/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 (64bit), Версия 1703 (Build 15063.786)

Каталог sbin может быть показан без проблем, и все настройки Windows для 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.)

Это очень похоже на проблему с правами доступа.

Поскольку вы подтвердили, что проблема не в 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 пуста.
Если нет, переместите ее содержимое в временное хранилище и удалите позже
когда больше не будет нужды.

Нет проблем с правами доступа в 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

Ответ или решение

Конечно, давайте разберемся с проблемой более подробно.

Теория

Ваше сообщение о проблеме с выполнением команды ls /usr/bin в Windows Subsystem for Linux (WSL) говорит о том, что у вас возникли проблемы с доступом к данному каталогу. Система сообщает, что доступ к чтению каталога '/usr/bin' запрещен. Это часто указывает на проблему с правами доступа.

WSL эмулирует Linux-систему внутри Windows, включая эмуляцию прав доступа файлами, что иногда может приводить к неожиданным проблемам. Хотя система активно использует ACL (Списки управления доступом) Windows для управления доступом, но она не всегда точно отражает права, принятые в стандартных Linux-системах.

Пример

Вы пробовали использовать программу icacls.exe для проверки прав доступа как на bin, так и на sbin, и убедились, что они одинаковы. Это указывает на то, что проблема не связана непосредственно с ACL Windows. Также вы попробовали перенастроить права доступа с помощью icacls.exe, но это, вероятно, не решило проблему.

Применение

  1. Проверка и восстановление прав доступа: Если стандартные процедуры вроде icacls.exe не помогли, можно попробовать более кардинальную меру — полное восстановление WSL:

    lxrun /uninstall /full
    lxrun /install

    Обратите внимание, что это удалит все данные в WSL, поэтому перед началом операции обязательно создайте резервные копии всех важных данных.

  2. Альтернативное решение: Один из практических подходов, описанных вами, заключается в использовании Cygwin для копирования содержимого каталога и затем его восстановления в WSL:

    • В Cygwin: Создайте скрипт для копирования файлов и исполните его, чтобы создать исправленную копию каталога.
    • В WSL: Переместите старый каталог bin, установите исправленное содержимое.
    • После этих действий перезапустите wbash и, если необходимо, переустановите пакеты, например coreutils, чтобы восстановить функциональность.

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

Следуя приведенным рекомендациям, вы сможете устранить возникшую проблему и продолжить использовать WSL в полном объеме.

Оцените материал
Добавить комментарий

Капча загружается...