システムプログラム(第0回): ユーザ名とUID、グループ名とGIDの対応、属性の伝播

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2022/2022-05-18/uid-propagation.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2022/
http://www.coins.tsukuba.ac.jp/~yas/

■ユーザ名とUID、グループ名とGIDの対応

◆passwdファイル

ユーザ名と UID の対応関係は、概念的には、 パスワードファイル /etc/passwd に記述される。(coins では、LDAP という仕組みを使っているので、このファイ ルを用いていないが、考え方は共通である。)

/etc/passwdは、次のように「:」で区切 られた7つのフィールドから構成されている。

root:UUm1ttAWtthJg:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
yas:XXZ9eZ35CUVgE:1231:40:Yasushi SHINJO:/home/yas:/bin/tcsh
^        ^	   ^   ^  ^		 ^         ^
|        |	   |   |  |	       	 |         |
ユーザ名 |	  UID GID finger名	 |         ログイン・シェル
     パスワードのハッシュ値     	 ホーム・ディレクトリ
ユーザ名から UID を検索
passwdファイルの第1フィールドを検索し、その第3フィールドを使う
UID からユーザ名を引きたい時
第3フィールドを検索し、その第1フィールドを使う

◆gropファイル

グループ名と UID の対応関係は、 グループファイル /etc/group に記述されている。(coins では、LDAP という仕組みを使っているので、この ファイルを用いていないが、考え方は共通である。)

/etc/group は、次のように、「:」で区切 られた4つのフィールドから構成される。

wheel:*:0:root,yas
bin:*:1:root,bin,daemon
daemon:*:2:root,bin,daemon
staff:*:30:yas
lab:*:40:yas,delegate,user1
^   ^ ^  ^
|   | |  |
|   | |  ユーザ名のリスト
|   | GID
|  パスワード(使われない)
グループ名

◆UIDとGIDの伝播

プロセスの属性である UID や GID は、次のようにして伝播していく。
  1. ログインする時に、ユーザ名とパスワードを打つ
  2. ユーザ名で/etc/passwd を検索し、そのユーザ名の行を取り出す。
  3. ユーザが打ったパスワードを確認する。
  4. /etc/passwd の第3フィールドの数を、プロセスの UID として設定する。
  5. /etc/passwd の第4フィールドの数と、/etc/group を ユーザ名で引いて見つかった数を、プロセスの GID として設定する。
  6. /etc/passwd の第6フィールドのディレクトリを、カレント・ワー キング・ディレクトリにします。
  7. /etc/passwd の第7フィールドのプログラムのシェルを実行する。 MacOSX では、Finder などを実行する。

プロセスの属性の GID は、1個目は、/etc/passwd の第4フィールド、 その他は、/etc/groupに由来する。 区別する時は、1個目を(主)GID, 2個目以降を 補助GID(supplementary GID) とか、 groups ということがある。

以後、プロセスの属性の UID と GID は、 子プロセス、孫プロセスと代々コピーされていく。

ファイルの UID は、そのファイルを作っ たプロセスの UID に由来する。 ファイルの GID は、 親ディレクトリの GID に由来する。 (そのファイルを作ったプロセスの1個目の GID に由来する Unix もある)。

普通は、プロセスのUID・GID属性がファイルにコピーされる。 例外的に、ファイルの UID・GID属性がプロセスにコピーされることがある。 そのような仕組みを、それぞれ、set-uid、set-gidという。

◆ldapsearchでのUID,GIDの表示

coins では、/etc/passwd/etc/group の代わりに、LDAP (Lightweight Directory Access Protocol) を用いて UID と GID を保存して いる。LDAP では、木構造を用いて、ユーザ名やグループ名から様々な情報を引 くことができる。次のコマンドで各ユーザの UID(番号) と GID(番号) を調べ ることができる。
ldapsearch -H ldaps://viola8.coins.tsukuba.ac.jp/ -b dc=coins,dc=tsukuba,dc=ac,dc=jp -x uid=ログイン名 uidNumber gidNumber
グループについては、次のようにすると調べることができる。
ldapsearch -H ldaps://viola8.coins.tsukuba.ac.jp/ -b dc=coins,dc=tsukuba,dc=ac,dc=jp -x cn=グループ名 gidNumber
このことを確認しなさい。
Last updated: 2022/04/13 10:46:36
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>