WSLでrootになれなくなった時の対処法


通常はsudoを使います

Microsoftのドキュメントにも登場するUbuntuでは、ストアからディストロをインストールした際にユーザー名とパスワードを登録し、ログイン時にはこのようなメッセージを出してくれます。

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

インストール時に作成したユーザとパスワードを使ってrootになれます。

sudoできないときは

でも、ディストロによっては sudo がインストールされていないこともあったりするわけです。
そんなときの対処方法は

$ wsl.exe --help | iconv -futf-16 | less
使用法: wsl.exe [Argument] [Options...] [CommandLine]
           (中略)
   --user, -u <UserName>
        指定されたユーザーとして実行します。

wslコマンドにユーザー指定のオプションがありました。

やってみます。

$ wsl.exe -u root
# id
uid=0(root) gid=0(root) groups=0(root)

root になれました。
ただし、wslコマンドで新たなセッションを開いているので複数のディストロがインストールされていると既定のディストロになってしまいます。そういう場合にはディストロ名を指定しておきましょう。

WSLインスタンスは環境変数WSL_DISTRO_NAMEにディストロ名が入っているので

wsl.exe -d $WSL_DISTRO_NAME -u root

このように書けば、現在アクセスしているディストロでrootになることができます。

認証なくて大丈夫?

簡単にrootになれたのですが、一抹の不安を感じた方はおられますか?
この一連の流れには認証が無いんです。パスワードを聞かれることもなく簡単に root になれてしまうんです。
このあたりが、「WSLは開発用途」といわれる所以なのでしょうね。
通常はパスワード認証を行って、パスワード無しの非常モードはWindowsの管理者権限同様にUACで確認を取るとかにするともうちょっと安全な感じもしますが。