前の記事では、Linuxがユーザによって 「誰が操作しているのか」を識別していることを学習しました。
しかし、実際のLinuxサーバではユーザを1人ずつ管理するだけでは、 権限管理が複雑になってしまいます。
そこで利用されるのが、 グループ(group)です。
プライマリグループと補助グループは何が違うのか?
usermod -aG の「-a」はなぜ重要なのか?
グループを理解すると、前に学習した owner / group / othersの「group」が Linux内部でどのように管理されているのかが見えてきます。
Linuxのグループ・GID・/etc/group・
プライマリグループ・補助グループの関係を理解し、
groups・groupadd・
usermodなどを使った基本的な
グループ管理ができる状態を目指します。
Linuxのグループとは?
Linuxのグループとは、 複数のユーザをまとめて管理するための仕組みです。
たとえば、Linuxサーバを管理している 3人のユーザがいるとします。
この3人に同じ権限を与えたい場合、 それぞれ個別に管理するよりも、
webadminに必要な権限を設定する
という形にすると管理しやすくなります。
Linuxではユーザをグループに所属させることで、 複数ユーザに対するアクセス権を効率的に管理できます。
初級で学んだ「owner / group / others」とつながる
Linux初級のパーミッションでは、 次のような表示を学習しました。
-rwxr-x---
この9文字は、 次の3つに分かれていました。
今回学習しているグループは、 このGROUP部分の権限を誰に適用するのか に関係します。
ファイルの所有グループに所属しているユーザには、 GROUP部分に設定された権限が関係します。
LinuxはグループをGIDで識別する
ユーザをLinux内部では UID(User ID)で識別していました。
グループにも同じような識別番号があります。 それがGID(Group ID)です。
人間はwebadminという名前で認識しますが、
Linux内部ではGIDによってグループを識別します。
idコマンドで所属グループを確認する
前の記事でも利用した
idコマンドを使うと、
UIDだけでなくGIDや所属グループも確認できます。
id tanaka
$ id tanaka
uid=1001(tanaka) gid=1001(tanaka) groups=1001(tanaka),2001(webadmin)
この結果から、
という情報を読み取れます。
ここで「GIDが1001なのに、webadminのGIDは2001なの?」 と疑問に感じるかもしれません。
これはLinuxユーザが 複数のグループへ所属できるためです。
プライマリグループと補助グループ
Linuxユーザのグループには、 大きく分けて2種類があります。
ユーザに設定される 基本となるグループです。
tanaka
追加で所属する グループです。
webadmin
先ほどの例では、
uid=1001(tanaka) gid=1001(tanaka) groups=1001(tanaka),2001(webadmin)
となっていました。
この場合、
という状態です。
基本となるプライマリグループに加えて、 必要な権限に応じて複数の補助グループへ 所属させることができます。
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
つまり、この1行から webadminというGID 2001のグループに、 tanakaとsatoが補助グループのメンバーとして登録されている ことが分かります。
ユーザのプライマリグループは
/etc/passwdのGIDフィールドとの対応でも管理されています。
所属グループを確認するときは、
idやgroupsを使うと分かりやすいです。
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を付け忘れることです。
usermod -aG webadmin tanaka
既存グループを維持して追加
usermod -G webadmin tanaka
補助グループの一覧を置き換える
たとえばtanakaがすでに
developersグループにも所属していたとします。
developers
developers + webadmin
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
groupdel:グループを削除する
不要になったグループを削除するときは、 groupdelを利用します。
sudo groupdel webadmin
$ sudo groupdel webadmin
削除後、
/etc/groupを確認して
対象グループが存在しないことを確認できます。
実際のサーバでは、そのグループがファイルやディレクトリの 所有グループとして利用されていないかなどを確認してから 削除することが重要です。
Linuxグループ管理の流れを整理しよう
ここで実際に試してみよう:Linuxグループ管理シミュレーター
ここまで学習したグループ管理を、 疑似Linux環境で実際に操作してみましょう。
グループ作成 → ユーザ追加 → 所属確認 → ユーザ削除 → グループ削除 という一連の流れを体験できます。
Linux Group Management
まずwebadminグループを作成しましょう
groupadd → usermod -aG → groupsの順に実行すると、 グループ管理の流れを理解しやすくなります。
理解度チェック:どのコマンドを使う?
次の状況を考えてみましょう。
developersグループへの所属を維持したまま、 新しくwebadminグループにも所属させたい。
どのコマンドが適切でしょうか?
「既存の所属を維持したまま追加する」がポイントです。
グループを作るだけではファイルの権限は変わらない
ここまでで、 ユーザをグループとしてまとめる方法を理解できました。
では、webadminグループを作って tanakaとsatoを所属させれば、 Webサーバのファイルを編集できるのでしょうか。
グループを作成しただけでは、 ファイルの所有者や所有グループは変更されません。
たとえば上記のファイルは、 所有者も所有グループもrootです。
webadminグループを作ったのであれば、 ファイルの所有グループを root → webadmin へ変更したい場面が出てきます。
このような
ファイルの所有者・所有グループを変更するためのコマンド
が、次に学習する
chownとchgrpです。
確認問題:Linuxグループ管理を理解できたか確認しよう
Linux内部でグループを識別する番号はどれですか?
LinuxではGID(Group ID)によって グループを識別します。
新しいグループを作成する代表的なコマンドはどれですか?
groupaddは新しいLinuxグループを 作成するための代表的なコマンドです。
既存の補助グループを維持しながら、 webadminへtanakaを追加するコマンドはどれですか?
-aはappendを意味します。 既存の補助グループを維持しながら追加する場合は -aGを利用します。
3問に挑戦してみましょう。
まとめ
Linuxではグループを使って複数ユーザをまとめて管理 できる
Linux内部ではグループを GID(Group ID)によって識別する
ユーザにはプライマリグループと 補助グループがあり、 1ユーザが複数グループへ所属できる
グループ情報は/etc/groupで確認でき、
idやgroupsで
ユーザの所属グループを確認できる
グループ作成にはgroupadd、
補助グループへの追加には
usermod -aGを利用する
次は「chown・chgrpで所有者とグループを変更する」を学びましょう
ユーザとグループを管理できるようになったら、 次はファイルやディレクトリに 「誰が所有者なのか」「どのグループが所有しているのか」を 設定する方法を学習します。
次の記事では、 chown・chgrpを使った所有者・所有グループの変更を 実際に操作しながら理解していきます。
chown・chgrpで所有者とグループを変更する →
