今回の内容
WSL2(Windows Sussystem for Linux 2)にて、(Linux側ではなく)Windows側のファイル・フォルダをchmodで権限を変える方法についてです。
詳細について
WSL2は、WindowsでLinuxを扱えるということで、(昨今は稼働サーバーがLinuxということが多いのもあって)開発環境として利用したり、Windowsのファイル・フォルダなどをLinuxベースで扱えたりと、大変便利です。
しかし、実は「(WSLではなく)Windowsのファイル・フォルダは、chmodで権限を変えられない」という制約があり、これが結構不便だったりします。
特に、リモート接続時などに使用する秘密鍵ファイルは、変に公開範囲が広いと接続時にエラーになるので(public key)、権限を変更したいのですが、
- Windowsのファイル・フォルダは、chmodで権限を変えられない
- WSL側で権限変更してからWindows側にコピーしても、なぜかWindows側で権限が変わってる(=公開範囲が広くなってる)
ということがあるので、Windowsのファイル・フォルダも、chmodで権限を変えたい、というケースがあります。
やり方
で、いきなり結論ですが、下記の手順を踏むことで、Windowsのファイル・フォルダも、chmodで権限を実行できるようになります。(全てWSL2側での作業です)
参考:WSL2はファイル権限を変更できません
-
/etc/wsl.conf
ファイルを開く。(なければ作成する) -
/etc/wsl.conf
に下記の内容を記載し、保存する - PCを再起動する。(これは無くてもできるかも...ただ再起動すれば確実)
# Enable extra metadata options by default
[automount]
enabled= true
root= /mnt/
options= "metadata,umask=22,fmask=11"
mountFsTab= false
# Enable DNS – even though these are turned on by default, we'll specify here just to be explicit.
[network]
generateHosts= true
generateResolvConf= true
上記手順を踏んだ後、WSL側でWindows側のファイル・フォルダをchmodしてみると、ちゃんと権限が変えられると思います。
wsl.confと.wslconfigの違いについて
とりあえず問題は解決しましたが、今回設定を記載したetc/wsl.conf
ファイルについて、
Windowsのユーザーフォルダ(デフォルトではC:\Users<ユーザー名>)に
.wslconfig
ってあったよな。あれとの違いは何だ?
と思ったので、調べてみました。
といっても、これはマイクロソフト公式サイトで、これ以上ないほど分かりやすい説明がありました。
wsl.conf と .wslconfig の違いは何ですか?
簡単に言えば
-
etc/wsl.conf
はディストリビューション個別の設定 -
.wslconfig
は全ディストリビューションで共通の設定
ということみたいです。(ちなみに、先述の設定を.wslconfig
に書いても、chmodで権限変更はできませんでした)
告知
今週の土曜日(2023/1/21)にVS Code Conference Japan 2022 - 2023という、VS Code Meetup主催のVS Codeの一大イベントが開催されます。
このイベントで「Remote SSHで行うVS Codeリモートホスト開発とトラブルシューティング」という内容で登壇させて頂くことになりましたので、よろしければぜひご参加ください。
ちなみに内容は、以前投稿した 【VS Code】Remote SSHでSSH接続する の記事をベースに、デモや発生頻度が高い「接続できない」事例も含めて紹介する予定です。
それでは、今回はこの辺で。