[#41778] [Bug #3515] FreeBSD wrongly raises ECONNRESET on close(2) — Yui NARUSE <redmine@...>

Bug #3515: FreeBSD wrongly raises ECONNRESET on close(2)

12 messages 2010/07/02

[ruby-dev:41785] Re: [Feature #3513] spawn ..., err: nil

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2010-07-02 13:19:26 UTC
List: ruby-dev #41785
2010年7月2日21:52 Urabe Shyouhei <shyouhei@ruby-lang.org>:
> # 盛大にオフトピックです

これは僕が謝るべきなんだろうなぁ。すいません

>
> (2010/07/02 21:19), KOSAKI Motohiro wrote:
>> 後学のために教えてください
>>
>>>> では適切な方法は、というと、err:"/dev/null" などとリダイレクトすることです。
>>>> (Unix では)
>>>
>>> それは移植性がありません。せっかくspawn使ってるのに。
>>>
>>> さらに背景を説明すると、くだんのスクリプトが動く環境には/dev/nullがありませ
>>> ん。Linuxですがキャラクタデバイスへのアクセスが(cgroupで)禁止されています。
>>
>> /dev/zeroや/dev/null をアクセス禁止するメリットがあまり想像できなかったのですが、
>> どのような問題を想定されていますでしょうか?
>> Linux側に機能不足とかありましたら、ついでに指摘していただけるとありがたく
>
> この環境は実際にはlxc(7) http://lxc.sf.net/ を使ったコンテナです。lxcでは設定
> ファイルによりデバイスへのアクセスをデバイス番号単位で制御できますが、逆にいう
> とデバイス番号を知らないことには制御できません。が、ともかく全部を許さないとい
> う(ありがちでかつ便利な)指定だけは可能で、これはデバイス番号に関する前提知識を
> 求めないので、とりあえず指定しておくと安全側に倒れてよい感じになります。特に
> キャラクタデバイスの1番は/dev/kmemとかあまり触ってほしくないデバイスも含まれて
> いるので、まるごと拒否しておいたほうが安心なのです。

ああ。なるほど。
で、終わってしまうと情報量0なのでちょっとだけ補足すると、以下のファイルで
カーネル開発者が把握している範囲の一覧が見れます

http://github.com/mirrors/linux-2.6/blob/master/Documentation/devices.txt


> というわけでLinuxの機能不足というよりはlxcの設定ファイルの書き方の問題な気がし
> ます。/dev/zeroや/dev/null、/dev/fullあたりだけを個別に許可すればいいとは思い
> ます。めんどうだからしてないという。しかし同じキャラクタデバイス1番系のでいえ
> ばたとえば/dev/urandomあたりはどうなのかなあ。エントロピー吸われちゃうのってコ
> ンテナの外の世界影響与えれるわけですけど、それってアタックになると思います?

ならないと思う。urandomって一般ユーザがエントロピー吸えるけど、それが脆弱性の
指摘を受けたという話はいまのところ聞かない

> とか個別の検討を全部のデバイスに対して行うのはそれなりに大変な気はしました。

そこは同意します。
device cgroupマージするときも議論した気がするし。
たぶん、lxcのデフォルト値をもっとユーザフレンドリーにするのが現実解な気がしてきました。

In This Thread