echo("備忘録");

IT技術やプログラミング関連など、技術系の事を備忘録的にまとめています。

【WSL2】Windowsのファイル・フォルダをchmodする

今回の内容

WSL2(Windows Sussystem for Linux 2)にて、(Linux側ではなく)Windows側のファイル・フォルダをchmodで権限を変える方法についてです。

詳細について

WSL2は、WindowsLinuxを扱えるということで、(昨今は稼働サーバーがLinuxということが多いのもあって)開発環境として利用したり、Windowsのファイル・フォルダなどをLinuxベースで扱えたりと、大変便利です。

しかし、実は「(WSLではなく)Windowsのファイル・フォルダは、chmodで権限を変えられない」という制約があり、これが結構不便だったりします。

特に、リモート接続時などに使用する秘密鍵ファイルは、変に公開範囲が広いと接続時にエラーになるので(public key)、権限を変更したいのですが、

  • Windowsのファイル・フォルダは、chmodで権限を変えられない
  • WSL側で権限変更してからWindows側にコピーしても、なぜかWindows側で権限が変わってる(=公開範囲が広くなってる)

ということがあるので、Windowsのファイル・フォルダも、chmodで権限を変えたい、というケースがあります。

やり方

で、いきなり結論ですが、下記の手順を踏むことで、Windowsのファイル・フォルダも、chmodで権限を実行できるようになります。(全てWSL2側での作業です)
参考: https://www.fixes.pub/program/695629.html

  1. /etc/wsl.conf ファイルを開く。(なければ作成する)
  2. /etc/wsl.confに下記の内容を記載し、保存する
  3. 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 での詳細設定の構成 | Microsoft Learn

簡単に言えば

ということみたいです。(ちなみに、先述の設定を.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接続する - echo("備忘録");

vscode.connpass.com

それでは、今回はこの辺で。