ローグウェーブソフトウェアのブログ

開発をシンプルに 安全で高品質のコードを 素早くお客様のもとへ

TotalViewデバッガのptrace設定

こんにちは、ローグウェーブのセールスエンジニア 柄澤(からさわ)です。

TotalViewやそのバッチ実行形態であるtvscriptを起動する際に以下のメッセージが出ることがあります。

WARNING: Nonzero kernel.yama.ptrace_scope sysctl setting detected.

A security restriction may be in place that prevents attaching to a process that was not directly started by the current process. This security restriction may prevent debugging applications that are not directly started by the debugger, including most MPI jobs, attaching to running processes or enabling the Replay feature. You may be able to turn off this feature by entering:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

This will enable debugging and attaching to processes. This setting will last until the system is rebooted. For a permanent change, change the kernel.yama.ptrace_scope setting on the last line in /etc/sysctl.d/10-ptrace.conf.

ptraceとはUnixLinuxで他のプロセスを制御するためのシステムコールであり、TotalViewもデバッグ機能を実現するためにこの機能を利用しています。

ptrace_scopeの値が1など非ゼロの場合はデバッグがうまく実行できませんので必ず上記のコマンドを実行してptrace_scopeの値を0に変更してください。メッセージに記載されているように、このコマンドによる設定は一時的なもので、システムを再起動すると元に戻ってしまうため、永続的な設定とするためには /etc/sysctl.d/10-ptrace.conf の末尾にある数字を0に変えてください。このファイルには、ptraceがデバッグのためのシステムで、セキュリティ上の理由でデフォルトが1になっている旨が記載されています。

The PTRACE system is used for debugging. With it, a single user process
can attach to any other dumpable process owned by the same user. In the
case of malicious software, it is possible to use PTRACE to access
credentials that exist in memory (re-using existing SSH connections,
extracting GPG agent information, etc).

A PTRACE scope of “0” is the more permissive mode. A scope of “1” limits
PTRACE only to direct child processes (e.g. “gdb name-of-program” and
“strace -f name-of-program” work, but gdb’s “attach” and “strace -fp $PID”
do not). The PTRACE scope is ignored when a user has CAP_SYS_PTRACE, so
“sudo strace -fp $PID” will work as before. For more details see:
https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace

For applications launching crash handlers that need PTRACE, exceptions can
be registered by the debugee by declaring in the segfault handler
specifically which process will be using PTRACE on the debugee:
prctl(PR_SET_PTRACER, debugger_pid, 0, 0, 0);

In general, PTRACE is not needed for the average running Ubuntu system.
To that end, the default is to set the PTRACE scope to “1”. This value
may not be appropriate for developers or servers with only admin accounts.

TotalViewの動作がおかしいと思ったらご確認ください。

ローグウェーブのセールスエンジニア 柄澤(からさわ)