本サイト/記事は移転しました。

約10秒後にリダイレクトします。

moduser -Gやってしもうた

 ちょっと検索した結果を元にusermod -Gをやってしまい、sudoできなくなってしまった。以前にも同じことをやってしまったような記憶があるが、失敗したことさえ忘れていたのだから、回復方法を覚えているはずもない。で検索。同じような失敗をした人が。

Ubuntuでユーザをサブグループに追加するときの注意点 - Make組ブログ(移行して http://blog.hirokiky.org/ にあるよ)

 なるほど、セーフモードでログインか。ってどうやるんだ?再度検索。grubメニューから入るのか。でもgrubメニューにはリカバリーモードが表示されていない。advancedなんちゃらを選択したらサブメニューが出てきて、そこにリカバリーモードがあったのでそこから起動、root shellに降りていく。
 /etc/group-というバックアップファイルがあったので、まず/etc/groupの名前を変えて、と思ったら「cannot lock /etc/group ; try again later. 」と怒られる。このメッセージで検索してみる。どうやら普通にリカバリーモードで起動するとread onlyとなるようだ。

Ubuntu のログインパスワードを忘れた - Qiita

 同じようにrwで起動し、バックアップファイルを復元して、無事sudoできるようになった。
 なおxubuntu 14.04ではadminではなくadmのもよう。

 ログインできるようにはなったが、ログイン時に「compaudit:120: unknown group」とエラーが出る。idとgroupsを実行すると

kazz@lance ~# id
uid=1000(kazz) gid=1000 groups=1000,4,24,27,30,33,46,108,124
kazz@lance ~# groups
groups: グループ ID 1000 のグループ名がみつかりません
1000 groups: グループ ID 4 のグループ名がみつかりません
4 groups: グループ ID 24 のグループ名がみつかりません
24 groups: グループ ID 27 のグループ名がみつかりません
27 groups: グループ ID 30 のグループ名がみつかりません
30 groups: グループ ID 33 のグループ名がみつかりません
33 groups: グループ ID 46 のグループ名がみつかりません
46 groups: グループ ID 108 のグループ名がみつかりません
108 groups: グループ ID 124 のグループ名がみつかりません
124
kazz@lance ~#

 でも/etc/groupの中身を見たらちゃんと書かれている。

kazz@lance ~# sudo cat /etc/group
[sudo] password for kazz:

(中略)

kazz:x:1000:nobody,www-data

(中略)
kazz@lance ~#

 わからん。とりあえず放置。ちなみにグループ番号120はbluetooth

 再発防止策として、以下の関数を.zshrcに追加。

function usermod() {
  local opt
  for opt in "$@"; do
    if [[ $opt == -G ]]; then
      echo 'usermod -G is sealed!'
      return 1
    fi
  done
  command crontab "$@"
}

 以下のサイトの事例そのまま。zshでもそのままいけた。

Bash - 危険な crontab -r を封印する - Qiita

 他の2台のPCでも同様に対処。