Разрешения файлов для WSL

На этой странице представлены сведения об интерпретации разрешений файлов Linux в подсистеме Windows для Linux, особенно при получении доступа к ресурсам в файловой системе NT под управлением Windows. В этой документации предполагается, что вы имеете базовое представление о структуре разрешений файловой системы Linux и командах umask.

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

Метаданные WSL в файлах Windows

Если метаданные включены в качестве параметра подключения в WSL, вы можете добавить и интерпретировать расширенные атрибуты в файлах Windows NT, чтобы предоставить разрешения файловой системы Linux.

WSL может добавлять четыре расширенных атрибута NTFS:

Имя атрибута Описание
$LXUID Идентификатор пользователя владельца
$LXGID Идентификатор владельца группы
$LXMOD Файловый режим (восьмеричная система и типы разрешений файловой системы, например: 0777)
$LXDEV Устройство (если это файл устройства)

Кроме того, любой файл, который не является обычным файлом или каталогом (например, символические ссылки, файлы FIFO, блочные устройства, сокеты Unix и символьные устройства) также имеет точку повторного анализа NTFS. Это позволяет быстрее определить тип файла в определенном каталоге, не запрашивая его расширенных атрибутов.

Сценарии доступа к файлам

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

Получение доступа к файлам в файловой системе диска Windows (DrvFS) из Linux

Эти сценарии возникают при получении доступа к файлам Windows из WSL, скорее всего с помощью /mnt/c.

Чтение разрешений файлов из существующего файла Windows

Результат будет зависеть от того, содержит ли файл уже существующие метаданные.

Файл DrvFS не имеет метаданных (по умолчанию)

Если файл не имеет связанных метаданных, мы преобразовываем действующие разрешения пользователя Windows в биты чтения, записи или выполнения и назначаем их этому файлу в качестве того же значения для пользователя, группы и других элементов. Например, если учетная запись пользователя Windows имеет доступ на чтение и выполнение, но не имеет доступа на запись в файл, для пользователя, группы и других элементов она будет отображаться как r-x. Если для файла в Windows задан атрибут "только для чтения", доступ на запись в Linux не предоставляется.

Файл содержит метаданные

Если файл содержит метаданные, мы будем использовать их значения вместо преобразованных действующих разрешений пользователя Windows.

Изменение разрешений файла в существующем файле Windows с помощью команды chmod

Результат будет зависеть от того, содержит ли файл уже существующие метаданные.

Файл chmod не имеет метаданных (по умолчанию)

Файл chmod может иметь только один эффект. Если вы удалите все атрибуты записи файла, в файле Windows будет задан атрибут "только для чтения", так как это то же поведение, что и в общей файловой системе Интернета (CIFS), которая является клиентом SMB в Linux.

Файл chmod содержит метаданные

В зависимости от уже существующих метаданных файла, файл chmod будет изменен или будут добавлены метаданные.

Помните, что вы не можете предоставить себе больше прав доступа, чем вы имели в Windows, даже если в метаданных указано, что это возможно. Например, можно задать, чтобы в метаданных отображалось, что у вас есть разрешения на запись в файл с помощью chmod 777, но если вы попытаетесь получить доступ к этому файлу, запись будет невозможна. Это происходит благодаря взаимодействию, так как любые команды чтения или записи направляются в файлы Windows через разрешения пользователя Windows.

Создание файла в DriveFS

Результат зависит от того, включены метаданные или нет.

Метаданные не включены (по умолчанию)

Разрешения Windows для созданного файла будут такими же, как если бы вы создали файл в Windows без конкретного дескриптора безопасности. Он наследует родительские разрешения.

Метаданные включены

Биты разрешений файла задаются в соответствии с командой umask в Linux, и файл будет сохранен с метаданными.

Какому пользователю или группе Linux принадлежит файл?

Результат будет зависеть от того, содержит ли файл уже существующие метаданные.

Файл пользователя не имеет метаданных (по умолчанию)

В сценарии по умолчанию при автоподключении дисков Windows мы указываем, что идентификатору пользователя (UID) любого файла присваивается идентификатор пользователя WSL, а идентификатору группы (GID) — идентификатор главной группы пользователя WSL.

Файл пользователя содержит метаданные

Идентификаторы пользователя и группы, указанные в метаданных, применяются в качестве пользователя владельца и владельца группы файла.

Получение доступа к файлам Linux из Windows с помощью \\wsl$

Для получения доступа к файлам Linux с помощью \\wsl$ будет использоваться пользователь по умолчанию дистрибутива WSL. Таким образом, все приложения Windows, обращающиеся к файлам Linux, будут иметь те же разрешения, что и пользователь по умолчанию.

Создание поля

Параметр umask по умолчанию применяется при создании файла в дистрибутиве WSL из Windows. По умолчанию параметр umask имеет значение 022. Или другими словами он позволяет использовать все разрешения, кроме разрешения на запись, в группах и других элементах.

Доступ к файлам в корневой файловой системе Linux из Linux

Во всех файлах, созданных, измененных или доступ к которым осуществлялся с помощью корневой файловой системы Linux, используются стандартные соглашения Linux. Например, к только что созданному файлу применяется команда umask.

Настройка разрешений файлов

Вы можете настроить разрешения файлов в дисках Windows с помощью параметров подключения в wsl.conf. Параметры подключения позволяют задать маски разрешений umask, dmask и fmask. umask применяется ко всем файлам, dmask — только к каталогам, а fmask — только к файлам. Затем эти маски разрешений подвергаются логической операции ИЛИ во время применения к файлам, например: Если у вас есть значение umask для 023 и значение fmask для 022, то полученная маска разрешений для файлов будет 023.

Дополнительные сведения см. в разделе Добавление параметров конфигурации для дистрибутивов с использованием wsl.conf.