【修正】/etc/wsl.confでfmaskの設定を行うとVisual Studio CodeがWSL側のコンソールから起動できなくなるため、fmaskの設定を削除しました(2025.01.10)
WSL(Windows Subsystem for Linux)を使って開発をしていると、Windows側のファイルの所有権やパーミッションで困ることがあります。
また、Visual Studio Codeなどのエディタを使用する際に、新規作成したファイルの所有者がrootになってしまうこともあります。
特に以前書いたエントリでWSLのディストリビューションのイメージをバックアップしたものを使用すると
デフォルトのユーザーネームの設定が削除され、以下のように起動しなければいけませんでした。
また、Windowsターミナル**のタブにある【+】ボタンを使用するとrootユーザーでのログインとなっていました。
PS C:\> wsl -d <ディストリビューション名> -u <ユーザー名>
【WSLのOSイメージのバックアップとリストア:参考】
そこで今回はその2つの問題を解決するべく、WSLでファイルを作成する際の所有権とパーミッションの設定方法についてまとめます。
解決方法
今回の問題は、WSLの設定ファイル(/etc/wsl.conf)を編集することで解決できます。
以下の手順で設定を行います。
1. WSLのディストリビューションにログインし、エディターで設定ファイルを開く
$ sudo nano /etc/wsl.conf
2. ファイルに以下の内容を追加する
[automount] options = "metadata,umask=022,uid=<デフォルトユーザーのuid>,gid=<デフォルトユーザーのgid>,case=force" enabled = true [user] default = <あなたのLinuxユーザー名(デフォルトユーザー)>
このファイルの設定項目は以下のようになっています。
[automount]セクション
enabled = true… WSLの自動マウント機能を有効にしますmetadata… Windowsファイルシステム上でLinuxのメタデータ(パーミッション等)を保存できるようにしますumask=022… ディレクトリの作成時のパーミッションを755(rwxr-xr-x)に設定します(777-022=755)fmask=133… ファイルの作成時のパーミッションを644(rw-r--r--)に設定します(777-133=644)uid=????,gid=????… 作成されるファイルの所有者(uid)とグループ(gid)を指定しますcase=force… ファイル名の大文字小文字の判定を強制的行う
自分のユーザーID(uid)とグループID(gid)は以下のコマンドで確認できます
id -u # ユーザーIDの確認 id -g # グループIDの確認
[user]セクション
default:WSL起動時のデフォルトユーザー名を指定します
設定の反映方法
設定を反映させるには、WSLを再起動する必要があります。WSLからログアウトをし、以下を実行します。WSLを再起動するので、その他のディストリビューションの動作に影響が考えられるので十分注意してください。
# Windowsターミナルで以下を実行 PS> wsl --shutdown
この設定により、WSL上で作成されるファイルやディレクトリの所有権とパーミッションが適切に設定され、より快適な開発環境を実現できます。
設定時の注意点
- この設定は各WSLディストリビューションごとに個別に行う必要があります
- 設定の変更を反映させるには、必ずWSLの再起動が必要です
- UIDとGIDは環境によって異なる可能性があるため、必ず自分の環境で確認してください
おわりに
WSLでのファイル操作時のパーミッションやデフォルトユーザの設定が可能になりました。