In message <200109060937.f869bNH02724 / edge.sky.yamashina.kyoto.jp>
taca / sky.yamashina.kyoto.jp writes:

> > もし同意いだだけるなら,例えば
> > 「〜系は,〜の仕様の setuid と seteuid を使うことになってるけど,
> > setreuid も使えないことはないよ」とか,
> > 「〜は古い仕様なんで,保存uidなんかないよ」とか,
> > 環境についての情報をまとめて見ませんか?
> なんか、こういう内容を扱った書籍ってありませんでしたっけ。
> 
> http://www.amazon.co.jp/exec/obidos/ASIN/4894713195/249-2282310-5096310
> (詳解UNIXプログラミング)
> 
> とかは違ったかなぁ。

こっちには setuid(),setreuid(),seteuid() の話がのってました.機能に
ついての話はすでに出尽くしているとおり....gid() についても話は同じ.


setuid() について:
  * 保存 uid の機能は POSIX では option で,_POSIX_SAVED_IDS の値をみ
    るか,sysconf(_SC_SAVED_IDS) でチェック可能.FIPS 151-1 では必須.
    SVR4 では使える.BSD については記述無し.
  * tip での利用例の解説していて,保存ユーザ ID 機能によりプログラムの
    最初と最後で必要な特権が得られること,大半は実ユーザの権限で動くこ
    と,サブプロセスは実ユーザの権限でのみ動き,特権を得ることはないこ
    とが説明されている.


setreuid() について:
  * むしろ非特権ユーザが実/実効ユーザ ID を入れ換えることが可能という
    ことが主眼の記述.
  * 4.3BSD で保存ユーザ ID を用いる代わりに利用されていた,ただしそこ
    から exec() する場合にはまず実ユーザ ID と実効ユーザ ID を変えてや
    らなければならなかった(exec() された側で再び特権を得られるのを防
    ぐため).
  * 4.3BSD 以降と SVR4 で利用可能.SVR4 では BSD 互換ライブラリ.


seteuid() について:
  * POSIX への拡張._POSIX_SAVED_IDS を常に要求する.
  * 4.3BSD 以降と SVR4 で利用可能.


# 哲学的なことは何も書いていなかった.ただ実ユーザ ID と 実行ユーザ ID 
# と保存ユーザ ID とが全て別のものという事はなさそうである.root で 
# setreuid() すれば「できる」のは確かだが,できて何かうれしいだろうか?


setruid() については FreeBSD 4.3-Release だと `The use of these calls
is not portable.  Their use is discouraged; they will be removed in
the future.' って書いてありますね.HISTORY によれば 4.4BSD からの動き.


-- 
柳川和久 @ 東大阪市 . 大阪府                              September 6, 2001
「あー信じる信じる,サンタでも海ぼうずでもぬらりひょんでもなんでも信じる」