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

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

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

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

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

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

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

Кроме того, любой файл, который не является обычным файлом или каталогом (например, symlinks, FIFOs, блочные устройства, 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 и группа Linux владеет файлом?

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

У пользовательского файла нет метаданных (по умолчанию)

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

У пользовательского файла есть метаданные

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

Доступ к файлам Linux из Windows с помощью \\wsl$

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

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

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

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

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

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

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

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