Ubuntu で実行されるアプリケーションのデバッグ (ptrace の制限)

注: 次のトピックの説明は、Ubuntu および RedHat v7.5 以降のプラットフォームで実行されるアプリケーションに該当し、Ubuntu および Windows プラットフォームで Docker を使用する場合に適用されます。

デフォルトでは、Ubuntu でプロセスを別のプロセスにアタッチできるのは、事前に関係が定義されている場合のみに制限されます。たとえば、子プロセスを開始した親プロセスなどです。これは ptrace の制限であり、root 以外のユーザーにのみ有効です。マルウェア攻撃に対するセキュリティを強化することを目的としたもので、root ユーザーは引き続き任意のプロセスにアタッチできます。

これは、動的アタッチメント デバッグに影響します。

この動作は、/proc/sys/kernel/yama/ptrace_scopesysctl で定義されます。この値はデフォルトでは 1 に設定されています。

制限を緩和し、プロセスを他のプロセスにアタッチできるようにするには、この値を 0 に設定する必要があります。これにより、同じユーザー ID のプロセスを相互にアタッチできるようになります。制限を解除するには次のコマンドを実行します。

sudo sh << END
echo 0 > /proc/sys/kernel/yama/ptrace_scope
END

次の表に、これを行う必要があるデバッグ方法を示します。

デバッグ方法 ptrace_scope の sysctl の値
anim <prog> 0 または 1 のいずれか
COBSW=+A <prog> 0 または 1 のいずれか
anim <pid> 常に 0
cobanimsrv 0 または 1 のいずれか
cassi -a 0 または 1 のいずれか
CBL_DEBUG_START 0 または 1 のいずれか
debug_on_error チューナー 0 または 1 のいずれか
core_on_error チューナー 0 または 1 のいずれか
stackdump_on_error チューナー 0 または 1 のいずれか
Eclipse を使用したリモート デバッグ 0 または 1 のいずれか
Eclipse を使用したプロセスへのリモート アタッチ (PID へのアタッチ) によるデバッグ 常に 0

ptrace の制限の詳細については、Ubuntu のドキュメントを参照してください。