システム(Ubuntu Gnu/Linux 2.6.32-41-server)でアドレス空間配置のランダム化(ASLR)を無効にしたいのですが、
sysctl -w kernel.randomize_va_space=0
この変更は、システム上のすべてのユーザーに影響を与えると思います。 (これは本当ですか?)ASLRを無効にする効果を、ユーザーとしての自分だけ、または無効にするコマンドを呼び出すシェルセッションのみに制限するにはどうすればよいですか?
ところで、私のシステムの現在の(デフォルト)設定は
kernel.randomize_va_space = 2
なぜ1または3ではなく2なのですか?/proc/sys設定の数値、それらの範囲、およびそれらの意味に関するドキュメントはどこにありますか?ありがとう!
randomize_va_space
sysctl設定のドキュメントは、カーネルソースツリーの Documentation/sysctl/kernel.txt
にあります。基本的に、
0-プロセスアドレス空間のランダム化をオフにします。
1-mmapベース、スタック、およびVDSOページのアドレスをランダム化します。
2-さらに、ヒープのランダム化を有効にします。
LinuxベースのシステムでASLRをローカルで無効にする最良の方法は、プロセスのパーソナリティフラグを使用することです。パーソナリティフラグを操作するコマンドは setarch
with
-R
、--addr-no-randomize
仮想アドレス空間のランダム化を無効にします(ADDR_NO_RANDOMIZEをオンにします)。
続行する方法は次のとおりです。
$> setarch $(uname -m) -R /bin/bash
このコマンドは、ASLRが無効になっているシェルを実行します。このプロセスのすべての子孫は、父親のパーソナリティフラグを継承するため、ASLRが無効になります。フラグの継承を解除する唯一の方法は、setuidプログラムを呼び出すことです(このような機能をサポートすることはセキュリティ違反になります)。
uname -m
は、プラットフォームのアーキテクチャをハードコーディングせず、このコマンドを移植可能にするためのものです。