groupadd / groupdel / usermod(グループ管理)
『Ubuntu / AlmaLinux』などの Linux 環境でグループを管理するには、groupadd・groupdel・usermod・groups コマンドを使います。グループの情報は /etc/group ファイルに保存されており、ユーザーに複数のグループを割り当てることで、ファイルやコマンドへのアクセス権限を細かく制御できます。
構文
# -----------------------------------------------
# グループの作成
# -----------------------------------------------
# groupadd {グループ名}
# → 新しいグループを作成します
# → グループ ID(GID)は自動で採番されます
# 例: sudo groupadd kiryu-clan
# groupadd -g {GID} {グループ名}
# → GID を明示して作成します
# 例: sudo groupadd -g 1200 kiryu-clan
# -----------------------------------------------
# グループの削除
# -----------------------------------------------
# groupdel {グループ名}
# → 指定したグループを削除します
# → そのグループがいずれかのユーザーのプライマリグループである場合、
# 削除に失敗します。先にユーザーのプライマリグループを変更してください
# 例: sudo groupdel kiryu-clan
# -----------------------------------------------
# グループへのメンバー追加・削除(usermod)
# -----------------------------------------------
# usermod -aG {グループ名} {ユーザー名}
# → ユーザーをサブグループ(補助グループ)に追加します
# → -a(append)オプションが必須です。付けないと既存のグループが上書きされます
# 例: sudo usermod -aG kiryu-clan kazuma
# usermod -g {グループ名} {ユーザー名}
# → ユーザーのプライマリグループを変更します
# 例: sudo usermod -g kiryu-clan kazuma
# gpasswd -d {ユーザー名} {グループ名}
# → ユーザーをグループから削除します
# 例: sudo gpasswd -d kazuma kiryu-clan
# -----------------------------------------------
# グループの確認
# -----------------------------------------------
# groups [{ユーザー名}]
# → 指定したユーザーが所属するグループの一覧を表示します
# → ユーザー名を省略すると自分自身のグループを表示します
# 例: groups kazuma
# id [{ユーザー名}]
# → UID・GID・所属グループを一覧表示します
# 例: id kazuma
# getent group {グループ名}
# → /etc/group からグループの詳細を取得します
# 例: getent group kiryu-clan
構文一覧
| 操作 | コマンド | 説明 |
|---|---|---|
| グループの作成 | groupadd {グループ名} | 新しいグループを作成します。GID は自動採番されます。 |
| GID を指定して作成 | groupadd -g {GID} {グループ名} | グループ ID を明示してグループを作成します。 |
| グループの削除 | groupdel {グループ名} | 指定したグループを削除します。誰かのプライマリグループには設定されていないことが条件です。 |
| サブグループへの追加 | usermod -aG {グループ} {ユーザー} | ユーザーを補助グループに追加します。-a を省略すると既存グループが失われるので必ず付けてください。 |
| プライマリグループの変更 | usermod -g {グループ} {ユーザー} | ユーザーのプライマリグループを変更します。 |
| グループからの削除 | gpasswd -d {ユーザー} {グループ} | ユーザーを指定グループから除外します。 |
| 所属グループの確認 | groups [{ユーザー名}] | ユーザーが所属するグループを一覧表示します。省略すると自分自身のグループを表示します。 |
| UID・GID の確認 | id [{ユーザー名}] | UID・GID・全所属グループを一括表示します。 |
| グループ詳細の取得 | getent group {グループ名} | /etc/group からグループの詳細情報(GID・メンバー一覧)を取得します。 |
| 全グループの一覧 | cat /etc/group | /etc/group の全内容を表示します。グループ名・GID・メンバーを一覧で確認できます。 |
使用例
グループを作成してユーザーを追加する
# ----------------------------------------------- # グループを作成し、複数ユーザーを追加します # ----------------------------------------------- # 極道系グループ kiryu-clan を作成します sudo groupadd kiryu-clan # 作成されたことを確認します getent group kiryu-clan
実行するコマンドは次の通りです。
$ getent group kiryu-clan kiryu-clan:x:1200:
実装例は次の通りです。
# kazuma を kiryu-clan グループに追加します # -a を付けることで既存グループへの所属を保持したまま追加します sudo usermod -aG kiryu-clan kazuma # majima も同じグループに追加します sudo usermod -aG kiryu-clan majima # グループのメンバーを確認します getent group kiryu-clan
実行するコマンドは次の通りです。
$ getent group kiryu-clan kiryu-clan:x:1200:kazuma,majima
ユーザーの所属グループを確認する
# ----------------------------------------------- # groups コマンドと id コマンドで所属グループを確認します # ----------------------------------------------- # kazuma の所属グループを一覧表示します groups kazuma
実行するコマンドは次の通りです。
$ groups kazuma kazuma : kazuma kiryu-clan sudo
実装例は次の通りです。
# id コマンドで UID・GID・補助グループを詳細表示します id kazuma
実行するコマンドは次の通りです。
$ id kazuma uid=1001(kazuma) gid=1001(kazuma) groups=1001(kazuma),27(sudo),1200(kiryu-clan)
グループからユーザーを除外し、グループを削除する
# ----------------------------------------------- # グループ管理のクリーンアップ手順 # ----------------------------------------------- # majima を kiryu-clan グループから除外します sudo gpasswd -d majima kiryu-clan
実行するコマンドは次の通りです。
$ sudo gpasswd -d majima kiryu-clan Removing user majima from group kiryu-clan
実装例は次の通りです。
# kiryu-clan に所属するすべてのユーザーをグループから除外してから # グループ自体を削除します(メンバーが残っていても削除は可能ですが、 # プライマリグループに設定されているユーザーがいると削除に失敗します) sudo gpasswd -d kazuma kiryu-clan sudo groupdel kiryu-clan # グループが削除されたことを確認します(何も表示されなければ削除完了です) getent group kiryu-clan
実行するコマンドは次の通りです。
$ getent group kiryu-clan (何も表示されなければ削除完了です)
/etc/group の構造を確認する
# -----------------------------------------------
# /etc/group のフォーマット確認
# 書式: {グループ名}:{パスワード}:{GID}:{メンバー一覧}
# パスワードフィールドは通常 x(シャドウ化)または空欄です
# -----------------------------------------------
# sudo グループの情報を確認します
getent group sudo
実行するコマンドは次の通りです。
$ getent group sudo sudo:x:27:kazuma
実装例は次の通りです。
# GID が 1000 以上のグループだけを抽出します # awk でフィールドを分割し、3番目のフィールド(GID)で絞り込みます awk -F: '$3 >= 1000' /etc/group
実行するコマンドは次の通りです。
$ awk -F: '$3 >= 1000' /etc/group kazuma:x:1001: majima:x:1002: kiryu-clan:x:1200:kazuma,majima
概要
Linux のアクセス権限は「ユーザー・グループ・その他」の 3 層で管理されており、グループを活用することで複数ユーザーへの一括権限付与が容易になります。groupadd でグループを作成し、usermod -aG でユーザーを追加する流れが基本です。usermod -aG の -a(append)オプションは忘れず指定してください。付けないと既存のグループ所属がすべて上書きされ、sudo グループなどから外れてしまうため注意が必要です。グループへの変更はログイン中のシェルには反映されないため、newgrp {グループ名} で一時的に切り替えるか、いったんログアウト・再ログインして有効化してください。グループ情報の実体は /etc/group ファイルであり、{グループ名}:{パスワード}:{GID}:{メンバー一覧} という形式で 1 行 1 グループで記録されています。ユーザー管理全般については useradd / userdel / usermod(ユーザー管理) のページも参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。