[#15067] rb_eval_string — OJ <oj@...7.com>

OJです。

39 messages 2001/11/08
[#15068] Re: rb_eval_string — nobu.nakada@... 2001/11/08

なかだです。

[#15069] Re: rb_eval_string — OJ <oj@...7.com> 2001/11/08

OJです。

[#15071] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15077] Re: rb_eval_string — OJ <oj@...7.com> 2001/11/09

OJです。

[#15078] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/09

わたなべです。

[#15083] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

こんにちは、なかむら(う)です。

[#15088] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15089] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

こんにちは、なかむら(う)です。

[#15092] Re: rb_eval_string — nobu.nakada@... 2001/11/09

なかだです。

[#15096] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/09

こんにちは、なかむら(う)です。

[#15109] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15112] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15114] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15115] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15119] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15121] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15124] Re: rb_eval_string — WATANABE Hirofumi <eban@...> 2001/11/12

わたなべです。

[#15126] Re: rb_eval_string — "U.Nakamura" <usa@...> 2001/11/12

こんにちは、なかむら(う)です。

[#15174] strange behavior about PTY.spawn — akira yamada / やまだあきら <akira@...>

18 messages 2001/11/15
[#15176] Re: strange behavior about PTY.spawn — matz@... (Yukihiro Matsumoto) 2001/11/15

まつもと ゆきひろです

[#15251] Re: [ruby-ext:01999] Re: syslog module is becoming ready — "Akinori MUSHA" <knu@...>

 というわけで 1.7 に syslog モジュールを入れました。

43 messages 2001/11/26

[#15270] ruby on NetBSD — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

25 messages 2001/11/28
[#15271] Re: ruby on NetBSD — Takahiro Kambe <taca@...> 2001/11/28

In message <20011128181510.3D11.USA@osb.att.ne.jp>

[#15272] Re: ruby on NetBSD — "U.Nakamura" <usa@...> 2001/11/28

こんにちは、なかむら(う)です。

[#15278] Re: ruby on NetBSD — Takahiro Kambe <taca@...> 2001/11/28

In message <20011128182726.3D14.USA@osb.att.ne.jp>

[#15296] Re: ruby on NetBSD — "U.Nakamura" <usa@...> 2001/11/29

こんにちは、なかむら(う)です。

[#15298] time.rb — Tanaka Akira <akr@...17n.org>

というわけで、timex.rb 改め time.rb が rough に入ったのでご意見募集です。

27 messages 2001/11/29

[ruby-dev:15105] Re: setuid and seteuid

From: nagai@...
Date: 2001-11-11 16:41:45 UTC
List: ruby-dev #15105
永井@知能.九工大です.

From: Tanaka Akira <akr@m17n.org>
Subject: [ruby-dev:15099] Re: setuid and seteuid
Date: Sat, 10 Nov 2001 16:01:33 +0900
Message-ID: <hvo3d3np0sc.fsf@coulee.a02.aist.go.jp>
akr> 私は、Process.uid=, Process.euid= という API は捨てるべきだと思ってい
akr> ます。(非推奨、ということです。べつに消せとはいいません。)
akr> 
akr> 私は Programming Perl で ($<,$>) = ($>,$<); が setreuid を呼び出すとい
akr> う記述を見て非常に大きな違和感を感じた人間なので、同じように 2つの独立
akr> した変数を想起させる Process.uid=, Process.euid= にも同様な違和感を覚
akr> えます。

なぜ「2つの独立した変数を想起」させてはダメなんでしょう?
setuid と seteuid という C の関数名も違和感がありますか?
それとも Process.uid= はダメだけど,
Process.setuid なら OK というような話しでしょうか?

akr> In article <20010906174440D.nagai@ai.kyutech.ac.jp>,
akr>   nagai@ai.kyutech.ac.jp writes:
akr> > # 統一しなくてもいいのなら,極論としては,
akr> > # setuid や setreuid など,すべてを用意するだけ用意して,
akr> > # それが存在しない環境では例外発生というのでも
akr> > # いいってことになりますよね.(^_^)
akr> という極論を提供し、さらに、良く使われるであろう 2つの用途
akr> * 権限の完全放棄(setuid)
akr> * 権限の一時放棄(seteuid ないしは setreuid)
akr> について統一した API を実装するライブラリを提供するのがいいだろう、と
akr> 思っています。

「setuid や setreuid など,すべてを用意」するようにすると,
スクリプトのポータビリティが著しく低下しますが,
それは構わないとのお考えですか?
また,統一 API は,具体的にはどのような形ででしょうか?
Process.uid= を setuid にすれば OK という話でしょうか?

検討結果の通り,Process.uid= の重要性は極めて低下 
(euid= と swap_id とで実装可能) していますから,
Process.uid= で setreuid を優先的に使うのが気に入らないというのなら,
setuid を優先的にしても構いません.
ただし,過去との互換性に問題が出ることになりますが,
その問題に目をつぶってでも変更するだけの意義はありますか?

akr> また、権限の一時放棄で setreuid を使う場合は、exec を行なうするメソッ
akr> ドにも手を入れて、exec 後に権限が残らないような方法を提供するのがいい
akr> だろうと思っています。つまり「詳解 UNIX プログラミング」の UUCP の例の
akr> 「execする前に実ユーザ ID を普通のユーザ ID に設定する必要がある」とい
akr> うところを自動的にやろう、というわけですが。

逆に exec 時に権限を残したいケースもあるでしょうから,
これはプログラマが責任を持つべき部分という気がします.

akr> suid-ruby に setreuid - それも SUSv2 からは読みとれないような仕様のや
akr> つ - が必要なのはそれはそうなのでしょう。しょうがないので使うしかない
akr> と思います。ただ、それが意図した挙動になっているかどうかはちゃんと確認
akr> したいところですし、ついでにいえば setresuid があるならそちらを使いた
akr> いですね。

その「意図した挙動になっているか」の検討のために,
長々と思考過程を書かねばならなかったわけですが.(^_^;

akr> また、私はこういう話は自明なくらいがちょうどいい、と思っています。なん
akr> せセキュリティの話ですから、比較的簡単に正しさが納得できるのが望ましい
akr> というわけです。つまり、長々と思考過程を書かないと議論できないような仕
akr> 様は個人的にはそれだけで失格です。このような観点から見ると、私の案は
akr> 
akr>   (極論を実装することにより)実行可能なことが C と同じになる。
akr>   これにより C でのセキュリティの議論・考察が再利用できる。
akr> 
akr> という利点があります。

いえ,この「C と同じになる」ができないというのが問題の根底です.
C での議論は「set-uid ビットが有効」というのが
前堤になっています.(よね?)

スクリプトに対して set-uid ビットが無効であるために,
正式に suid-ruby が作られるまでは,
setuid + seteuid では「一般ユーザでの権限の一時放棄」
(例えば foo と uucp の往復) が不可能です.
長々と思考過程を書く必要があった理由の一つは,この事実の確認です.

もちろん,ruby のバイナリを様々なユーザ名義でコピーして,
それぞれに set-uid ビットを立てれば可能ではありますが,
そんなことをしたらとんでもないことになるのは明らかですよね.(^_^)

例えば,foo と bar (いずれも root ではない) の二つの権限で
動くデーモンを ruby で作りたいと思ったらどうでしょう?
suid-ruby がない現在は,root としてスクリプトを起動し,
その中で (実/実効/保存) = (foo/bar/bar) の状態を作り出した後,
不要なメソッドを潰してしまうということになると思います.

# 例えば Process.swap_uid だけを残して
# Process.uid= と Process.euid= を消すとかです.

そう考えると,
「では,必要な情况を作り出すのに最低限必要な
  メソッド集合はどのようなものか」
を検討する必要があります.
これが,長々と思考過程を書く必要があった理由の二つめです.
で,あの思考過程での検討の結果として残ったのが,あの 3 種です.
検討結果からは「Process.uid= もなくていい」だったと思いますが,
過去との互換性のために残した次第です.
まぁ,保存 ID を持ちながら,
setreuid が保存 ID に影響しないという環境が
想定外になっていたのは事実ですが.(^_^;

ちなみに,「保存 ID を持ちながら,
setreuid が保存 ID に影響しないという環境」については,
(r r r) からのスタートで,
--------------------------------------
(01) 1 1 1 : setuid(1)
(10) r 1 1 : 到達不能
(11) 1 r r : seteuid(1) + setreuid(1,r)
(12) 1 2 2 : 到達不能

(13) 2 1 1 : 到達不能
(14) 2 r r : seteuid(2) + setreuid(2,r)

(20) r r 1 : 到達不能
(21) r 1 r : seteuid(1) or setreuid(-1,1)
(22) 1 r 1 : 到達不能
(23) 1 1 r : setreuid(1,1)

(30) 1 1 2 : 到達不能
(31) 2 2 1 : 到達不能
(32) 1 2 1 : 到達不能

(40) 1 2 r : seteuid(1) + setreuid(1,r) + seteuid(2)
(41) 2 1 r : seteuid(2) + setreuid(2,r) + seteuid(1)
--------------------------------------
ということになります.
特徴としては,root で起動した際に
「特定ユーザの権限になる以外では,root 権限を放棄できない」
です.
suid-ruby で想定される (1 r r) から出発しても同じです.
正直なところ,能力不足で基準にはできないレベルと思います.

# やっぱり,「とりあえず実装してみよう!」なんですかね?(^_^;
# どうやって試験・確認するかも問題かも.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread