Windows Subsystem for Linux(WSL)上のUbuntuでファイルパーミッションを設定できるようにする

概要

Windows Subsystem for Linux(WSL)上のUbuntuでホームディレクトリを変更する」の手順で/mnt/cをホームディレクトリにすると、作成したファイルがすべて777パーミッションで作成され、chmodが効かない現象が発生する。これは、デフォルトでは/mnt/cがメタデータを保持できないファイルシステムでマウントされており、Linuxのファイルパーミッションが保持できない状態になっているためである。

この問題は、Windows10 RS4というバージョンから改良されており、Cドライブをdevfsというファイルシステムのメタデータありモードでマウントすることによって解決することができるようになっているとのこと。詳細はこちらの記事が詳しく説明してくれている。

手順についてはこちらが参考になりました。
両ページに感謝いたします。

Cドライブのマウント形式を変更する

以下の手順でWindowsのCドライブをdevfsファイルシステムのメタデータ有効化をした状態でマウントができる。

WindowsのファイルシステムにはLinuxのメタデータが存在しないため、パーミッションを設定することができませんでした。しかし、build 17063のリリースによってそのメタデータを扱えるようになりました。メタデータを有効にするには、次のようにmetadataオプションを付けてドライブをマウントします。

1
2
sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

設定の恒久化

「build 17093」から上記の設定が恒久化できるみたい。

WSLの設定ファイル/etc/wsl.confを編集します。ファイルが存在しない場合は作成してください
[automount]セクションのoptionsにmetadataを追加します。必要な最小限の設定は次のようになります。

1
2
[automount]
options = "metadata"

すでにoptionsがある場合は「,」区切りでその前か後に追記します。

1
options = "metadata,case=off"

新規作成するファイルおよびフォルダのデフォルトパーミッションを変更

上記の手順で、chmodによるファイルパーミッションが変更できるようになるが、新規作成されるフォルダのパーミッションが777で作成されてしまう。
ディレクトリは755ファイルは644で作成されるように設定する。

方法としては、シェルログイン時に割り込んで実行される.profileファイル内で、新規作成ファイルのファイルパーミッション設定を行うumaskコマンドを実行することで実現する。

こちらの手順が参考になりました。感謝します。

.profileファイルにumaskコマンドの追記

.profileファイルをエディタで開く。

1
vim ~/.profile

.profileファイル内に以下のコマンドを追記する。

1
umask 022

【補足】システム全体で新規作成するファイルおよびフォルダのデフォルトパーミッションを変更する

上記の.profileファイルは、ホームディレクトリ以下にあるため、別のユーザーでシェルを立ち上げるとumaskコマンドが実行されない。
システム全体でumaskコマンドを実行するには、/etc/profileファイルにコマンドを追記することで、シェルにログインした際に追記したコマンドを実行してくれるらしい。まだ未検証なので補足程度に。

参考ページ

WSLからマウントしたWindowsのドライブでchmodしたい

RS4におけるWindows Subsystem for Linuxの改良点 drvfsのメタデータ対応

WSL(Windows Subsystem for Linux)の初期パーミッション設定