「/etc/group ファイルの中身の意味を知りたい」
Linuxのユーザー管理では、グループを使った権限制御が基本です。Webサーバーのファイル共有や開発チームの権限分離など、グループの設計は現場で必ず必要になります。
この記事では、
groupadd コマンドの実践的な使い方を解説します。グループの追加から、
groupmod での変更、groupdel での削除、/etc/group ファイルの読み方、実務でのグループ設計の考え方まで網羅しました。・groupadd グループ名 で新しいグループを作成し、GID は空き番号から自動割り当てされる
・-g でGIDを指定して複数サーバー間でGIDを統一でき、-r でシステムグループを作成できる
・グループにユーザーを追加するには usermod -aG グループ名 ユーザー名 を使う(-a 必須)
・groupmod -n で名前変更、groupdel で削除。プライマリグループになっているグループは削除不可
・Webサーバーのファイル共有は共有グループ + chmod g+s(SGID)の組み合わせが定番
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Linuxのグループとは?権限管理の基本
Linuxでは、ファイルやディレクトリのアクセス権を「所有者」「グループ」「その他」の3つで制御します。グループを使うと、複数のユーザーに同じ権限をまとめて付与できます。たとえば、Web開発チームの3人に
/var/www/html/ の編集権限を与えたい場合、3人全員を同じグループに所属させて、ディレクトリのグループ権限を設定すればOKです。グループには2種類あります。
・プライマリグループ:ユーザーが必ず1つ持つメインのグループ。ファイル作成時にこのグループが所有グループになる
・サブグループ(補助グループ):ユーザーが追加で所属できるグループ。複数所属が可能
グループ情報は
/etc/group ファイルに格納されています。/etc/group ファイルの読み方
/etc/group ファイルは、1行につき1グループの情報が以下の形式で記録されています。# /etc/group の形式 # グループ名:パスワード:GID:メンバーリスト $ cat /etc/group | head -5 root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4:tomohiro
・パスワード:通常は「x」(/etc/gshadowで管理)
・GID:グループID(数値)
・メンバーリスト:サブグループとして所属しているユーザー(カンマ区切り)
groupaddコマンドでグループを追加する
1. 基本的なグループ追加
groupadd コマンドの基本構文は非常にシンプルです。root権限が必要です。# webdevグループを作成する $ sudo groupadd webdev # 作成されたか確認する $ grep webdev /etc/group webdev:x:1001:
2. GIDを指定してグループを追加する(-g)
複数サーバーでGIDを統一したい場合など、GIDを明示的に指定できます。# GIDを2000に指定してグループを作成する $ sudo groupadd -g 2000 devteam $ grep devteam /etc/group devteam:x:2000:
3. システムグループを作成する(-r)
サービス用のグループを作成する場合は-r オプションを使います。システムグループにはGID 1000未満の番号が割り当てられます。# nginx用のシステムグループを作成する $ sudo groupadd -r nginx $ grep nginx /etc/group nginx:x:988:
グループにユーザーを追加する
グループを作成したら、usermod -aG でユーザーをそのグループに追加します。※
-a(append)を付け忘れると、ユーザーの既存のサブグループが全て外れてしまうので注意してください。# tomohiroをwebdevグループに追加する $ sudo usermod -aG webdev tomohiro # 所属グループを確認する $ id tomohiro uid=1000(tomohiro) gid=1000(tomohiro) groups=1000(tomohiro),1001(webdev) # または getent で確認する $ getent group webdev webdev:x:1001:tomohiro
groupmodでグループ情報を変更する
既存のグループ名やGIDを変更するにはgroupmod を使います。1. グループ名を変更する(-n)
# webdevをwebteamに名前変更する $ sudo groupmod -n webteam webdev $ grep webteam /etc/group webteam:x:1001:tomohiro
2. GIDを変更する(-g)
# GIDを3000に変更する $ sudo groupmod -g 3000 webteam
find コマンドで該当ファイルを見つけて chgrp で修正してください。groupdelでグループを削除する
不要になったグループはgroupdel で削除できます。# webteamグループを削除する $ sudo groupdel webteam
【重要】削除前の注意事項
・いずれかのユーザーのプライマリグループになっているグループは削除できません・削除前に
getent group グループ名 でメンバーを確認しましょう・そのグループが所有するファイルは、GIDが数値のまま残ります
グループ情報の確認コマンド
グループ関連の情報を確認するコマンドをまとめておきます。# 全グループを一覧表示する $ getent group # 特定グループの情報を確認する $ getent group webdev # 現在のユーザーの所属グループを確認する $ groups # 特定ユーザーの所属グループを確認する $ id tomohiro
トラブルシュート・エラー対処
「groupadd: group 'xxx' already exists」
同名のグループが既に存在しています。getent group グループ名 で確認してください。$ sudo groupadd webdev groupadd: group 'webdev' already exists # 既存のグループ情報を確認する $ getent group webdev webdev:x:1001:tomohiro
「groupadd: cannot lock /etc/group」
別のユーザー管理コマンドが実行中の場合に発生します。しばらく待ってから再実行してください。ロックファイルが残ってしまっている場合は、以下で確認・削除できます。
# ロックファイルの確認 $ ls -la /etc/group.lock # 他にユーザー管理コマンドが動いていないことを確認してから削除 $ sudo rm /etc/group.lock
「groupdel: cannot remove the primary group of user 'xxx'」
そのグループをプライマリグループとしているユーザーがいる場合は削除できません。先にそのユーザーのプライマリグループを変更してください。# ユーザーのプライマリグループを変更してからグループを削除する $ sudo usermod -g users tomohiro $ sudo groupdel webdev
実務でのグループ設計の考え方
Webサーバーのファイル共有
ApacheやNginxのドキュメントルートを複数の開発者で編集する場合、共有グループを作成するのが定番です。# webadminグループを作成してメンバーを追加する $ sudo groupadd webadmin $ sudo usermod -aG webadmin user1 $ sudo usermod -aG webadmin user2 # ドキュメントルートのグループを変更する $ sudo chgrp -R webadmin /var/www/html/ $ sudo chmod -R g+w /var/www/html/ # 新規ファイルもグループを引き継ぐようにする $ sudo chmod g+s /var/www/html/
chmod g+s(SGIDビット)を設定すると、そのディレクトリ内に作成されたファイルは自動的に親ディレクトリのグループを引き継ぎます。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| グループを追加する | sudo groupadd グループ名 |
| GIDを指定してグループを追加する | sudo groupadd -g GID グループ名 |
| システムグループを追加する | sudo groupadd -r グループ名 |
| ユーザーをグループに追加する | sudo usermod -aG グループ名 ユーザー名 |
| グループ名を変更する | sudo groupmod -n 新名前 旧名前 |
| グループを削除する | sudo groupdel グループ名 |
| グループ情報を確認する | getent group グループ名 |
グループ設計をきちんと考えてサーバーを管理できていますか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:whoコマンドでログイン中のユーザーを確認する方法|w・lastとの使い分けも
- 前のページへ:usermodコマンドでユーザー設定を変更する方法|グループ追加・シェル変更・ロックも
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドF-J・ユーザ・グループ管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます