ユーザープライベートグループ

Red Hat LinuxはユーザープライベートグループUPG)体系を使用してUNIXのグループを使いやすくしています。UPG体系は、標準的なUNIXのグループ処理を変更したり何かを追加したりするものではありません。グループ処理に関する新しい取り決めを提供するのみです。デフォルトでは、新しいユーザーを作成した場合、そのユーザーは必ず固有のグループに属します。UPG体系は以下のように機能します。

ユーザープライベートグループ

各ユーザーはプライマリグループに属し、それぞれのユーザーのみがそのグループのメンバーとなります。

umask = 002

伝統的に、UNIXシステムではumaskは022なので、あるユーザーのファイルをそのユーザーのプライマリグループの他のメンバーや他のユーザーが修正することはできません。UPG体系では、すべてのユーザーが独自のプライベートグループを持つので、この「グループ保護機能」は必要ありません。umask 002によって、ユーザーが他のユーザーのプライベートファイルを修正することができなくなります。umaskの設定は/etc/profileで行われます。

ディレクトリのsetgidビット

ディレクトリにsetgidビットを設定(chmod g+s directoryによって)すると、そのディレクトリの中に作成されるファイルのグループとして、ディレクトリのグループが設定されることになります。

ほとんどのIT組織は、主要プロジェクトごとにグループを作成し、そのグループのファイルにアクセスする必要のある人をグループに割り当てることを好みます。このような伝統的な体系では、誰かがファイルを作成した場合に、作成者の属するプライマリグループがそのファイルの所有者になるため、ファイルの管理が困難でした。1人の人間が複数のプロジェクトに従事する場合、正しいファイルを正しいグループと関連付けるのは難しくなります。UPG体系では、グループはsetgidビットセットを持つディレクトリで作成されたファイルに自動的に割り当てられるため、ディレクトリを共有するグループプロジェクトの管理が非常に簡単になります。

たとえば、develという大きなプロジェクトがあり、大勢の人がdevelディレクトリ内のdevelファイルを編集しているとします。develという名前のグループを作成し、develディレクトリをdevelグループにchgrpし、develグループに関係するすべてのユーザーをdevelグループに追加します。

redhat-config-usersを使ってグループにユーザーに追加します(オフィシャル Red Hat Linuxカスタマイズガイドを参照)。コマンドラインを使いたいときは、/usr/sbin/groupadd groupnameコマンドを使用してグループを作成します。/usr/bin/gpasswd -a loginname groupnameコマンドは、グループにユーザーloginnameを追加します(オプションの詳細については、groupaddgpasswdmanページを参照してください)。/etc/groupファイルには、システムに対するグループ情報が記載されています。

develグループを作成してユーザーを追加し、develディレクトリに対するグループをdevelグループに変更し、develディレクトリにsetgidビットを設定すると、すべてのdevelユーザーはdevelファイルを編集したり、このディレクトリ内に新しいファイルを作成したりすることができるようになります。作成されるファイルは常にdevelグループを保持するため、常に他のdevelプロジェクトのユーザーもそれらのファイルの編集を行うことができます。

また、このようなプロジェクトがいくつかあり、複数のプロジェクトに従事するユーザーがいる場合、それらのユーザーがプロジェクト間を移動する際に、umaskまたはグループを変更する必要がなくなります。各プロジェクトのメインディレクトリのsetgidビットが適切に設定されていれば、そのディレクトリで作成されるすべてのファイルに対して適切なグループが「選択」されます。

各ユーザーのホームディレクトリは、そのユーザーと、ユーザーのプライベートグループによって所有されるので、ホームディレクトリにsetgidビットを設定しておくのが安全です。ただし、デフォルトではファイルがユーザーのプライマリグループによって作成されるので、setgidビットは冗長になります。

ユーザープライベートグループの論理的根拠

UPGはRed Hat Linuxにとって新しいものではありませんが、多くの人は依然として、なぜUPGが必要なのかといった疑問を持っています。UPGを使用しないシステム上で次のシナリオを考えてみましょう。

これで、デフォルトのumask 002を作成してすべての人にプライベートグループを与えることによって、ユーザーが利用できるグループを簡単にセットアップすることができ、ユーザーがグループの共有ディレクトリにファイルの書き込みを行うたびに追加作業をする必要はなくなります。単純にグループを作成し、ユーザーを追加し、グループのディレクトリについて上記のchownchmodを実行すればよいのです。