usermod -G でユーザに新しいサブグループを追加してはいけない

例えば subversion サーバを設定するとき、subversion グループを作成する。

 % sudo groupadd subversion

ここで、作成したグループをユーザーに追加するのに、決して usermod -G を使ってはいけない。

 % sudo usermod -G subversion user # ダメ!

「確かに」これでユーザーは subversion グループに設定できる。だが誤った使い方である。何がいけないか。

既に設定されていた他のグループの設定が全部飛ぶのだ!

特に怖いのが、個人でUbuntuを使っている場合に唯一のユーザである本人が admin グループから外れること。
不具合に気がついて vigr で修正しようにも、sudo が利かない!

もちろんリカバリーモードで復旧は可能*1だし(/etc/group- というバックアップファイルが作られるようだ)、あらかじめ設定済みのグループを確認して

 % sudo usermod -G group1,group2,...,newgroup user # おすすめしない

というコマンドラインを書いてもいいが、億劫だし間違いそうだし万一漏れがあると後で困る。
ここは gpasswd -a をおすすめする。

 % sudo gpasswd -a user subversion # オススメ!

これなら当初の意図通り、user の設定ずみのグループに影響を与えずに、新しく subversion グループに設定することができる。

「is not in the sudoers file」などでぐぐるといろいろ対策ページがひっかかるので、まあよくあるトラブルなのだけど、要するにコマンドの仕様を理解せずに、Howtoページに書いてあるまま usermod -G を実行するからこうなるのである。

俺のことなんだけどね……orz

*1:余談だがいくらシフトキーを押して起動してもGRUB2のメニューが出なくて困った。右シフトキーを押して起動したら出た。そういうもの?