筑波大学 システム情報系 情報工学域 新城 靖 <yas@cs.tsukuba.ac.jp>
このページは、次の URL にあります。
https://www.coins.tsukuba.ac.jp/~syspro/2024/2024-05-22/uid-propagation.html
あるいは、次のページから手繰っていくこともできます。
https://www.coins.tsukuba.ac.jp/~syspro/2024/
http://www.coins.tsukuba.ac.jp/~yas/
/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名 | ログイン・シェル パスワードのハッシュ値 ホーム・ディレクトリ
/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 | パスワード(使われない) グループ名
/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という。
/etc/passwd
や/etc/group
は限定的にしか使わ
れない (/etc/nsswitch.conf 参照)。一般ユーザは、LDAP (Lightweight
Directory Access Protocol) を用いて UID と GID を保存している。
getent コマンドを使うと、/etc/passwd や /etc/group の形態で LDAP に含まれたデータもアクセスできる。
$ getent passwd | grep '^yas:'
yas:x:1013:5510:Yasushi SHINJO:/home/prof/yas:/bin/bash
$ getent passwd yas
yas:x:1013:5510:Yasushi SHINJO:/home/prof/yas:/bin/bash
$ getent group | grep '^prof'
prof:*:5510:
$ getent group prof
prof:*:5510:
$
ldapsearch -H ldaps://violet10.coins.tsukuba.ac.jp/ -b dc=coins,dc=tsukuba,dc=ac,dc=jp -x uid=ログイン名 uidNumber gidNumber
グループについては、次のようにすると調べることができる。
ldapsearch -H ldaps://violet10.coins.tsukuba.ac.jp/ -b dc=coins,dc=tsukuba,dc=ac,dc=jp -x cn=グループ名 gidNumber