From: nagai@... Date: 2001-12-07T13:49:05+09:00 Subject: [ruby-dev:15389] Re: new methods to treat uid/gid 永井@知能.九工大です. From: matz@ruby-lang.org (Yukihiro Matsumoto) Subject: [ruby-dev:15388] Re: new methods to treat uid/gid Date: Fri, 7 Dec 2001 13:03:56 +0900 Message-ID: <1007682425.026145.29118.nullmailer@ev.netlab.jp> matz> 私自身はこのユーザID/グループIDについて(いまだに)十分正しく matz> 理解している自信がないのですが、過去の永井さんの論旨には十分 matz> 説得力があったので、この方向で受け入れようと思っています(1.7 matz> 系で)。 私も本当に大丈夫かを心配しつつ書いています. 自信があれば,もう少し強く主張できているかもしれません.(^_^; 例えば,実装を開始してみるまでは, Process.uid= があれほど面倒になるとは思っていませんでした. 一つ前の仕様案と比較すると,何がやっかいごとの原因だったかは わかっていただけると思います. 古い方では,Process.uid= を root 権限を持つ状況でだけを 想定していたのですが,よく考えてみると, 例えば (uid,euid,suid) == (user,uucp,uucp) のような状況で uucp の権限を放棄したいケースも含まれることに気付きました. このケース,Process.euid=user では (user,user,uucp) となり, uucp 権限を放棄できないですよね (Process.euid=uucp が可能). で,Process.uid= の目的を鑑み,利用可能な関数を駆使して, このようなケースでも可能な限り (user,user,user) の状態に できるようにしてみました. 安全のため,きちんと放棄できない場合には例外を上げるようにしたので, 「処理を続けてもいいかはそれで判断してください」ということです. matz> ただ、以下の点は気になります。より広く意見を求めます。 matz> |Process.swap_uid matz> |Process.switch_uauth() { ... } matz> このふたつのメソッドの名前にはまだ違和感があります。独自の名 matz> 前の導入には慎重になっているというのもありますが。 これらについては,私も仮名のつもりでインプリメントしています. いい名前が思いつかなかったので,「意見がでないかなぁ」と.(^_^) matz> | 保存ユーザ ID の変化は,Process.swap_uid が定義されているかで決まる. matz> とあり、 matz> | 注意 : setresuid か setreuid を持たない環境には設定されない. matz> とあるので、swap_uidは環境によって定義されたりされなかったり matz> するものとして考えられているんですよね。しかし、ほかの多くの matz> メソッドは対応していないプラットフォームではNotImplementedError matz> 例外をあげる方が一般的のようです。 最初は例外をあげるようにしていたのですが, 環境による動作の差異を判断するために 実際に swap_uid を動かさねばならないというのは 問題では?と考えました. で,どうせ動かないんだから,いっそのことなくしてしまって, その有無で判定するのではどうかと思い, そのようにしてみたのが先のパッチです. ちなみに今は,例外的環境として挙がっているのが OpenBSD だけですのでああしていますが, もっと多くの環境で例外対応せざるを得ないなら, --------------------------------- #if defined(__OpenBSD__) || defined(...) || ... #undef HAVE_SETREUID #endif --------------------------------- などとしておく方がいいですよね. # 最初からそうしておくべきでした.(^_^; matz> 一貫性のために、swap_uid(相当)メソッドはいつも用意して matz> NotImplementedError例外で対応するというのならば、保存ユーザ matz> IDがあるかないかを知る別の方法を用意する必要があるでしょうし。 matz> この辺はどういう風に考えるのがよいでしょうか。 う〜む.何らかの定数を用意しておくべきなんですかねぇ... 用意するなら,「保存ユーザ ID を持つか」と 「実と実効ユーザ ID の交換が可能か(ただし, 保存ユーザ ID が存在するならそれに影響すること)」との 二つが判断できるだけのものということになりそうです. -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp