LinuxはマルチユーザーOSであることは「ユーザー」の項目で解説しました。つまり、Linuxは多数のユーザーによって同時に使用されるわけです。
では、このユーザー達は全く別々でバラバラかというとそうではありません。「グループ」という概念でまとめて管理されています。「ユーザー」は「グループ」に「所属する」と考えます。
グループの役割とは一体なんなのでしょうか?最も大きな役割はファイル/ディレクトリのパーミッションとの対応です。
ファイル/ディレクトリには所有ユーザーとは別に、それらを所有するグループに対して読み書き実行のパーミッションが設定されています。これにより、異なるユーザー同士でのファイル/ディレクトリの共有をコントロールすることができるのです。
例えば「users」というグループを作成するにはユーザーrootで以下のコマンドを実行してください。
# groupadd -g 1000 users
-gオプションで与えた数値は、グループIDという、Linuxが内部的に処理を行う際に使用する番号です。与えなかった場合には適当な数値が勝手に割り振られます。
エラーが表示されなければグループusersが作成されたはずです。グループの情報はファイル/etc/groupに書き込まれていますので、確認してみましょう。ここでは、ファイルの内容を後ろから表示してくれるtailコマンドを使ってみます。
表示された中に
users:x:1000:
という行はあったでしょうか?
各ユーザーは、最低1つ、どこかのグループに所属している必要があります。ユーザーが最初に所属するグループを「メイングループ」と呼びます。別の言い方をすると、ユーザーは所属するメイングループを必ず1つだけ持っています。
メイングループの指定は、例えばuseraddコマンドでユーザーを作成するときに、-gオプションでグループ名またはグループIDを与える事によって行うことができます。
例えば上で作成したグループusersに所属するユーザーbeginetを作成するには次のようなコマンドを実行します。
# useradd -g users beginet
作成されたユーザーの情報はファイル/etc/passwdに書き込まれていますので、確認してみましょう。ここではある特定の文字列をファイルの中から検索し、該当する文字列があった行を表示するコマンドgrepを利用してみます。
# grep beginet /etc/passwd
表示される結果は例えば次のようになります。
beginet:x:500:1000::/home/beginet:/bin/bash
様々な項目が:で区切られていますが、1000となっているのがこのユーザーのメイングループのグループIDです。その左の500はユーザーIDです。
ユーザーはメイングループを1つしか持つことができません。これではパーミッションの管理等に柔軟性を持たせることができないので、ユーザーは複数のグループに所属することができるようになっています。この、メイングループ以外にユーザーが所属しているグループを「サブグループ」と呼びます。サブグループへの所属は、ユーザー作成時に行うこともできます。useraddコマンドに-Gオプション(大文字の「G」であることに注意)でサブグループ名を与えることで行えます。
例えば、beginetを予めWeb管理グループであるグループwebadminに所属させておきたい場合には次のようなコマンドを実行します。
# useradd -g users -G webadmin beginet
もし既に作成してあるユーザーをサブグループに所属させたい場合には、ユーザーの状態を変更するコマンドusermodを使用します。既に存在するユーザーbeginetをグループwebadminに所属させたいのならば、次のようなコマンドを実行します。
# usermod -G webadmin beginet
ユーザーがどのメイングループに所属しているかを調べるには/etc/passwdを見ていましたが、サブグループは複数ある可能性があるため、/etc/passwdには入りきれません。サブグループの所属情報は/etc/groupに書き込まれています。例えば/etc/groupの中のwebadminに関する行を表示させてみましょう。
webadmin:x:1001:beginet
上に出てきたusersと比較して、最後の:の後にユーザー名らしきものが追加されています。これが、このグループに所属しているユーザーです。 ためしに、もう1つユーザーを所属させてみましょう。
# usermod -G webadmin shachou
すると、/etc/groupは次のように変化します。
webadmin:x:1001:beginet,shachou
このようにして、ユーザーを複数のグループに所属させることができます。