Linuxグループ管理の基本|groupadd・usermod・groupsを初心者向けに解説

  • URLをコピーしました!

前の記事では、Linuxがユーザによって 「誰が操作しているのか」を識別していることを学習しました。

しかし、実際のLinuxサーバではユーザを1人ずつ管理するだけでは、 権限管理が複雑になってしまいます。

そこで利用されるのが、 グループ(group)です。

Linuxのグループとは何のために存在するのか?
プライマリグループと補助グループは何が違うのか?
usermod -aG の「-a」はなぜ重要なのか?

グループを理解すると、前に学習した owner / group / othersの「group」が Linux内部でどのように管理されているのかが見えてきます。

🐧 LINUX INTERMEDIATE

この記事はLinux中級講座の一部です。 Linuxサーバ管理に必要なユーザ・グループ・権限管理を 順番に学習していきます。

Linux中級講座を見る →
LESSON GOAL この記事のゴール

Linuxのグループ・GID・/etc/group・ プライマリグループ・補助グループの関係を理解し、 groupsgroupaddusermodなどを使った基本的な グループ管理ができる状態を目指します。

目次

Linuxのグループとは?

Linuxのグループとは、 複数のユーザをまとめて管理するための仕組みです。

たとえば、Linuxサーバを管理している 3人のユーザがいるとします。

USER tanaka
USER sato
USER suzuki
GROUP webadmin Webサーバ管理者グループ

この3人に同じ権限を与えたい場合、 それぞれ個別に管理するよりも、

webadminグループ

webadminに必要な権限を設定する

という形にすると管理しやすくなります。

グループ=複数ユーザをまとめる単位

Linuxではユーザをグループに所属させることで、 複数ユーザに対するアクセス権を効率的に管理できます。

初級で学んだ「owner / group / others」とつながる

Linux初級のパーミッションでは、 次のような表示を学習しました。

-rwxr-x---

この9文字は、 次の3つに分かれていました。

OWNER rwx 所有者
GROUP r-x 所有グループ
OTHERS その他

今回学習しているグループは、 このGROUP部分の権限を誰に適用するのか に関係します。

ここでパーミッションとグループ管理がつながる

ファイルの所有グループに所属しているユーザには、 GROUP部分に設定された権限が関係します。

LinuxはグループをGIDで識別する

ユーザをLinux内部では UID(User ID)で識別していました。

グループにも同じような識別番号があります。 それがGID(Group ID)です。

USER tanaka UID 1001 ユーザを識別
GROUP webadmin GID 2001 グループを識別
ユーザ → UID グループ → GID

人間はwebadminという名前で認識しますが、 Linux内部ではGIDによってグループを識別します。

idコマンドで所属グループを確認する

前の記事でも利用した idコマンドを使うと、 UIDだけでなくGIDや所属グループも確認できます。

id tanaka
Linux Terminal
$ id tanaka
uid=1001(tanaka) gid=1001(tanaka) groups=1001(tanaka),2001(webadmin)

この結果から、

UID 1001 tanaka
GID 1001 tanaka
GROUP 2001 webadmin

という情報を読み取れます。

ここで「GIDが1001なのに、webadminのGIDは2001なの?」 と疑問に感じるかもしれません。

これはLinuxユーザが 複数のグループへ所属できるためです。

プライマリグループと補助グループ

Linuxユーザのグループには、 大きく分けて2種類があります。

PRIMARY GROUP プライマリグループ

ユーザに設定される 基本となるグループです。

tanaka
SUPPLEMENTARY GROUP 補助グループ

追加で所属する グループです。

webadmin

先ほどの例では、

uid=1001(tanaka) gid=1001(tanaka) groups=1001(tanaka),2001(webadmin)

となっていました。

この場合、

USER tanaka
PRIMARY tanaka GID 1001
SUPPLEMENTARY webadmin GID 2001

という状態です。

1ユーザは複数のグループへ所属できる

