[#37875] ERB の仕様 — URABE Shyouhei <s-urabe@...>

みなさまはじめまして。

44 messages 2003/07/15
[#37876] Re: ERB の仕様 — Masatoshi SEKI <m_seki@...> 2003/07/15

咳といいます。

[#37877] Re: ERB の仕様 — URABE Shyouhei <s-urabe@...> 2003/07/15

mput です。

[#37879] Re: ERB の仕様 — m_seki@... 2003/07/15

[#37883] Re: ERB の仕様 — URABE Shyouhei <s-urabe@...> 2003/07/16

mput です。

[#37884] Re: ERB の仕様 — m_seki@... 2003/07/16

[#37888] Re: ERB の仕様 — URABE Shyouhei <s-urabe@...> 2003/07/16

mput です。

[#37889] Re: ERB の仕様 — m_seki@... 2003/07/16

[#37890] Re: ERB の仕様 — URABE Shyouhei <s-urabe@...> 2003/07/17

mput です。

[#37891] Re: ERB の仕様 — MoonWolf <moonwolf@...> 2003/07/19

MoonWolfです。

[#37896] Re: ERB の仕様 — MoonWolf <moonwolf@...> 2003/07/20

MoonWolfです。

[#37898] Re: ERB の仕様 — Masatoshi SEKI <m_seki@...> 2003/07/20

咳といいます。

[#37900] Re: ERB の仕様 — MoonWolf <moonwolf@...> 2003/07/20

MoonWolfです。

[#37901] Re: ERB の仕様 — Masatoshi SEKI <m_seki@...> 2003/07/20

咳といいます。

[#37906] control user ID / group ID — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

20 messages 2003/07/20
[#37912] Re: control user ID / group ID — YOKOYAMA Takehiro <tac@...> 2003/07/21

[#37913] Re: control user ID / group ID — Hidetoshi NAGAI <nagai@...> 2003/07/21

永井@知能.九工大です.

[#37916] Re: control user ID / group ID — YOKOYAMA Takehiro <tac@...> 2003/07/21

[#37941] multipart/form-dataのためのcgi.rbの修正 — 堀川 久 <vzw00011@...>

こんにちは。

18 messages 2003/07/22
[#37944] Re: multipart/form-dataのためのcgi.rbの修正 — matz@... (Yukihiro Matsumoto) 2003/07/23

まつもと ゆきひろです

[#37945] Re: multipart/form-dataのためのcgi.rbの修正 — nobu.nakada@... 2003/07/23

なかだです。

[#37948] Re: multipart/form-dataのためのcgi.rbの修正 — matz@... (Yukihiro Matsumoto) 2003/07/23

まつもと ゆきひろです

[#37951] Re: multipart/form-dataのためのcgi.rbの修正 — nobu.nakada@... 2003/07/23

なかだです。

[#37953] Re: multipart/form-dataのためのcgi.rbの修正 — matz@... (Yukihiro Matsumoto) 2003/07/23

まつもと ゆきひろです

[#37954] Re: multipart/form-dataのためのcgi.rbの修正 — nobu.nakada@... 2003/07/23

なかだです。

[ruby-list:37930] Re: control user ID / group ID

From: Hidetoshi NAGAI <nagai@...>
Date: 2003-07-22 06:12:28 UTC
List: ruby-list #37930
永井@知能.九工大です.

From: Takahiro Kambe <taca@back-street.net>
Subject: [ruby-list:37926] Re: control user ID / group ID
Date: Tue, 22 Jul 2003 08:30:31 +0900
Message-ID: <20030722.083021.07252274.taca@back-street.net>
> In message <20030722.064744.41643706.nagai@ai.kyutech.ac.jp>
> 	on Tue, 22 Jul 2003 06:47:45 +0900,
> 	Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> wrote:
> > 現状,やむをえず setruid()/setrgid() を使っているのは,
> > 非特権ユーザの状態で権限放棄を行いたい場合です.
> > この時 setgid() は実効グループ ID の変更はするものの,
> > 実/保存グループ ID の変更はなされません.
> NetBSDのsetgid(2)には、
> 
>    The setgid() function sets the real and effective group IDs and the saved
>    set-group-ID of the current process to the specified value.
> 
> とあり、実・保存gidも変更されるように読めます。

なるほど.
この記述の後には

  The setgid() function is permitted if the specified ID is equal to
  the real group ID of the process, or if the effective user ID is
  that of the super user. 

とありますので,引用部での条件となっている「非特権ユーザ」の場合,
実グループ ID と同じ ID を指定すれば保存グループ ID も同じになると
考えて良さそうですね.
ちなみに Linux での man によると,

  setgid sets the effective group ID of the current process. If the
  caller is the superuser, the real and  saved  group ID's are also
  set. 

ということになっており,こちらの setgid では特権ユーザ時にしか
保存グループ ID は変化しないものと読めます.

そうすると,4.4BSD 系で getrgid が存在しない場合の非特権ユーザ時には

  if (getgid() == gid) {
    if (setgid(gid) < 0) rb_sys_fail(0);
    SAVED_GROUP_ID = gid;
  } else {
    errno = EPERM;
    rb_sys_fail(0);
  }

という実装とし,他の場合は setegid と setgid の有無により,

  if (getgid() == gid && SAVED_GROUP_ID == gid) {
    if (setegid(gid) < 0) rb_sys_fail(0);  /* または setgid(gid) */
  } else {
    errno = EPERM;
    rb_sys_fail(0);
  }

という実装にすると良さそうでしょうか?
setuid の場合もこれと同様の対応でいいですか?

> > 実/実効/保存のすべてが変更されていない限り,完全な特権放棄には
> > なりませんから,setrgid() なしに非特権ユーザの状態で権限放棄が
> 完全な特権放棄は適切に実効・実行IDを非特権ユーザにした上で、exec(3)系
> を実行することで達成できます。

「 exec を実行してしまえば...」というのは承知しているつもりです.

> 逆に exec(3)系を実行しない限りでは、適切にプログラムが書かれていれば
> 「完全な特権放棄」自体が不要という発想があるのではないでしょうか。

う〜ん,そうですかねぇ...
特権でファイルをオープンし,後は権限の弱いユーザとして
そのファイルをアクセスしながら処理を続けるというようなものを
書きたくなることはないでしょうか?

> > しかし,チェックを忘れている (サボっている) スクリプトにおいて,
> > 非推奨とはいえ実装されている機能を使えば救うことができる処理を
> > あっさり「できません」としてしまうのは少々忍びないと思えました.
> > それゆえ,非推奨を承知の上で用いるように実装しています.
> setuid/setgid bitの機構そのものが微妙なところに成り立っている以上、
> このあたりを忘れているスクリプトをあまり気を効かせて救ってしまうと
> 安全性的に逆効果となる恐れはないのでしょうか?

先の patch で Process::UserID, Process::GroupID に含まれた
メソッドだけを使っている限りにおいては問題ないはずです.
例えばそれらのメソッドだけを用いて Linux 上で開発したスクリプトを 
NetBSD に持ってきた場合などのように,それらメソッド群の範囲において
救済しています.

システムコールを混ぜられた場合には一切保証はできませんが,
ポータビリティを持たせるために wrap しているわけですから,
その wrap を破れば保証できないのも当然です.

> ちなみに issetugid(2)といったものが、OpenBSD 2.0, FreeBSD 3.0, NetBSD
> 1.5以降で実装されています。

はい,システムコールに対応するメソッド群の一つとして追加しておきます.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread