ユーザ、グループ、およびユーザプライベートグループ

伝統的にユーザやグループの管理は退屈な作業ですが、Red Hat Linux にはユーザとグループの管理を容易にする 2、3 のツールと取り決めがあります。

useradd を使用してシェルプロンプトから新しいユーザを作成することもできますが、Linuxconf によってユーザとグループを管理するのが最も簡単です (Chapter 3 を参照)。

次に、ユーザとグループの管理の裏に隠された基本的な構造について議論します。

標準的なユーザ

Table 2-1 では、インストールプロセスによってセットアップされる標準的なユーザが見つかります (これは本来は /etc/passwd ファイルです)。このテーブルの [Group ID] (GID) はユーザのプライマリ グループです。グループの使用法については the section called ユーザプライベートグループ を参照してください。

Table 2-1. 標準的なユーザ

ユーザ UID GID ホームディレクトリ シェル
root 0 0 /root /bin/bash
bin 1 1 /bin  
daemon 2 2 /sbin  
adm 3 4 /var/adm  
lp 4 7 /var/spool/lpd  
sync 5 0 /sbin /bin/sync
shutdown 6 0 /sbin /sbin/shutdown
halt 7 0 /sbin /sbin/halt
mail 8 12 /var/spool/mail  
news 9 13 /var/spool/news  
uucp 10 14 /var/spool/uucp  
operator 11 0 /root  
games 12 100 /usr/games  
gopher 13 30 /usr/lib/gopher-data  
ftp 14 50 /var/ftp  
nobody 99 99 /  

標準的なグループ

Table 2-2 では、インストールプロセスによってセットアップされる標準的なグループが見つかります (これは本来は /etc/group ファイルです)。

Table 2-2. 標準的なグループ

グループ GID メンバー
root 0 root
bin 1 root、bin、daemon
daemon 2 root、bin、daemon
sys 3 root、bin、adm
adm 4 root、adm、daemon
tty 5  
disk 6 root
lp 7 daemon、lp
mem 8  
kmem 9  
wheel 10 root
mail 12 mail
news 13 news
uucp 14 uucp
man 15  
games 20  
gopher 30  
dip 40  
ftp 50  
nobody 99  
ユーザ 100  

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

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

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

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

umask = 002

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

ディレクトリの setgid ビット

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

ほとんどの IT 組織は、主要プロジェクトごとにグループを作成し、必要な人をそのグループに割り当てることを好みます。ただし伝統的にファイルの管理が難しい作業になるのは、誰かがファイルを作成した場合に、作成者の属するプライマリグループがそのファイルの所有者になるからです。一人の人間が複数のプロジェクトに従事する場合、正しいファイルを正しい所有者であるグループと関連付けるのは難しくなります。UPG 体系では、グループは自動的にプロジェクト単位のベースでファイルに割り当てられるので、グループプロジェクトの管理が非常に単純になります。

devel という大きなプロジェクトがあり、大勢の人が devel ディレクトリ内の devel ファイルを編集しているとします。devel という名前のグループを作成し、devel ディレクトリを develchgrp し、すべての devel ユーザを devel グループに追加します。これですべての devel ユーザは devel ディレクトリ内の devel ファイルを編集したり、このディレクトリ内に新しいファイルを作成したりすることができるようになり、それらのファイルは常に devel グループを保持するようになります。したがって、常に他の devel ユーザもそれらのファイルの編集を行うことができます。

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

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

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

UPG は Red Hat Linux 7.0 にとって新しいものではありませんが、多くの人は依然として、なぜ UPG が必要なのか、等の疑問を持っています。以下に UPG 体系の理論的根拠を示します。

  • /usr/lib/emacs/site-lisp ディレクトリなどに含まれるファイル群について作業する人のグループがあるとします。そこでは何人かが無駄に時間を過ごすものの、すべての人がそうではないと確信しているとします。

  • したがって次を入力します。

    chown -R root.emacs /usr/lib/emacs/site-lisp
    さらに、適当なユーザをグループに追加します。

  • このディレクトリにファイルを作成する権限を実際にユーザに与えるには、次のように入力します。

    chmod 775 /usr/lib/emacs/site-lisp

  • ただし、ユーザが新しいファイルを作成すると、そのファイルのグループとしてユーザのデフォルトグループが割り当てられます (通常は users)。これを回避するには、次を入力します。

    chmod 2775 /usr/lib/emacs/site-lisp
    これにより、このディレクトリ内のすべてのものが「emacs」グループによって作成されるようになります。

  • ただし、emacs グループに属する他のユーザが編集できるようにするには、新しいファイルのモードを 664 とする必要があります。そうするには、デフォルトの umask 002 を作成します。

  • デフォルトのグループが「users」である場合には、ホームディレクトリ内に作成するすべてのファイルに対して、「users」に属するすべての人 (通常はすべての人) が書き込み権限を持つことを除けば、すべてがうまく行っているようです。

  • これを修正するために、各ユーザに「プライベートグループ」をデフォルトグループとして持たせます。

この時点では、デフォルトの umask 002 を作成し、すべての人にプライベートグループを与えることによって、手品を使わなくてもユーザが利用することのできるグループを簡単にセットアップすることができます。単純にグループを作成し、ユーザを追加し、グループのディレクトリについて上記の chown および chmod を実行してください。