gdb
が適切に機能していないという間違った(またはしなかった)ことは何ですか?
root@6be3d60ab7c6:/# cat minimal.c
int main()
{
int i = 1337;
return 0;
}
root@6be3d60ab7c6:/# gcc -g minimal.c -o minimal
root@6be3d60ab7c6:/# gdb minimal
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
.
.
.
Reading symbols from minimal...done.
(gdb) break main
Breakpoint 1 at 0x4004f1: file minimal.c, line 3.
(gdb) run
Starting program: /minimal
warning: Error disabling address space randomization: Operation not permitted
During startup program exited normally.
(gdb)
(gdb) print i
No symbol "i" in current context.
Dockerを使用している場合は、おそらく--security-opt seccomp=unconfined
オプション(およびptraceの有効化):
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
何らかの理由で、ユーザーアカウントには、このプロセスのカーネルのアドレススペースレイアウトのランダム化を無効にする権限がありません。デフォルトでは、gdbはこれをオフにします。これは、ある種のデバッグを簡単にするためです(特に、プログラムを実行するたびにスタックオブジェクトのアドレスが同じになることを意味します)。続きを読む こちら 。
set disable-randomization off
でgdbのこの機能を無効にすることで、この問題を回避できます。
ユーザーにASLRを無効にするために必要な権限を取得することに関しては、おそらく/proc/sys/kernel/randomize_va_space
への書き込み権限を持つことになります。続きを読む こちら 。
wisbucky's answer (ありがとう!)に基づいて、Docker作成の同じ設定を次に示します。
security_opt:
- seccomp:unconfined
cap_add:
- SYS_PTRACE
セキュリティオプションseccomp:unconfirmed
を修正address space randomization
警告。
Docker documentation にSYS_PTRACEが「デフォルトでは許可されていない」機能であると記載されていても、機能SYS_PTRACEには顕著な効果はないようでした。おそらく何を探すべきか分からない。