(u_u)

「sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set」と表示されたときの対処法

Categories: [blog]
Tags: [ubuntu], [ubuntu18.04], [grub], [sudo], [npm], [chown], [root]

適当に表示されたコマンドを実行したのが運のつき

npmでelmをインストールしようとしたら権限がないぞって怒られて、コンソールに出てきたコマンドを実行したら、「sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set」と表示されるようになった。
これかなりヤバイ状況らしい。
root - /usr/bin/sudo must be owned by uid 0 and have the setuid bit set - Ask Ubuntu
このaskubuntuによると、クリーンインストールが最善策だと言うことだが、そのひとつ下の回答にそんなことしなくても行けるぞとの回答が。

As you'll read on this answer on SO, this problem is not as hard as people are making it. I got the sudo command working again without a reinstall by following these simple steps:

Log out as the current user, then log back in as root.
Execute

chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

Log out as root, then log back in as the current user.

This does the trick and is much quicker and less painful than the "nuclear option" recommended in other answers.

If your root password is not set, you can boot in Recovery Mode to set it.

回復までの手順

今回Rootにパスワードをつけていなかったので、Recovery Modeというのを試してみることに。
RecoveryMode - Ubuntu Wiki
以下ページに従っただけ。

  1. GRUBのメニューを表示させる。UEFIの場合はUbuntuのロゴが出てくるまでにEscキーを何回か押すと表示される。BIOSの場合はShiftキー長押しで出てくるらしい。が、罠としてせっかくメニューが出てきてもEscキーを再び押してしまうとgrubのプロンプトになってしまう。そうなってしまった場合はexitと入力すると、再びチャンスが回ってくることがある(だめだったら再起動してください)。
  2. Advanced optionsを選択する。
  3. Ubuntu GNU/Linux, with Linux 3.8.0-26-generic (recovery mode)を選択する。ここのバージョンはおそらく違うものが出てきます。僕の場合ももっと新しい数字になってたので。
  4. Drop to root shell promptを選択する。
  5. mount -o remount,rw /を実行
  6. mount --allを実行

ここまででRootアカウントとしてシステムを操作できるようになった。

  1. chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudoを実行する。
  2. rebootで再起動する。
  3. 適当にsudo apt updateとか試してsudoが使えるようになってるのを確認する。
そもそもなんで今回こんなことになった?