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体系では、グループはそのディレクトリで作成されたファイルに自動的に割り当てられるため、ディレクトリを共有するグループプロジェクトの管理が非常に簡単になります。
develという大きなプロジェクトがあり、大勢の人がdevelディレクトリ内のdevelファイルを編集しているとします。 develという名前のグループを作成し、, develディレクトリを develグループにchgrpし、develプロジェクトに関係するすべてのユーザーをdevelグループに追加します。
グループにユーザーを追加するには、Linuxconf(オフィシャル Red Hat Linux カスタマイズガイドを参照)を使用します。 コマンドラインを使用する場合は、/usr/sbin/groupadd groupnameコマンドでグループを作成します。 /usr/bin/gpasswd -a loginname groupnameコマンドを実行すると、ユーザーのグループへのloginnameが追加されます。 (各コマンドのオプションについての詳細は、groupaddと gpasswdのmanページを参照してください。) /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 |
さらに、適切なユーザーをグループに追加します。
/usr/bin/gpasswd -a < username > emacs |
このディレクトリにファイルを作成する権限を実際にユーザーに与えるには、次のように入力します。
chmod 775 /usr/lib/emacs/site-lisp |
ただし、ユーザーが新しいファイルを作成すると、そのファイルのグループとしてユーザーのデフォルトグループが割り当てられます(通常はusers)。 これを回避するには、次を入力します。
chmod 2775 /usr/lib/emacs/site-lisp |
ただし、emacsグループに属する他のユーザーが編集できるようにするには、新しいファイルのモードを664とする必要があります。 そうするには、デフォルトのumask 002を作成します。
デフォルトのグループがusersである場合には、ホームディレクトリ内に作成するすべてのファイルに対して、usersに属するすべての人(通常はすべての人)が書き込み権限を持つことを除けば、すべてがうまくいっているようです。
これを修正するために、各ユーザーに「プライベートグループ」をデフォルトグループとして持たせます。
これで、デフォルトのumask 002を作成してすべての人にプライベートグループを与えることによって、ユーザーが利用できるグループを簡単にセットアップすることができ、ユーザーがグループの共有ディレクトリにファイルの書き込みを行うたびに追加作業をする必要はなくなります。 単純にグループを作成し、ユーザーを追加し、グループのディレクトリについて上記のchownとchmodを実行すればよいのです。