ゆっくりのんびり。

いの (@inox_ee) です

【WSL】Windowsファイルの権限変更(+VSCode Remote Developmentの実行)

TL;DR

  1. WSLからマウントしたWindowsファイルシステム群のデフォルトパーミッションを変更した備忘録
  2. 脳死でファイルのパーミッション644 にすると、VSCode Remote Development が実行できなくて死ぬ
  3. 誰か適切な権限教えて乁(˙꒳˙乁)クレヨ......

WSLのパーミッション変更

デフォルトパーミッション

WSLからマウントしたWindowsファイルシステム群 (以下WSL-WinFS)は、デフォルトではパーミッションが777(= -rwxrwxrwx)とされています。つまり「『所有者・所有グループ・その他』が『読み込み・書き込み・実行』可能」ということ。さすがに気持ち悪いので、変更しましょう。

やり方

Linuxコマンド umask により変更することも可能ですが、WSLを立ち上げるたびに設定が初期化されてしまう(らしい)ので、/etc/wsl.conf に設定を書き込む*1 ことでこれを保持しましょう。初期状態ではおそらく存在しないので、新規作成します。

# /etc/wsl.conf の中身 <- comment
[automount]
enabled = true
root = /mnt/
options = "metadata,fmask=133,dmask=022"

権限に関するオプションを以下に抜粋。

  • fmask
    • すべてのファイルに対して除外するアクセス許可の 8 進数のマスク
  • dmask
    • すべてのディレクトリに対して除外するアクセス許可の 8 進数のマスク
  • umask
    • すべてのファイルとディレクトリに対して除外するアクセス許可の 8 進数のマスク

上記confファイルにより、dmask=022は777 - 022 = 755、すなわち drwxr-xr-xfmask=133は777 - 133 = 644 すなわち -rw-r--r-- となります。

補足1: 権限記号読み方

権限記号は、

  • 先頭1文字目がディレクトリorファイルの識別(dor-)
  • 以降3文字区切りで「所有者」「所有グループ」「その他」ごとの権限

を表現しています。

また権限は以下の表にもとづいて、数値で表されます。

記号 権限 数字
r 読み込み 4
w 書き込み 2
x 実行 1
- 権限なし 0

これより、-rwxrwxrwx777(= 4+2+1 / 4+2+1 / 4+2+1)、-rw-r--r--644(= 4+2+0 / 4+0+0 / 4+0+0)というように8進数表記に変換されます。

補足2: /etc/fstab

マウントに関する設定としては/etc/fstabを作成する方法が一般的(?)と思われますが、上記URLでも述べられているように

注: これらのオプションは、自動的にマウントされたドライブすべてのマウント オプションとして適用されます。 特定のドライブのみのオプションを変更するには、代わりに /etc/fstab を使用します。

という使い分けがなされるようです。自分の場合はCドライブしかないのでwsl.conf を用いました。

ちなみに、bashzshの場合 .profileumask 022 と記述する方法もありますが、Rails等で自動生成されるファイルはそれに従ってくれないらしいです(要検証)。

VSCode Remote Developmentの起動

VSCode Remote Development(以下VS-RD) により、WSLを利用した開発がかなり快適になりました。WSL2が実装されればもう言うことなしです(それもうUbuntuで良くない?)。

さて、VS-RDを起動してみましょう。前述のパーミッション変更により、当然Permission Denied と言われ、接続に失敗します。しかたないのでWarningのポップアップの隙間から見える $HOME(多分)/.vscode/extensions/ms-vscode-remote.remote-wsl-0.42.3/scripts/wslCode.sh をchmodで644->755に変更します。

しかしまだ起動せず……。
エラーログも見えないのでどのファイルを実行しているかもよく分かりません。うーむmm…。

結局

fmaskとdmaskで各々権限を設定せず、umask=022で一括755にして現状対処することに。このあたりの "Linux感" がまだ身についてないのでこのままで良いか怪しいところ…。

変にいじってパーミッション破壊を起こしたくもないので放置。書きながらユーザ・権限周りの知識が怪しいことに気づいたので再度OSの授業を復習しようと決めました。以上。