基本となるプライマリグループに加えて、 必要な権限に応じて複数の補助グループへ 所属させることができます。

groupsコマンドで所属グループを確認する

所属しているグループだけを簡単に確認したい場合は、 groupsコマンドが便利です。

groups tanaka
$ groups tanaka
tanaka : tanaka webadmin

この結果から、tanakaユーザが tanakaグループとwebadminグループ に所属していることが分かります。

グループ情報は/etc/groupで確認できる

Linuxのグループ情報は、 基本的に/etc/groupで確認できます。

cat /etc/group
$ cat /etc/group
root:x:0:
tanaka:x:1001:
sato:x:1002:
webadmin:x:2001:tanaka,sato

ユーザ情報を確認する /etc/passwdと同じように、 1行が1つのグループを表します。

/etc/groupの1行を読み解いてみよう

次の行を例に確認します。

webadmin:x:2001:tanaka,sato
01 webadmin グループ名
02 x パスワード情報
03 2001 GID
04 tanaka,sato メンバー

つまり、この1行から webadminというGID 2001のグループに、 tanakaとsatoが補助グループのメンバーとして登録されている ことが分かります。

BEGINNER POINT /etc/groupだけ見て「所属していない」と判断しない

ユーザのプライマリグループは /etc/passwdのGIDフィールドとの対応でも管理されています。 所属グループを確認するときは、 idgroupsを使うと分かりやすいです。

groupadd:新しいグループを作成する

新しいグループを作成するときは、 groupaddコマンドを利用します。

sudo groupadd webadmin

基本形は、

groupadd [オプション] グループ名

です。

$ sudo groupadd webadmin

$ grep '^webadmin:' /etc/group
webadmin:x:2001:

これでwebadminグループが作成されました。

ただし、この時点では まだtanakaはwebadminに所属していません。

usermod -aG:ユーザをグループへ追加する

既存ユーザを補助グループへ追加するときは、 usermodを利用できます。

sudo usermod -aG webadmin tanaka

それぞれの意味を確認しましょう。

-a append

既存の所属グループを維持したまま追加する

-G groups

補助グループを指定する

webadmin 追加先

所属させるグループ

tanaka 対象ユーザ

グループへ追加するユーザ

実行後に確認してみます。

$ id tanaka
uid=1001(tanaka) gid=1001(tanaka) groups=1001(tanaka),2001(webadmin)

2001(webadmin)が追加されていれば成功です。

重要:usermod -Gとusermod -aGの違い

Linuxグループ管理で特に注意したいのが、 -aを付け忘れることです。

RECOMMENDED usermod -aG webadmin tanaka 既存グループを維持して追加
CAUTION usermod -G webadmin tanaka 補助グループの一覧を置き換える

たとえばtanakaがすでに developersグループにも所属していたとします。

BEFORE tanaka

developers

-aG tanaka

developers + webadmin

IMPORTANT 補助グループへ追加するときは「-aG」をセットで覚える

usermod -Gだけを利用すると、 既存の補助グループ所属を失う可能性があります。 「追加」したい場合は-aGを利用します。

gpasswd:グループのメンバーを管理する

グループへのユーザ追加・削除には、 gpasswdを利用する方法もあります。

tanakaをwebadminへ追加する場合は、

sudo gpasswd -a tanaka webadmin

とします。

$ sudo gpasswd -a tanaka webadmin
Adding user tanaka to group webadmin

反対に、webadminからtanakaを削除する場合は、

sudo gpasswd -d tanaka webadmin
$ sudo gpasswd -d tanaka webadmin
Removing user tanaka from group webadmin
gpasswd -a ユーザをグループへ追加
gpasswd -d ユーザをグループから削除

groupdel:グループを削除する

不要になったグループを削除するときは、 groupdelを利用します。

sudo groupdel webadmin
$ sudo groupdel webadmin

削除後、 /etc/groupを確認して 対象グループが存在しないことを確認できます。

CAUTION グループを削除する前に利用状況を確認する

実際のサーバでは、そのグループがファイルやディレクトリの 所有グループとして利用されていないかなどを確認してから 削除することが重要です。

Linuxグループ管理の流れを整理しよう

STEP 01 groupadd グループ作成
STEP 02 usermod -aG ユーザを追加
STEP 03 id / groups 所属確認
STEP 04 groupdel グループ削除

ここで実際に試してみよう:Linuxグループ管理シミュレーター

ここまで学習したグループ管理を、 疑似Linux環境で実際に操作してみましょう。

グループ作成 → ユーザ追加 → 所属確認 → ユーザ削除 → グループ削除 という一連の流れを体験できます。

INTERACTIVE LAB

Linux Group Management

GROUP ADMIN
USER tanaka
GROUP webadmin
GROUP STATUS NOT CREATED
MEMBERSHIP NOT MEMBER
infrauser@linux
Linux group management practice
sudo groupadd webadmin を実行してグループを作成してみましょう。
infrauser@linux:~$
START

まずwebadminグループを作成しましょう

groupadd → usermod -aG → groupsの順に実行すると、 グループ管理の流れを理解しやすくなります。

理解度チェック:どのコマンドを使う?

次の状況を考えてみましょう。

SCENARIO tanakaは現在developersグループに所属しています。

developersグループへの所属を維持したまま、 新しくwebadminグループにも所属させたい。

どのコマンドが適切でしょうか?

回答を選択してください

「既存の所属を維持したまま追加する」がポイントです。

グループを作るだけではファイルの権限は変わらない

ここまでで、 ユーザをグループとしてまとめる方法を理解できました。

では、webadminグループを作って tanakaとsatoを所属させれば、 Webサーバのファイルを編集できるのでしょうか。

グループを作成しただけでは、 ファイルの所有者や所有グループは変更されません。

FILE /var/www/html/index.html
OWNER root GROUP root

たとえば上記のファイルは、 所有者も所有グループもrootです。

webadminグループを作ったのであれば、 ファイルの所有グループを root → webadmin へ変更したい場面が出てきます。

BEFORE root : root
AFTER root : webadmin

このような ファイルの所有者・所有グループを変更するためのコマンド が、次に学習する chownchgrpです。

確認問題:Linuxグループ管理を理解できたか確認しよう

QUESTION 01

Linux内部でグループを識別する番号はどれですか?

正解:B

LinuxではGID(Group ID)によって グループを識別します。

QUESTION 02

新しいグループを作成する代表的なコマンドはどれですか?

正解:C

groupaddは新しいLinuxグループを 作成するための代表的なコマンドです。

QUESTION 03

既存の補助グループを維持しながら、 webadminへtanakaを追加するコマンドはどれですか?

正解:A

-aはappendを意味します。 既存の補助グループを維持しながら追加する場合は -aGを利用します。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

Linuxではグループを使って複数ユーザをまとめて管理 できる

02

Linux内部ではグループを GID(Group ID)によって識別する

03

ユーザにはプライマリグループ補助グループがあり、 1ユーザが複数グループへ所属できる

04

グループ情報は/etc/groupで確認でき、 idgroupsで ユーザの所属グループを確認できる

05

グループ作成にはgroupadd、 補助グループへの追加には usermod -aGを利用する

NEXT LESSON

次は「chown・chgrpで所有者とグループを変更する」を学びましょう

ユーザとグループを管理できるようになったら、 次はファイルやディレクトリに 「誰が所有者なのか」「どのグループが所有しているのか」を 設定する方法を学習します。

次の記事では、 chown・chgrpを使った所有者・所有グループの変更を 実際に操作しながら理解していきます。

chown・chgrpで所有者とグループを変更する
LINUX INTERMEDIATE

Linux中級講座の一覧へ戻る

Linux中級の学習順を確認したい場合は、 講座一覧へ戻りましょう。

← Linux中級講座へ戻る
目次