[#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:41784] Re: [Feature #3513] spawn ..., err: nil

From: Urabe Shyouhei <shyouhei@...>
Date: 2010-07-02 12:52:30 UTC
List: ruby-dev #41784
# 盛大にオフトピックです

(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とかあまり触ってほしくないデバイスも含まれて
いるので、まるごと拒否しておいたほうが安心なのです。

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

In This Thread