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のメニューが出なくて困った。右シフトキーを押して起動したら出た。そういうもの?