グループ管理入門 - 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.defs の GID_MIN〜GID_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 2775 の 2(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">