114

gdb を使用してプログラムをアタッチしようとしていますが、次のように返されます。

プロセスにアタッチしています 29139 プロセスにアタッチ
できませんでした。uid がターゲット プロセスの uid と一致する場合は、/proc/sys/kernel/yama/ptrace_scope の設定を確認するか、root ユーザーとして再試行してください。詳細については、/etc/sysctl.d/10-ptrace.conf
ptrace: 許可されていない操作を参照してください。

gdb-debugger が「プロセスへのアタッチに失敗しました。権限を確認してから再試行してください」を返します。

strace が「attach: ptrace(PTRACE_ATTACH, ...): 操作は許可されていません」を返す

「kernel.yama.ptrace_scope」の 1 を 0 に、/proc/sys/kernel/yama/ptrace_scope1 を 0 に変更して、これを試しset environment LD_PRELOAD=./ptrace.soてみました。

#include <stdio.h>
int ptrace(int i, int j, int k, int l) {
    printf(" ptrace(%i, %i, %i, %i), returning -1\n", i, j, k, l);
    return 0;
}

しかし、それでも同じエラーが返されます。デバッガーにアタッチするにはどうすればよいですか?

4

15 に答える 15

80

これは、Linux のカーネル強化によるものです。この動作を無効にすることができますecho 0 > /proc/sys/kernel/yama/ptrace_scope/etc/sysctl.d/10-ptrace.conf

Fedora 22 のこの記事(ドキュメントへのリンク付き) と、Ubuntuおよび .

于 2015-08-28T15:28:57.663 に答える
12

上記のユースケースには実際には対処していませんが、次の問題がありました。

問題: たまたまプログラムを で開始したsudoため、gdb を起動すると が表示されましたptrace: Operation not permitted

解決策:sudo gdb ...

于 2015-12-04T14:51:54.923 に答える
5

私たちのほとんどがDockerの問題のためにここに着陸するので、誰かにとって役立つかもしれないので、 Kubernetesの回答を追加します...


SYS_PTRACE次のポッドのセキュリティ コンテキストに機能を追加する必要がありspec.containers.securityContextます。

       securityContext:
          capabilities:
            add: [ "SYS_PTRACE" ]

securityContext2か所に2つのキーがあります。キーが認識されないというメッセージが表示された場合は、置き忘れた可能性があります。もう一方を試してください。

おそらく、デフォルトとして root ユーザーも必要です。したがって、他のセキュリティ コンテキスト ( spec.securityContext) に次を追加します。

      securityContext:
        runAsUser: 0
        runAsGroup: 0
        fsGroup: 101

参考までに: 0 はルートです。しかし、fsGroup の値は私にはわかりません。私がやっていることは気にしませんが、あなたは気にするかもしれません。

これで次のことができます:

strace -s 100000 -e write=1  -e trace=write -p 16

もうアクセス許可が拒否されることはありません。

注意:これはパンドラボックスです。これを本番環境に置くことはお勧めしません。

于 2021-06-17T11:58:04.733 に答える