宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)

この記事のポイント

・グループにメンバーを追加するには gpasswd -a ユーザー名 グループ名 を使う
・gpasswd -a を -a なしで実行するとパスワード設定モードになり追加されない
・usermod -G でも追加できるが既存所属を上書きしないよう -aG 併用が必須
・追加後は id ユーザー名 / cat /etc/group で反映を必ず確認する

「ユーザーをグループに追加したのに、なぜか反映されない」
そんな質問を、セミナーで何度も受けてきました。

原因のほとんどは、gpasswd や usermod のオプション指定の落とし穴です。とくに usermod -G を -a なしで実行して、既存のセカンダリグループを丸ごと吹き飛ばすという事故は、現場でもよく見かけます。

この記事では、20年以上Linuxサーバーを運用してきた経験から、グループにメンバーを安全に追加する方法と、現場で実際に起きるトラブルとその回避策を解説します。RHEL系(Rocky Linux 9 / RHEL 9)、Ubuntu系(Ubuntu 22.04 / 24.04 LTS)の両方で動作確認しています。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

グループにメンバーを追加する基本:gpasswd -a の使い方

既存グループにメンバーを追加するには、gpasswdコマンドにオプション「-a」を付けて実行します。

引数には、追加するユーザー名、グループ名を指定して実行します。この処理は、root、またはグループ管理者に登録されているユーザーが実行できます。

グループに管理者を設定する

■グループ管理者に登録されているユーザーがメンバー追加する

[pakira@Tiger ~]$ whoami  ←グループ管理者であることを確認します。 pakira [pakira@Tiger ~]$ gpasswd -a miyazaki unyo ←miyazakiをunyoグループに追加します。 Adding user miyazaki to group unyo [pakira@Tiger ~]$ cat /etc/group | grep miyazaki ←グループに追加されていることを確認します。 unyo:x:600:miyazaki miyazaki:x:601:

rootユーザーで追加する場合

グループ管理者を介さず、rootで直接追加することもできます。サーバー構築時の初期セットアップでは、こちらの形がほとんどです。

# rootでmiyazakiをwheelグループに追加 [root@Tiger ~]# gpasswd -a miyazaki wheel Adding user miyazaki to group wheel # 確認 [root@Tiger ~]# id miyazaki uid=601(miyazaki) gid=601(miyazaki) groups=601(miyazaki),10(wheel)

【重要】gpasswd の -a を忘れると何が起こるか

ここがgpasswdの最大の落とし穴です。

gpasswdコマンドを -a オプションなしで実行すると、ユーザー追加ではなく「グループパスワードの設定モード」に入ります。何度パスワードを設定しても、メンバーは追加されません。

# -aを忘れた場合(誤った使い方) [root@Tiger ~]# gpasswd unyo Changing the password for group unyo New Password: ←これはグループパスワード設定モード Re-enter new password: # 確認しても miyazaki は追加されていない [root@Tiger ~]# cat /etc/group | grep unyo unyo:x:600:

セミナーで「gpasswd を実行したのにメンバーが追加されない」という質問を受けたら、まずこの -a 忘れを疑ってください。コマンド履歴を history で見せてもらうと、9割方このパターンです。

gpasswd でメンバーを削除する:-d オプション

追加と対になる操作として、削除も覚えておくと便利です。gpasswdコマンドに -d オプションを付けて実行します。

# miyazakiをunyoグループから削除 [root@Tiger ~]# gpasswd -d miyazaki unyo Removing user miyazaki from group unyo # 確認 [root@Tiger ~]# cat /etc/group | grep unyo unyo:x:600:

削除した後、もしそのユーザーがログイン中なら、一度ログアウトして再ログインしないとグループ権限の変更は反映されません。これも現場でハマる点です。

usermod -G でメンバーを追加する:必ず -aG をセットで使う

gpasswd以外に、usermodコマンドでもグループへの追加ができます。ただし、usermodの -G には致命的な罠があります。

■usermod -G の罠(-a なしは既存所属を上書きする)

