Hatena::ブログ(Diary)

vivid memo このページをアンテナに追加 RSSフィード

vivid code というサイトのメモ代わりに記事を書いていました。
現在ははてなブログに移行し、「ひだまりソケットは壊れない」 というブログで記事を書いています。 はてな id も id:nobuoka に変更しました。

2011-11-03

Ubuntu 11.10 で全てのユーザーを一般ユーザー (admin グループに属してない) にしてしまった場合の対処法

Ubuntu では、特権を得るために原則として root ユーザーになることはせず、管理者ユーザー (admin グループに所属しているユーザー) が sudo コマンド (グラフィカルプログラムの場合は gksudo など) を使うことで特権を得ます (Ubuntu document - RootSudo)。 そのため、ユーザーが所属するグループを変更するときには注意しなければいけません。 間違って全てのユーザーを admin グループから取り除いてしまう (全てのユーザーが管理者ユーザーではなくなってしまう) と少し復旧に手間がかかってしまいます。

ここでは、間違って全てのユーザーを admin グループから除いてしまった場合の復旧方法について述べます。

Ubuntu でユーザーをグループに追加するときにしてはいけないこと

間違って全てのユーザーを admin グループから除く、なんてことは GUI のみの操作をしていれば (多分) できないと思うのですが、コマンド操作をしているとついやってしまう失敗ではないでしょうか。

上記の記事に書いているように、usermod コマンドを使用してユーザーの所属グループを変更するときに、元々所属しているグループを記述し忘れてしまうという失敗はやりがちです。 この失敗を元々 admin グループに属しているユーザーに対してしてしまうと (そしてそのユーザーが唯一の管理者ユーザーだと) 管理者ユーザーが居ないという状況になってしまいます。 理由はわかりませんが、ログアウトするまでは sudo 権限は残っているようなので (グループ情報が読み込まれるのがログイン時だから? sudo 権限が付与されるのがログイン時だから?) admin グループから除いてしまってもログアウトするまでに気づけば直せるのですが、一度ログアウトしてしまうと誰も sudo 権限を持っておらず復旧が困難になります。

sudo 権限がないと、グループを変更しようとしても以下のようになって変更できないのです。

~$ sudo usermod -g usergroup -G usergroup,admin username
username is not in the sudoers file

Ubuntu 11.10 だと recovery menu のシングルユーザーモードから復旧できない?

上に挙げた 2 つの記事では、復旧方法として recovery menu のシングルユーザーモードでログインして usermod コマンドを使うという方法を書いています。 (/etc/group ファイルを変更してもよいでしょう。)

また、Ubuntu 11.10 のドキュメントの 「I forgot my password!」 にはパスワードを忘れた際の対処法として、同様のシングルユーザーモードでのログインによる復旧方法が書かれています。

しかしながら、私の環境で試してみたところ recovery menu のシングルユーザーモードでログインしても、usermod コマンドがうまくいきませんでした。 (以下のように /etc/passwd がロックできなかったと言われた。)

~# usermod -g usergroup -G usergroup,admin username
usermod: cannot lock /etc/passwd; try again later

また /etc/group ファイルの編集もできませんでした (Read-only だと言われる)。 chmod コマンドを使っても以下のようにエラーが発生。

~# chmod 0666 /etc/group
chmod: changing permissions of `/etc/group' : Read-only file system

パスワードの変更も同様で、以下のようなエラーが発生してできませんでした。 Ubuntu 11.10 のヘルプドキュメントに書かれている方法なので私が何か間違っているのかもしれませんが。。

~# passwd username
passwd: Authentication token manipulation error
passwd: password unchanged

(追記) コメントで教えていただいたのですが、recovery mode で起動する方法で復旧できるようです。 私はまだ試していませんが、必要でしたらこの記事のコメントを参照して試してください。

解決策

そんなわけで recovery mode を使う方法では上手くいかなかったので、復旧方法として別の方法をとりました。 大まかな方法としては、Live Disk で Linux をオンメモリで動かし、HDD に書かれているファイルの内容を変更する、というものです。 以下に簡単に手順を書いておきます。

  1. Live Disk で Ubuntu 11.10 起動
  2. 以下のようなコマンドで HDD のファイルシステムをマウントする (/dev/sda1 は環境依存なので適当に変更のこと)
    ~$ sudo mkdir /mnt/myhdd
    ~$ sudo mount /dev/sda1 /mnt/myhdd
  3. ファイルの中身を確認しマウントしたデバイスが正しい HDD かどうかチェックする
  4. 以下のコマンドでもともとの /etc/group にあたるファイルを開く (vi じゃなくても使いやすいエディタを使ってください)
    ~$ sudo vi /mnt/myhdd/etc/group
  5. 以下のように admin グループについて書かれた行にユーザーを追加
    admin:x:118:username
  6. 変更を保存して再起動して、HDD 上の Ubuntu 11.10 を起動

これでうまくいくはずです。

?? 2011/11/12 02:08 11.10では、resume,fsck,remount,rootのメニューでrootを選ぶと、/はreadonlyでマウントされたまま書き込めない。そこはremountを選ぶ。その後
# gpasswd -a username admin
# exit
してresumeを選ぶ

vividcodevividcode 2011/11/12 06:35 なるほど、ありがとうございます!
やはりわざわざ Live CD から起動しないといけないってのはおかしいですもんね。 教えていただきありがとうございます。 また今度試してみます。

リンク元