Вопрос или проблема
Я перекрестно публикую это из Emacs stack exchange по предложению кого-то оттуда. Emacs создает директорию в Windows 10 (Pro) из WSL2, которая имеет странные проблемы с правами доступа. Я вижу директорию в Проводнике и с помощью ls
из родительского каталога, но не могу просмотреть содержимое или изменить директорию. Она либо сообщает, что у меня нет прав доступа, либо утверждает, что такой директории не существует. Однако некоторые исполнимые файлы имеют доступ, в частности 7-Zip.
Это мой домашний компьютер, поэтому я могу делать с ним все, что захочу. Я попытался изменить права доступа к папке, но это, кажется, не помогло. Я могу удалить папку из WSL2, но Emacs просто воссоздает ее с той же проблемой.
Права доступа Windows
Я посмотрел на права доступа нескольких директорий. Они, по-видимому, все такие же, как eln-cache, за исключением aux.
aux (каталог с проблемой)
Вкладка Общие: Только для чтения
и Скрытый
не выбраны. Вкладка Безопасность пользователя, Группа или имена пользователей:
Все
: (специальные разрешения)Ограниченные
: (специальные разрешения)Система
: (специальные разрешения)<Мой пользователь>
: (все, кроме специальных разрешений)Администраторы
: (специальные разрешения)
eln-cache (работает как ожидалось)
Вкладка Общие: Только для чтения
выбрана (черный квадрат, не галочка), но Скрытый
нет. Вкладка Безопасность пользователя, Группа или имена пользователей:
Аутентифицированные пользователи
: (модификация, чтение и выполнение, список содержимого папки, чтение, запись)Система
: (все, кроме специальных разрешений)Администраторы
: (все, кроме специальных разрешений)<Мой пользователь>
: (чтение и выполнение, список содержимого папки, чтение)
Права доступа Linux
drwxrwxrwx 1 <my user> <my user> 512 Feb 20 21:45 .
drwxrwxrwx 1 <my user> <my user> 512 Feb 20 16:07 ..
drwxrwxrwx 1 <my user> <my user> 512 Feb 21 14:56 aux
Сообщения об ошибках
ls : Не удается найти путь ‘C:\Development\.emacs.d\aux’, потому что он не существует.
Из Проводника (обратите внимание, что нажатие кнопки Продолжить ничего не делает):
У вас в данный момент нет разрешения на доступ к этой папке. Нажмите
«Продолжить», чтобы получить постоянный доступ к этой папке.
Ответ или решение
Конечно, вопрос, связанный с проблемами доступа к директориям при использовании WSL2 на Windows 10, может быть достаточно сложным, учитывая промежуточный слой, который представляет собой Windows Subsystem for Linux. В данном случае у вас возникла уникальная ситуация, где Emacs создает директорию, к которой потом невозможно получить доступ ни из Windows, ни из других программ, работающих под WSL.
Теория
Когда WSL2 создает файлы или директории в файловой системе Windows, он задействует механизм совместимости, который позволяет Linux-программам работать с NTFS-файловой системой Windows. Однако этот процесс не всегда совершенный, и могут возникать проблемы, связанные с несовпадением прав доступа или конфигураций между двумя системами. В данной ситуации, возможность доступа к директории варьируется в зависимости от инструментов, используемых для ее просмотра или изменения. Это может быть вызвано различиями в интерпретации прав доступа Windows и Linux.
Пример
Как видно из вашего описания, структура прав доступа продемонстрирована двумя разделами: Windows и Linux правами. В Windows для проблемной директории aux
все группы, включая Everyone
, Restricted
, System
, <My user>
, и Administrators
имеют только особые права доступа. Это контрастирует с работающей директорией eln-cache
, где Authenticated Users
имеют стандартный набор прав на модификацию, чтение и запись.
Из примера видно, что для директории aux
Windows может применять более строгие ограничения, обусловленные "особыми правами", что может влиять на возможность ее просмотра и модификации.
Применение
Чтобы устранить проблему, можно выполнить следующие шаги:
-
Проверка имени директории: Имя
aux
является специальным в Windows. Дело в том, что Windows зарезервировала определенные имена, такие какaux
,con
,nul
и другие устройства DOS, для использования системой. Замена имени директории на другое, не зарезервированное, может решить проблему. -
Настройки прав доступа в Windows:
- Откройте свойства директории из проводника и перейдите на вкладку "Безопасность".
- Нажмите "Изменить", чтобы открыть меню редактирования прав.
- Добавьте вашу учетную запись пользователя или группу
Authenticated Users
. - Предоставьте необходимые права, такие как "Чтение и исполнение", "Список содержимого папки" и "Чтение". Если необходимо, можно также добавить право на запись.
-
Проверка прав в Linux:
- Разрешения, показанные как
drwxrwxrwx
, означают, что все пользователи могут читать, писать и исполнять файлы внутри. Это может быть проблемой с точки зрения безопасности. Однако, для устранения текущей проблемы, убедитесь, что Linux пользователь, под которым вы работаете, имеет полный доступ.
- Разрешения, показанные как
-
Тестирование доступности:
- После изменения имени и прав доступа, протестируйте доступ к директории и возможность в ней работать как из проводника Windows, так и через WSL.
-
Тактические шаги в Emacs:
- Настройки Emacs могут быть важными для предотвращения повторного создания директории с проблемами. Убедитесь, что Emacs сконфигурирован использовать новое имя директории. Это можно сделать через конфигурационные файлы Emacs.
Эти действия должны помочь вам решить проблему с доступом к директории, созданной из WSL через Emacs. И наконец, всегда стоит иметь в виду, что работа между двумя различными операционными системами требует особого внимания к вопросу совместимости и управления правами доступа. Надеюсь, что эти советы помогут наладить корректное взаимодействие между Windows и WSL в вашем случае.