# miyazakiの現在のセカンダリグループを確認 [root@Tiger ~]# id miyazaki uid=601(miyazaki) gid=601(miyazaki) groups=601(miyazaki),10(wheel),600(unyo) # -aなしで実行(事故の典型例) [root@Tiger ~]# usermod -G developers miyazaki # wheelとunyoが消えた [root@Tiger ~]# id miyazaki uid=601(miyazaki) gid=601(miyazaki) groups=601(miyazaki),1001(developers)

これがusermodの怖いところです。-G は「セカンダリグループを指定したリストで置き換える」動作なので、-a なしで実行すると既存のセカンダリグループが全部消えます。

これを防ぐには、必ず -a(append)と -G をセットで指定します。

# -aGをセットで使う(正しい使い方) [root@Tiger ~]# usermod -aG developers miyazaki # 既存のwheel・unyoを残しつつ、developersが追加される [root@Tiger ~]# id miyazaki uid=601(miyazaki) gid=601(miyazaki) groups=601(miyazaki),10(wheel),600(unyo),1001(developers)

私のセミナーでは、usermod -G を教える時に必ず「-aG はセットで覚えてください」と何度も繰り返します。それくらい事故が多い操作です。

gpasswd と usermod の使い分け:現場での判断軸

両方ともグループにメンバーを追加できますが、現場では用途で使い分けます。
コマンド用途注意点
gpasswd -a ユーザー名 グループ名1ユーザーを1グループに追加-a を忘れない
gpasswd -d ユーザー名 グループ名1ユーザーを1グループから削除ログイン中ユーザーは再ログイン必要
usermod -aG グループ名 ユーザー名セカンダリグループに追加(既存維持)必ず -a と -G をセットで
usermod -G グループ1,グループ2 ユーザー名セカンダリグループを指定リストに上書き既存所属が消えるので意図して使う
usermod -g グループ名 ユーザー名プライマリグループの変更小文字-gはプライマリ専用
シンプルに「1人ずつ追加・削除」したいなら gpasswd、シェルスクリプトでまとめて処理したいなら usermod -aG、と覚えておくと現場でブレません。

追加した後の反映確認とトラブル対処

グループにメンバーを追加した後、必ず反映を確認します。チェックには次の3つを使い分けます。

■idコマンドでユーザーの所属グループを表示

[root@Tiger ~]# id miyazaki uid=601(miyazaki) gid=601(miyazaki) groups=601(miyazaki),10(wheel),600(unyo)

■groupsコマンドで所属グループ名を表示

[root@Tiger ~]# groups miyazaki miyazaki : miyazaki wheel unyo

■/etc/groupを直接確認

[root@Tiger ~]# grep miyazaki /etc/group wheel:x:10:miyazaki unyo:x:600:miyazaki miyazaki:x:601:

追加したのにグループ権限が使えない時の対処

「追加したはずなのに、そのグループの権限でファイルにアクセスできない」というトラブルもよくあります。

原因は、ログイン中のセッションがグループ追加前の情報を保持しているためです。対処は次の2つです。

・対象ユーザーを一度ログアウトさせて再ログインする
・newgrp コマンドで現在のシェルを新しいグループで開き直す

# 現在のシェルに developers グループを反映 [miyazaki@Tiger ~]$ newgrp developers [miyazaki@Tiger ~]$ id uid=601(miyazaki) gid=1001(developers) groups=601(miyazaki),10(wheel),600(unyo),1001(developers)

ssh接続でログインし直すのが、結局いちばん確実です。

本記事のまとめ

グループにメンバーを追加するコマンドを一覧でまとめます。
やりたいことコマンド
グループにメンバーを追加するgpasswd -a miyazaki unyo
グループからメンバーを削除するgpasswd -d miyazaki unyo
セカンダリグループに追加(既存維持)usermod -aG developers miyazaki
セカンダリグループを上書きするusermod -G developers,wheel miyazaki
プライマリグループを変更するusermod -g developers miyazaki
所属グループを確認するid miyazaki または groups miyazaki
現在のシェルにグループを反映newgrp developers
gpasswd の -a 忘れ、usermod -G の -a 抜き、この2つだけ気をつければ、グループメンバー追加で事故が起きることはありません。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。