WSL のファイルのアクセス許可File Permissions for WSL

このページでは、特に NT ファイル システム上の Windows 内のリソースにアクセスした際に、Linux 用 Windows サブシステム全体で Linux のファイルのアクセス許可がどのように解釈されるかについて詳しく説明します。This page details how Linux file permissions are interpreted across the Windows Subsystem for Linux, especially when accessing resources inside of Windows on the NT file system. このドキュメントでは、Linux ファイル システムのアクセス許可の構造umask コマンドについて基本的な知識があることを前提としています。This documentation assumes a basic understanding of the Linux file system permissions structure and the umask command.

WSL から Windows ファイルにアクセスした際、ファイルのアクセス許可は Windows のアクセス許可から計算されるか、WSL によってファイルに追加されたメタデータから読み取られます。When accessing Windows files from WSL the file permissions are either calculated from Windows permissions, or are read from metadata that has been added to the file by WSL. このメタデータは、既定では有効になっていません。This metadata is not enabled by default.

Windows ファイルの WSL メタデータWSL metadata on Windows files

WSL のマウント オプションとしてメタデータが有効な場合、Windows NT ファイルの拡張属性を追加および解釈することで、Linux ファイル システムのアクセス許可を提供することができます。When metadata is enabled as a mount option in WSL, extended attributes on Windows NT files can be added and interpreted to supply Linux file system permissions.

WSL では、次の 4 つの NTFS 拡張属性を追加できます。WSL can add four NTFS extended attributes:

属性名Attribute Name 説明Description
$LXUID$LXUID ユーザー所有者 IDUser Owner ID
$LXGID$LXGID グループ所有者 IDGroup Owner ID
$LXMOD$LXMOD ファイル モード (ファイル システムのアクセス許可の 8 進数と種類。例: 0777)File mode (File systems permission octals and type, e.g: 0777)
$LXDEV$LXDEV デバイス (デバイス ファイルの場合)Device, if it is a device file

さらに、通常のファイルやディレクトリではないファイル (例: シンボリック リンク、FIFO、ブロック デバイス、UNIX ソケット、文字デバイス) には、NTFS 再解析ポイントもあります。Additionally, any file that is not a regular file or directory (e.g: symlinks, FIFOs, block devices, unix sockets, and character devices) also have an NTFS reparse point. これにより、特定のディレクトリ内のファイルの種類を、その拡張属性を照会しなくても、はるかにすばやく特定できます。This makes it much faster to determine the kind of file in a given directory without having to query its extended attributes.

ファイル アクセスのシナリオFile Access Scenarios

以下は、Linux 用 Windows サブシステムを使用してさまざまな方法でファイルにアクセスするときに、アクセス許可がどのように特定されるかを説明したものです。Below is a description of how permissions are determined when accessing files in different ways using the Windows Subsystem for Linux.

Linux から Windows ドライブ ファイル システム (DrvFS) のファイルにアクセスするAccessing Files in the Windows drive file system (DrvFS) from Linux

これらのシナリオは、WSL から (ほとんどの場合 /mnt/c 経由で) Windows ファイルにアクセスする場合に生じるものです。These scenarios occur when you are accessing your Windows files from WSL, most likely via /mnt/c.

既存の Windows ファイルからファイルのアクセス許可を読み取るReading file permissions from an existing Windows file

結果は、ファイルに既存のメタデータがあるかどうかによって異なります。The result depends on if the file already has existing metadata.

DrvFS ファイルにメタデータがない場合 (既定)DrvFS file does not have metadata (default)

ファイルにメタデータが関連付けられていない場合は、Windows ユーザーの有効なアクセス許可が読み取りビット、書き込みビット、または実行ビットに変換され、これらが "ユーザー"、"グループ"、および "その他" に対して同じ値として設定されます。If the file has no metadata associated with it then we translate the effective permissions of the Windows user to read/write/execute bits and set them to the this as the same value for user, group, and other. たとえば、Windows ユーザー アカウントにファイルの読み取りおよび実行アクセス権がある一方で書き込みアクセス権がない場合、これは "ユーザー"、"グループ"、および "その他" に対して r-x と表示されます。For example, if your Windows user account has read and execute access but not write access to the file then this will be shown as r-x for user, group and other. Windows でファイルに "読み取り専用" 属性が設定されている場合、Linux で書き込みアクセス権は付与されません。If the file has the 'Read Only' attribute set in Windows then we do not grant write access in Linux.

ファイルにメタデータがある場合The file has metadata

ファイルにメタデータが存在する場合は、Windows ユーザーの有効なアクセス許可を変換する代わりに、これらのメタデータ値がそのまま使用されます。If the file has metadata present, we simply use those metadata values instead of translating effective permissions of the Windows user.

chmod を使用して既存の Windows ファイルのファイル アクセス許可を変更するChanging file permissions on an existing Windows file using chmod

結果は、ファイルに既存のメタデータがあるかどうかによって異なります。The result depends on if the file already has existing metadata.

chmod ファイルにメタデータがない場合 (既定)chmod file does not have metadata (default)

chmod の効果は 1 つだけです。ファイルのすべての書き込み属性を削除すると、Windows ファイルに "読み取り専用" 属性が設定されます。これは、Linux の SMB (Server Message Block) クライアントである CIFS (Common Internet File System) と同じ動作であるためです。Chmod will only have one effect, if you remove all the write attributes of a file then the 'read only' attribute on the Windows file will be set, since this is the same behaviour as CIFS (Common Internet File System) which is the SMB (Server Message Block) client in Linux.

