次の方法で共有


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

このページでは、特に NT ファイル システム上の Windows 内のリソースにアクセスする場合に、Linux 用 Windows サブシステム全体で Linux ファイルのアクセス許可がどのように解釈されるかについて詳しく説明します。 このドキュメントでは、 Linux ファイル システムのアクセス許可構造umask コマンドの基本的な理解を前提としています。

WSL から Windows ファイルにアクセスする場合、ファイルのアクセス許可は Windows のアクセス許可から計算されるか、WSL によってファイルに追加されたメタデータから読み取られます。 このメタデータは既定では有効になっていません。

Windows ファイルの WSL メタデータ

WSL でメタデータをマウント オプションとして有効にすると、Windows NT ファイルの拡張属性を追加および解釈して、Linux ファイル システムのアクセス許可を提供できます。

WSL では、次の 4 つの NTFS 拡張属性を追加できます。

属性名 説明
$LXUID ユーザー所有者 ID
$LXGID グループ所有者 ID
$LXMOD ファイル モード (ファイル システムのアクセス許可の 8 進数と種類、例: 0777)
$LXDEV デバイス (デバイス ファイルの場合)

さらに、通常のファイルまたはディレクトリではないファイル (シンボリック リンク、CIO、ブロック デバイス、unix ソケット、文字デバイスなど) にも NTFS 再解析ポイントがあります。 これにより、拡張属性のクエリを実行しなくても、特定のディレクトリ内のファイルの種類を判断する時間が大幅に短縮されます。

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

以下に、Windows Subsystem for Linux を使用してさまざまな方法でファイルにアクセスする場合のアクセス許可の決定方法について説明します。

Linux から Windows ドライブ ファイル システム (DrvFS) 内のファイルにアクセスする

これらのシナリオは、WSL から Windows ファイルにアクセスする場合に発生します (多くの場合、 /mnt/c経由)。

既存の Windows ファイルからファイルのアクセス許可を読み取る

結果は、ファイルに既存のメタデータが既に存在するかどうかによって異なります。

DrvFS ファイルにメタデータがありません (既定)

ファイルにメタデータが関連付けられていない場合は、Windows ユーザーの有効なアクセス許可を読み取り/書き込み/実行ビットに変換し、ユーザー、グループ、およびその他の同じ値としてこれを設定します。 たとえば、Windows ユーザー アカウントに読み取りと実行アクセス権があるが、ファイルへの書き込みアクセス権がない場合、これはユーザー、グループ、その他の r-x として表示されます。 ファイルに Windows で [読み取り専用] 属性が設定されている場合、Linux では書き込みアクセス権は付与されません。

ファイルにメタデータがある

ファイルにメタデータが存在する場合は、Windows ユーザーの有効なアクセス許可を変換するのではなく、これらのメタデータ値を使用します。

chmod を使用して既存の Windows ファイルに対するファイルのアクセス許可を変更する

結果は、ファイルに既存のメタデータが既に存在するかどうかによって異なります。

chmod ファイルにメタデータがありません (既定)

Chmod は、ファイルのすべての書き込み属性を削除すると、Windows ファイルの "読み取り専用" 属性が設定されます。これは、Linux の SMB (サーバー メッセージ ブロック) クライアントである CIFS (Common Internet File System) と同じ動作であるためです。

chmod ファイルにメタデータがある

Chmod は、ファイルの既存のメタデータに応じてメタデータを変更または追加します。

メタデータに該当する場合でも、Windows 上のアクセス権よりも多くのアクセス権を自分自身に付与できないことに注意してください。 たとえば、 chmod 777を使用してファイルへの書き込みアクセス許可を持っていることを表示するようにメタデータを設定できますが、そのファイルにアクセスしようとすると、そのファイルに書き込むことができなくなります。 これは、Windows ファイルへの読み取りまたは書き込みコマンドが Windows ユーザーのアクセス許可を介してルーティングされるため、相互運用性のおかげです。

DriveFS でのファイルの作成

結果は、メタデータが有効になっているかどうかによって異なります。

メタデータが有効になっていない (既定)

新しく作成されたファイルの Windows アクセス許可は、特定のセキュリティ記述子なしで Windows でファイルを作成した場合と同じになり、親のアクセス許可が継承されます。

メタデータが有効になっている

ファイルのアクセス許可ビットは Linux umask に従って設定され、ファイルはメタデータと共に保存されます。

ファイルを所有している Linux ユーザーと Linux グループはどれですか?

結果は、ファイルに既存のメタデータが既に存在するかどうかによって異なります。

ユーザー ファイルにメタデータがありません (既定)

既定のシナリオでは、Windows ドライブを自動マウントするときに、任意のファイルのユーザー ID (UID) が WSL ユーザーのユーザー ID に設定され、グループ ID (GID) が WSL ユーザーのプリンシパル グループ ID に設定されていることを指定します。

ユーザー ファイルにメタデータがある

メタデータで指定された UID と GID は、ファイルのユーザー所有者およびグループ所有者として適用されます。

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

\\wsl$経由で Linux ファイルにアクセスすると、WSL ディストリビューションの既定のユーザーが使用されます。 そのため、Linux ファイルにアクセスする Windows アプリには、既定のユーザーと同じアクセス許可が与えられます。

新しいファイルの作成

既定の umask は、Windows から WSL ディストリビューション内に新しいファイルを作成するときに適用されます。 既定の umask は 022です。つまり、グループやその他への書き込みアクセス許可を除くすべてのアクセス許可が許可されます。

Linux から Linux ルート ファイル システム内のファイルにアクセスする

Linux ルート ファイル システムで作成、変更、またはアクセスされたファイルは、新しく作成されたファイルに umask を適用するなど、標準的な Linux 規則に従います。

ファイルのアクセス許可の構成

wsl.conf のマウント オプションを使用して、Windows ドライブ内でファイルのアクセス許可を構成できます。 マウント オプションを使用すると、アクセス許可マスクの umaskdmaskfmask を設定できます。 umaskはすべてのファイルに適用され、dmaskはディレクトリのみに適用され、fmaskはファイルのみに適用されます。 これらのアクセス許可マスクは、ファイルに適用されるときに論理 OR 操作を介して配置されます。たとえば、023umask値があり、fmask値が 022 の場合、ファイルの結果のアクセス許可マスクが023されます。

詳細情報: wsl.conf を使用したディストリビューションごとの構成オプション