概要
Linuxでは、セキュリティ上の理由からrootユーザーでの直接的な操作を避け、sudoコマンドを使用して必要な時だけ管理者権限で実行することが推奨されています。
ところが、WSL2のUbuntu 22.04環境では、ユーザーがsudo権限を持っていない場合があります。これにより、パッケージのインストールや重要なシステム設定の変更など、管理者権限の必要な操作ができなくなります。
ここでは事例として、ubuntuユーザーにsudo権限を付与する手順を記載します。ユーザー名はお手元の環境に応じて適宜読み替えてください。
注:以下2つのアプローチでも解消できますが、今回はとりあえず今のWSL2環境やユーザー構成を維持して解決する手順として記載します。
- WSL2インストール時にrootパスワードを設定
- 新規管理者ユーザーの作成
背景
WSL2で以下のコマンドをubuntuユーザーにて実行したら、以下権限エラーが出て、パッケージをインストールできませんでした。
sudo apt-get install keychain # WSL2へのパッケージの追加を試みた
# sudo 権限が無いらしい。
# ubuntu is not in the sudoers file. This incident will be reported.
sudo できるようにする手順
WSL2の再起動を伴うので、作業途中のものは保存するなど、お片付けをしておきましょう。
PowerShellからWSLのubuntuユーザーに権限を与える
管理者として実行したPowerShellからWSL2のrootシェルを起動する
Windows側の操作で、PowerShellを管理者として実行し、以下の通りコマンド実行します。rootユーザーにパスワードを設定していないと、WSL2の中からではrootとしてサインインできません。なので、PowerShell側からwsl -u root
をやっています。
# rootユーザーとしてWSL2にサインイン
# 規定のWSL2ディストリビューション以外にサインインする場合は、ディストリビューションを指定する引数が必要
wsl -u root
# Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.146.1-microsoft-standard-WSL2 x86_64)
# と表示されれば成功
WSLのrootシェルで、ubuntuユーザーをsudoグループのメンバーとして追加する
PowerShell上でWSL2へログインした状態になるので、以下のコマンドを実行します。
# WSLのrootシェル上で実行
usermod -aG sudo ubuntu
exit # rootシェルを終了 logout と表示されるはず
WSL2を再起動する
# PowerShell上で実行
wsl --shutdown
sudoを使ってコマンド実行する
WSL2へ再度サインインします。通らなかった以下のsudoコマンドが、再度ubuntuユーザーで実行すると通るようになっています。
# 管理者として実行したい任意のコマンドで読み替えてください
sudo apt-get install keychain
(もし発生してれば)Docker Desktopの設定を復旧してマシン再起動する
今回の実行内容に直接関連があるか不明ですが、手元の環境ではDocker DesktopにおけるWSL2ディストリビューションの設定が無効になっていました。これを復帰させないとWSL2でDockerが利用できないので、再度Ubuntuを有効にして、PC再起動を行います。