LoginSignup
1
0

More than 1 year has passed since last update.

wslでsudoできなくなったときの対応方法

Posted at

wslではroot作業はsudoで行うので、sudoできなくなると結構困ります。

これはwsl2で、visudoを使って失敗し、sudo できなくなったときの対処方法です。
あわせてsudoで入力する自分のパスワードを忘れた場合の対処方法も提示しています。

wsl2で実施しましたが、検索したwsl1の情報を参照して対応したので、wsl1でも使えるはずです(未確認)。

sudoersファイルを破損した場合

  • 発生原因

    visudo(古い人なのでsudoers.dに慣れてないのです)で修正時に構文エラーがあると、

    • e: 再修正(eじゃなかったかも)
    • x: 保存せず終了
    • Q: そのまま終了(危険)

    と表示されるのですが、ここでxとQの意味を取り違え「Q」を選んでしまいました。

    すると、sudoersファイルが構文エラーの状態のまま保存されてしまい、sudoコマンドが構文エラーで失敗するようになってしまいます。

    物理・仮想マシンにインストールしたlinuxであれば、boot cdやsingle user modeでリカバリーできるのですが、wsl2ではどうすればわからなかったです。

  • 対応方法1

    検索して発見した下の「対応方法2」を元に見つけた対処方法です。こちらのほうがすこし簡単です。
    もし、うまくいかななけれ「対象方法2」を試してみてください。

    1. コマンドプロンプトで sudoersを変更可能にする

      C:\Users\mtag> wsl -u root chmod u+w /etc/sudoers
      
    2. コマンドプロンプトで sudoersを修正する。

      C:\Users\mtag> wsl -u root vi /etc/sudoers
      

      元の内容がわからない場合、以下の内容で更新すればとりあえず動くはずです。

      Defaults        env_reset
      Defaults        mail_badpass
      Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
      root    ALL=(ALL:ALL) ALL
      %admin ALL=(ALL) ALL
      %sudo   ALL=(ALL:ALL) ALL
      #includedir /etc/sudoers.d
      
    3. wsl内部でsudoができるか確認する。できなければ再修正する。

    4. コマンドプロンプトで sudoersを変更不可にする

      C:\Users\mtag> wsl -u root chmod u-w /etc/sudoers
      
  • 対応方法2

    調べたところStack Exchangeに回答を見つけました。sudoに問題があるのであれば、su(switch user)ではなく、起動時にrootにしてしまえ、という対応でした。

    こちらはubuntuの場合に依存した手順があります。ほかのディストリビューションの場合、読み替えが必要です。

    1. コマンドプロンプトで起動時のユーザーをrootにする。

      C:\Users\mtag> ubuntu config --default-user root
      
    2. コマンドプロンプトでwslをいったん終了する

      C:\Users\mtag> wsl --shutdown
      
    3. wslを起動し、sudoersを修復する。visudoは使えないと思いますのでvi /etc/sudoersで修正します。

      sudoを実行した時に、構文エラーがでなくなるようにしてください。

      元の内容がわからない場合の内容は「対処方法1」の2に記述しています。

    4. コマンドプロンプトで起動時のユーザーを元に戻しておく。

      C:\Users\mtag> ubuntu config --default-user [元のwslユーザー]
      

自分のパスワードがわからなくなった場合

  • 対処方法1と同じように対応できます。

    1. コマンドプロンプトで rootで現在のユーザーのパスワードを修正する。

      C:\Users\mtag>wsl -u root passwd [自分のwslユーザー名]
      New password:
      Retype new password:
      passwd: password updated successfully
      
      
  • 対処方法2の起動ユーザーをrootで再起動したwslの中で、password [自分のユーザー名]でもパスワードをリセットできます。

  • こちらはほかにも方法があると思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0