グループ管理入門 - groupadd/groupmodとアクセス制御

グループ管理入門 - groupadd/groupmodとアクセス制御

この記事でわかること

  • groupadd / groupmod / groupdel基本構文と実用例が分かる
  • グループへのメンバー追加・削除(usermod -aG / gpasswd)の正しい手順が分かる
  • /etc/group の構造とアクセス制御設計の考え方が身につく

結論(実務の型)

  • グループ作成groupadd groupname
  • メンバー追加usermod -aG groupname username-a 必須。忘れると既存グループから追い出される)
  • メンバー削除gpasswd -d username groupname
  • グループ変更は再ログインまたは newgrp で反映

groupadd とは?

groupadd は新しいグループを作成するコマンドだ。ユーザー管理の useradd に相当するグループ版と捉えれば分かりやすい。

# 基本形
sudo groupadd developers

# GID を指定して作成(番号が決まっている場合)
sudo groupadd -g 1500 developers

# システムグループとして作成(GID 999 以下の範囲)
sudo groupadd -r sysgroup

作成後は /etc/group に追記される。確認は次のコマンドで行う。

grep developers /etc/group
# → developers:x:1500:

GID を明示しない場合、システムが /etc/login.defsGID_MINGID_MAX(通常 1000〜60000)の範囲で自動採番する。

groupmod でグループを変更するには?

groupmod は既存グループの属性(グループ名・GID)を変更するコマンドだ。

# グループ名を変更
sudo groupmod -n newdevelopers developers

# GID を変更
sudo groupmod -g 1600 developers

GID を変更すると、そのグループを所有者とするファイルが「孤立した GID」を持ったままになる。変更後は次のコマンドで整合性を修正する。

find / -gid 旧GID -exec chgrp 新GID {} \;

groupdel でグループを削除するには?

groupdel はグループを /etc/group から削除する。

sudo groupdel developers

そのグループをプライマリグループとするユーザーが存在する場合は削除できない。先にそのユーザーのプライマリグループを変更してから実行する。

# プライマリグループが developers のユーザーを確認
awk -F: '$4 == "1500" {print $1}' /etc/passwd

# プライマリグループを変更してから削除
sudo usermod -g othergroup username
sudo groupdel developers

グループメンバーを追加・削除するには?

メンバー追加

# usermod -aG(推奨・複数グループ対応)
sudo usermod -aG developers alice

# gpasswd -a(グループ単位で管理する場合)
sudo gpasswd -a alice developers

-a(append)は必須フラグだ。これを省略すると alice の所属グループが developers だけにリセットされる。

# 危険な例:既存グループをすべて消して developers だけにする
sudo usermod -G developers alice   # -a なし

メンバー削除

sudo gpasswd -d alice developers

複数グループを一度に設定

sudo usermod -aG developers,ops alice

グループメンバーシップを確認するには?

グループへの変更はすぐには反映されず、再ログインが必要なことが多い。

# 現在のユーザーの所属グループ
groups

# 特定ユーザーの所属グループ
id alice
groups alice

# /etc/group を直接確認
grep developers /etc/group
# → developers:x:1500:alice,bob

再ログインせずにグループを反映するには newgrp を使う。

# 現在のシェルを developers グループで起動
newgrp developers

newgrp はサブシェルを起動するため、exit で元のシェルに戻る。スクリプト内でのグループ切り替えには使いにくい点を覚えておくこと。

/etc/group の構造を読む

/etc/group の 1 行は次の形式だ。

グループ名:パスワード:GID:メンバーリスト
developers:x:1500:alice,bob,carol
  • グループ名: developers
  • パスワード: x/etc/gshadow に移管されているため実質的に使われない)
  • GID: 1500
  • メンバーリスト: カンマ区切り。プライマリグループのユーザーはここに表示されない
# 全グループ一覧
cat /etc/group

# GID でソート
sort -t: -k3 -n /etc/group

グループを使ったアクセス制御の設計

グループは「誰がどのリソースにアクセスできるか」を一元管理する仕組みとして機能する。典型的なパターンを 2 つ示す。

パターン 1: ディレクトリの共有

# /srv/project を developers グループで共有する
sudo groupadd developers
sudo mkdir -p /srv/project
sudo chown root:developers /srv/project
sudo chmod 2775 /srv/project   # setgid ビット付き

# alice を developers に追加
sudo usermod -aG developers alice

chmod 27752(setgid)により、このディレクトリ内に作成したファイルは自動的に developers グループを継承する。

パターン 2: sudo 権限のグループ管理

Ubuntu では sudo グループへの追加が sudo 権限付与の標準的な方法だ。

# alice に sudo 権限を付与(Ubuntu)
sudo usermod -aG sudo alice

# CentOS / RHEL の場合は wheel グループを使う
sudo usermod -aG wheel alice

sudo グループへの追加は再ログイン後に有効になる。緊急の場合は su - alice でユーザーを切り替えて sudo -l で確認すること。

<section class="article-conclusion" id="article-conclusion">

まとめ

操作 コマンド 注意点
グループ作成 groupadd groupname GID 自動採番
グループ名変更 groupmod -n newname oldname GID は変わらない
GID 変更 groupmod -g GID groupname 既存ファイルの GID を手動修正
グループ削除 groupdel groupname プライマリグループは削除不可
メンバー追加 usermod -aG group user -a 必須
メンバー削除 gpasswd -d user group 再ログイン後に反映
メンバー確認 groups user / id user
  • usermod -aG-a を忘れると既存グループが消える — 最も多いミス
  • グループ変更は再ログインまたは newgrp で反映
  • setgid ビット(chmod g+s)を使うとディレクトリ内のファイルがグループを継承する

</section>