Red Hat Linuxはユーザープライベートグループ(UPG)体系を使用してUNIXのグループを使いやすくしています。UPG体系は、標準的なUNIXのグループ処理を変更したり何かを追加したりするものではありません。グループ処理に関する新しい取り決めを提供するのみです。デフォルトでは、新しいユーザーを作成した場合、そのユーザーは必ず固有のグループに属します。UPG体系は以下のように機能します。
各ユーザーはプライマリグループに属し、それぞれのユーザーのみがそのグループのメンバーとなります。
伝統的に、UNIXシステムではumaskは022なので、あるユーザーのファイルをそのユーザーのプライマリグループの他のメンバーや他のユーザーが修正することはできません。UPG体系では、すべてのユーザーが独自のプライベートグループを持つので、この「グループ保護機能」は必要ありません。umask 002によって、ユーザーが他のユーザーのプライベートファイルを修正することができなくなります。umaskの設定は/etc/profileで行われます。
ディレクトリに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を追加します(オプションの詳細については、groupaddとgpasswdmanページを参照してください)。/etc/groupファイルには、システムに対するグループ情報が記載されています。
develグループを作成してユーザーを追加し、develディレクトリに対するグループをdevelグループに変更し、develディレクトリにsetgidビットを設定すると、すべてのdevelユーザーはdevelファイルを編集したり、このディレクトリ内に新しいファイルを作成したりすることができるようになります。作成されるファイルは常にdevelグループを保持するため、常に他のdevelプロジェクトのユーザーもそれらのファイルの編集を行うことができます。
また、このようなプロジェクトがいくつかあり、複数のプロジェクトに従事するユーザーがいる場合、それらのユーザーがプロジェクト間を移動する際に、umaskまたはグループを変更する必要がなくなります。各プロジェクトのメインディレクトリのsetgidビットが適切に設定されていれば、そのディレクトリで作成されるすべてのファイルに対して適切なグループが「選択」されます。
各ユーザーのホームディレクトリは、そのユーザーと、ユーザーのプライベートグループによって所有されるので、ホームディレクトリにsetgidビットを設定しておくのが安全です。ただし、デフォルトではファイルがユーザーのプライマリグループによって作成されるので、setgidビットは冗長になります。
ユーザープライベートグループ(UPG)はRed Hat Linuxにとって新しいものではありませんが、多くの人は依然として、なぜUPGが必要なのかといった疑問を持っています。UPGを使用しないシステム上で次のシナリオを考えてみましょう。
/usr/lib/emacs/site-lispディレクトリに含まれるファイル群について作業する人のグループがあるとします。そのうちの何人かは信頼でき、ディレクトリに変更を加えても大丈夫ですが、すべての人がそうではないとします。
まず次のように入力してemacsグループを作成します。
/usr/sbin/groupadd emacs |
ディレクトリの内容をemacsグループに関連付けるため、以下のコマンドを実行します。
chown -R root.emacs /usr/lib/emacs/site-lisp |
これで、gpasswdを用いて、適切なユーザーをグループに追加できます。
/usr/bin/gpasswd -a <username> emacs |
以下のコマンドで、このディレクトリ内に実際にファイルを作成する権限をユーザーに与えます。
chmod 775 /usr/lib/emacs/site-lisp |
ユーザーが新しいファイルを作成すると、そのファイルのグループとしてユーザーのデフォルトであるプライベートグループが割り当てられます。これを回避するには、次のコマンドを実行します。これは、emacsグループで作成した全てに当てはまります。
chmod 2775 /usr/lib/emacs/site-lisp |
emacsグループに属する他のユーザーが編集できるように、新しいファイルのモードを664とする必要がある場合は、デフォルトのumask 002を作成します。
これで、デフォルトのumask 002を作成することによって、ユーザーが利用できるグループを簡単にセットアップすることができ、ユーザーがグループの共有ディレクトリにファイルの書き込みを行うたびに追加作業をする必要はなくなります。単純にグループを作成し、ユーザーを追加し、グループのディレクトリについて上記のchownとchmodを実行すればよいのです。