ユーザ名とUID、グループ名とGIDの対応、属性の伝播


# ユーザ名とUID、グループ名とGIDの対応、属性の伝播

2012年05月15日
情報科学類 コンピュータリテラシ
筑波大学 システム情報系 情報工学域
新城 靖
<yas@cs.tsukuba.ac.jp>

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

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

### ◆passwdファイル

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

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

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ファイルの第１フィールドを検索し、その第３フィールドを使う
UID からユーザ名を引きたい時
第３フィールドを検索し、その第１フィールドを使う

### ◆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 は、次のようにして伝播していく。

ログインする時に、ユーザ名とパスワードを打つ
ユーザ名で/etc/passwd を検索し、そのユーザ名の行を取り出す。
ユーザが打ったパスワードを確認する。
/etc/passwd の第3フィールドの数を、プロセスの UID として設定する。
/etc/passwd の第4フィールドの数と、/etc/group を
ユーザ名で引いて見つかった数を、プロセスの GID として設定する。
/etc/passwd の第6フィールドのディレクトリを、カレント・ワー
キング・ディレクトリにします。
/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 lilac-nwa -x -b ou=users,dc=coins,dc=tsukuba,dc=ac,dc=jp uid=ログイン名 uidNumber gidNumber

あるいは、次のように調べる。

ldapsearch -h lilac-nwa -x -b ou=users,dc=coins,dc=tsukuba,dc=ac,dc=jp uid=ログイン名 | lv

グループについては、次のようにすると調べることができる。

ldapsearch -h lilac-nwa -x -b ou=groups,dc=coins,dc=tsukuba,dc=ac,dc=jp cn=グループ名 gidNumber
ldapsearch -h lilac-nwa -x -b ou=groups,dc=coins,dc=tsukuba,dc=ac,dc=jp cn=グループ名 | lv

このことを確認しなさい。

Last updated: 2012/05/10 15:43:47