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となるようだ。
同じように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でも同様に対処。