17

私は、複数のプロセスにまたがる共通のアドレス空間レイアウトを利用できる並列プログラムのランタイムシステムに取り組んでおり、潜在的には複数の(数千の)ノードに分散しています。sysctl -w kernel.randomize_va_space=0多くの場合、この環境用に構築されたソフトウェアは、デフォルトでアドレス空間のランダム化が有効になっているLinuxシステムで実行され、ユーザーはシステム全体(経由など)でアドレス空間のランダム化を無効にしたくない、または無効にできない場合があります。これにより、並列プログラムにいくつかの制限が課せられ、パフォーマンスが低下する可能性があります。したがって、構築するバイナリに対してそれを無効にする方法を理解したいと思います。このソフトウェアは常に制御された環境で実行されているため、セキュリティは問題ではありません。

ET_EXECEF_AS_NO_RANDOM(どうやらマージされたことがない?)やなどのさまざまなフラグや変数への参照を見つけましたがPF_RANDOMIZE、これらのフラグを設定するために何ができるかを説明するドキュメントが見つかりません。理想的な答えは、どのコンパイラ/アセンブラ/リンカーフラグが結果のバイナリのランダム化を無効にするか、そしてこれが機能するツールチェーン/カーネルのバージョンを教えてくれるでしょう。次善の策は、バイナリが構築された後に同じことを行うツールです。

誰かがそれを提案すると確信しているので、実行時にこの変更を行うことができることはすでに知っていますがsetarch -R、これを実行可能ファイルに記録することをお勧めします。

トリックを実行する必要があるようにpaxctl -rx見えますが、PaXパッチを含まないカーネルで使用されている現在の方法には適用されないようです。

4

3 に答える 3

14

おそらく、ノード上で並列プログラムを呼び出すある種のデーモンがあると思います。その場合、この共通の親が作成するすべての子プロセスに対して ASLR を無効にすることができます。

その方法については、GDB ソース (7.0 または CVS Head) を参照してください。personality(orig_personality|ADDR_NO_RANDOMIZE)その要点は、 afterforkと beforeを呼び出すことですexec

于 2009-09-22T15:02:19.890 に答える
1

共有メモリ空間をマップしたり、名前付きFIFOを使用したりできない理由はありますか?

于 2009-09-21T18:09:24.570 に答える
0

Linux カーネルの ASLR の少なくとも一部の以前のバージョンでは、フォーク時にオフセットが保持されていました。プロセスのランダム化を無効にするのではなく、同じ親によってフォークされたバイナリのインスタンス間でオフセットを同じに保つ親/子プロセス階層の下にプロセスを配置することはできますか?

于 2009-09-21T18:12:06.807 に答える