WSLからWindowsファイルパーミッションを扱えない

連載第105回の「Windows 10でLinuxを使う(その7) - Windowsから編集しよう」で、WindowsからWSLで使うファイルを作成してもパーミッションの扱いがうまくいかない、ということを紹介した。今回取り上げるのはそれとは逆のパターンだが、どのみちこの部分はWindows 10 Fall Creators UpdateのWSLではあまり実装が進んでいない部分だ。しかし次のアップデートで、完璧とは言えないものの、かなり状況が良くなりそうだというニュースが入ってきた。

Microsoftは2018年1月12日(米国時間)、「Chmod/Chown WSL Improvements|Windows Command Line Tools For Developers」において、開発中のWindows 10 Insider Build 17063でWSLのファイルシステムに新しい機能を追加したと発表した。この新機能によってWSLからWindowsのファイルとしてFIFOファイル、UNIXソケットファイル、デバイスファイルが作成できるようになったほか、ユーザー/グループの指定やパーミッション(読み込み、書き込み、実行)の設定ができるようになったと説明がある。

Ubuntu on WSLからDrvFsのマウント状況をチェック (Windows 10 Fall Creators Update)

WSLではWindowsのファイルを扱うために「DrvFs」と呼ばれるファイルシステムを提供している。WSLから見ると/mnt/cにマウントされているファイルシステムがDvrFsだ。現在リリースされているWSLのDrvFsでは、ファイルにはアクセスできるものの、パーミッションの変更は機能しないようになっている。Insider Build 17063ではWSLからWindowsファイルのパーミッションが変更できるように、専用のメタデータを持つようにDrvFsが拡張されている。これが今回特に注目される新機能だ。

Windowsのパーミッションメタデータを変更できるようになったのではなく、別途WSL用のパーミッションメタデータが追加されたという点がポイントだ。つまり、「Windowsのパーミッションメタデータ」と「WSL DrvFsのパーミッションメタデータ」という、2つのメタデータが1つのファイルに対して保持される。動きを理解するにはこの仕組みを理解しておく必要がある。

2つのメタデータを理解する

Chmod/Chown WSL Improvements|Windows Command Line Tools For Developers」には動作を理解するためのわかりやすい動作例が掲載されているので、これを見ると話が早いだろう。まず次の動作例だ。

Insider Build 17063実装機能の動作例その1 - 資料: Microsoft提供

上記動作例のfile.txtというファイルはWindowsのファイルだ。これに対してWSLからchmod 0466 file.txtを実行して書き込み権限を抜いてから書き込みを行い、パーミッションどおりに書き込みが機能しないことを確認している。続けてこれをWindows側のメモ帳で編集して書き込みを行っている。WSLからは書き込みができないのに、Windowsからは書き込みができる。これが開発中のDrvFsの特徴的なところだ。

つまり、chmodで変更したパーミッションはWSLからの操作に対してのみ有効で、Windows側には影響を与えていないことがわかる。次はこの動作例だ。

Insider Build 17063実装機能の動作例その2 - 資料: Microsoft提供

bar.bazもWindowsのファイルだ。このファイルはWindowsで書き込みが禁止されている。これに対してWSLからは読み込み、書き込み、実行の全てのパーミッションを許可した状態でbar.bazに書き込みを実施するが、権限がないとして動作が拒否されている。

つまり、現在の実装ではWSLからパーミッションの設定ができるようになったものの、DrvFsでは基本的にWindowsのパーミッションが最も強いパーミッションとして機能し、DrvFsに新しく追加されたパーミッションはLinuxに対して機能はするものの、大元にあるWindowsのパーミッションを超えることはできない、といった仕組みになっていることになる。WindowsパーミッションはWSLからは変更できない仕組みになっている。

今回追加されたパーミッションメタデータがマウントする段階でリニューアルされるのか、いったん作成されたパーミッションデータが永続的に保持されるのか、それは実際に使ってみないとわからない。また、もしかすると2つのメタデータを保持するというInsider Build 17063の実装ではなく、DrvFsからWindowsのパーミッションを変更できるように実装が変更されるかもしれないし、セキュリティを考えるとそれはないかもしれない。

最終的にどの方法が実装されるにせよ、少なくとも、Windows 10 Fall Creators Updateよりも状況が良くなることは間違いなさそうだ。WSLからDrvFsにファイルを作成してそれなりに使えるようになるのは実現しそうである。Windowsのホームディレクトリ以下のファイルはWSLからも扱いたいし、この辺りがもっとシームレスに使えるようになると嬉しいところだ。