chmod ファイルにメタデータがある場合chmod file has metadata

chmod を使用すると、ファイルの既存のメタデータに応じて、メタデータを変更または追加できます。Chmod will change or add metadata depending on the file's already existing metadata.

たとえメタデータに示されていても、Windows 上で与えられている以上のアクセス権を自分に与えることはできないことに注意してください。Please keep in mind that you cannot give yourself more access than what you have on Windows, even if the metadata says that is the case. たとえば、chmod 777 を使用してファイルに対する書き込みアクセス許可があることを示すメタデータを設定することはできますが、そのファイルへのアクセスを試みたときにそのファイルに書き込むことはできません。For example, you could set the metadata to display that you have write permissions to a file using chmod 777, but if you tried to access that file you would still not be able to write to it. これは、相互運用性により、Windows ファイルに対するすべての読み取りまたは書き込みコマンドが Windows ユーザーのアクセス許可を介してルーティングされるためです。This is thanks to interopability, as any read or write commands to Windows files are routed through your Windows user permissions.

DriveFS にファイルを作成するCreating a file in DriveFS

結果は、メタデータが有効になっているかどうかによって異なります。The result depends on if metadata is enabled.

メタデータが有効になっていない場合 (既定)Metadata is not enabled (default)

新しく作成されたファイルの Windows アクセス許可は、特定のセキュリティ記述子なしで Windows でファイルを作成した場合と同じく、親のアクセス許可から継承されます。The Windows permissions of the newly created file will be the same as if you created the file in Windows without a specific security descriptor, it will inherit the parent's permissions.

メタデータが有効になっている場合Metadata is enabled

ファイルのアクセス許可ビットは Linux umask に従うように設定され、ファイルと共にメタデータが保存されます。The file's permission bits are set to follow the Linux umask, and the file will be saved with metadata.

どの Linux ユーザーおよび Linux グループがファイルを所有しているかWhich Linux user and Linux group owns the file?

結果は、ファイルに既存のメタデータがあるかどうかによって異なります。The result depends on if the file already has existing metadata.

ユーザー ファイルにメタデータがない場合 (既定)User file does not have metadata (default)

既定のシナリオでは、Windows ドライブを自動マウントするときに、任意のファイルのユーザー ID (UID) が WSL ユーザーのユーザー ID に設定され、グループ ID (GID) が WSL ユーザーのプリンシパル グループ ID に設定されるように指定します。In the default scenario, when automounting Windows drives, we specify that the user ID (UID) for any file is set to the user ID of your WSL user and the group ID (GID) is set to the principal group ID of your WSL user.

ユーザー ファイルにメタデータがある場合User file has metadata

メタデータに指定されている UID および GID は、ファイルのユーザー所有者およびグループ所有者として適用されます。The UID and GID specified in the metadata is applied as the user owner and group owner of the file.

\\wsl$ を使用して Windows から Linux ファイルにアクセスするAccessing Linux files from Windows using \\wsl$

\\wsl$ 経由で Linux ファイルにアクセスする場合は、WSL ディストリビューションの既定のユーザーが使用されます。Accessing Linux files via \\wsl$ will use the default user of your WSL distribution. したがって、Linux ファイルにアクセスするすべての Windows アプリに、既定のユーザーと同じアクセス許可が付与されます。Therefore any Windows app accessing Linux files will have the same permissions as the default user.

新しいファイルを作成するCreating a new file

Windows から WSL ディストリビューション内に新しいファイルを作成する場合は、既定の umask が適用されます。The default umask is applied when creating a new file inside of a WSL distribution from Windows. 既定の umask は 022 です。つまり、"グループ" と "その他" に対する書き込みアクセス許可を除くすべてのアクセス許可が許可されます。The default umask is 022, or in other words it allows all permissions except write permissions to groups and others.

Linux から Linux ルート ファイル システム内のファイルにアクセスするAccessing files in the Linux root file system from Linux

Linux ルート ファイル システム内で作成、変更、またはアクセスされるすべてのファイルには、新しく作成されたファイルに umask を適用するといった標準の Linux 規則が適用されます。Any files created, modified, or accessed in the Linux root file system follow standard Linux conventions, such as applying the umask to a newly created file.

ファイルのアクセス許可を構成するConfiguring file permissions

wsl.conf 内でマウント オプションを使用して、Windows ドライブ内のファイルのアクセス許可を構成できます。You can configure your file permissions inside of your Windows drives using the mount options in wsl.conf. マウント オプションを使用すると、umaskdmask、および fmask のアクセス許可マスクを設定できます。The mount options allow you to set umask, dmask and fmask permissions masks. umask はすべてのファイルに適用され、dmask はディレクトリにのみ適用されます。fmask はファイルにのみ適用されます。The umask is applied to all files, the dmask is applied just to directories and the fmask is applied just to files. これらのアクセス許可のマスクは、ファイルに適用されるときに論理 OR 演算が適用されます。たとえば、umask の値が 023 で、fmask の値が 022 の場合、ファイルに対する結果のアクセス許可マスクは 023 になります。These permission masks are then put through a logical OR operation when being applied to files, e.g: If you have a umask value of 023 and an fmask value of 022 then the resulting permissions mask for files will be 023.

これを行う方法については、「ディストリビューションごとの起動設定を wslconf で構成する」を参照してください。Please see the Configure per distro launch settings with wslconf article for instructions on how to do this.