Rootとしてログインしましたが、strace
から次のことがわかります。
root @ kyznecov-System:/ home/kyznecov#ps -e | grep 111 3807 pts/2 00:00:00 111 3810 pts/2 00:00:00 111 root @ kyznecov-System:/ home/kyznecov#strace- p 3810 attach:ptrace(PTRACE_ATTACH、...):操作は許可されていません プロセスに接続できませんでした。 uidがターゲット プロセスのuidと一致する場合、/ proc/sys/kernel/yama/ptrace_scopeの設定を確認するか、rootユーザーとしてもう一度 を試してください。詳細については、/ etc/sysctl.d/10-ptrace.conf root @ kyznecov-System:/ home/kyznecov root @ kyznecov-System:/ homeを参照してください。/kyznecov#cat /proc/sys/kernel/yama/ptrace_scope 0
その後、gdb
を使用して、フォークを使用してEclipse CDTのマルチプロセスプログラムをデバッグしようとしましたが、同じ結果/エラーが発生しました。
何か案は?
エラーが発生する1つの理由:
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
これは、プロセスがgdb
、strace
などで既にアタッチされているためです。これが当てはまるかどうかを確認するには、次を実行します。
grep TracerPid /proc/$THE_PID/status
ゼロ以外の場合、それはそのプロセスで既にトレースを実行している既存のプログラムのpidです。
izx がコメントしているように、これはカーネルのバグが原因でのみ発生するはずです。したがって、この問題を現在発生させることができる人は誰でも、特にこの質問の元のポスターを含めて、 バグとして報告する を読むことをお勧めします。そのページを徹底的に慎重に検討し、影響を受けるマシンでubuntu-bug linux
を実行します。これは、Ubuntuのlinux
に対して報告する必要があり、メインライン(上流)カーネルに対してnot報告する必要があります。 yama
がロードされています)。
Ubuntu 10.10以降のUbuntuのすべてのバージョンで予想される動作は、BがAの直接の子でない限り、プロセスAが実行中のプロセスBをトレースできないことです(またはAはroot
として実行されます)。これはセキュリティの強化であり、攻撃者によって侵害されたプロセスは、カーネルが提供するデバッグ機能を使用して他のプロセスから情報を発見できないようにします。これは、セキュリティ機能コミュニティwikiページの ptrace scopeセクション で説明されています。
この制限的な動作はデフォルトですが、プロセスAがプロセスA自身と同じユーザーIDで実行されている実行中のプロセスBをトレースできるように変更できます。つまり、プロセスを相互にデバッグできるようにシステムを構成できます。これにより、すでに実行中のプロセスにデバッガーを簡単に接続できます。
この設定は、/proc/sys/kernel/yama/ptrace_scope
sysctl で公開されます。 1
はより制限の厳しい動作を示し、0
はより制限の少ない動作を示します。設定は次の方法で読み取ることができます。
cat /proc/sys/kernel/yama/ptrace_scope
制限の少ない(デフォルトではない)動作は、次のように設定できます。
echo 0 | Sudo tee /proc/sys/kernel/yama/ptrace_scope
そして、より制限的な(デフォルトの)動作は次のように設定(または元に戻す)できます:
echo 1 | Sudo tee /proc/sys/kernel/yama/ptrace_scope
この質問の元の投稿者は、ptrace-scope
を0
に設定して現在実行中のプロセスにstrace
インスタンスを添付できなかっただけでなく、 strace
としてroot
を実行しています。これがバグではないことを確認するのは困難です。バグとして報告することを強くお勧めします。
最初は、ptrace_scope
の0
設定が無視され、1
のように扱われるという問題を再現できると考えていました。しかし、私はすべて同じことを再び行ったため、これが事実であるとはもはや信じていません。問題を再現できません。私はこれをテストしました:
3台すべてのマシンで、予想される動作が発生し、この質問の元のポスターが尋ねている状態を再現できません。ターミナル(正確なライブシステム)からのテキストを次に示します。
lubuntu@lubuntu:~$ nano&
[1] 3492
lubuntu@lubuntu:~$ strace -p 3492
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
[1]+ Stopped nano
lubuntu@lubuntu:~$ cat /proc/sys/kernel/yama/ptrace_scope
1
lubuntu@lubuntu:~$ echo 0 | Sudo tee /proc/sys/kernel/yama/ptrace_scope
0
lubuntu@lubuntu:~$ strace -p 3492
Process 3492 attached - interrupt to quit
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
strace
は、期待どおりに中断するまでメッセージの生成を続けました。
最後に、これをバグとして報告することを再度お勧めします。 https://bugs.launchpad.net (報告されたUbuntuのバグを含む)でptrace_scope
というテキストを最大限に包括的に検索すると、 ほんの一握りの結果、明らかにこのバグの報告はありません 。バグを報告することは他の人を助け、回避策または修正につながる可能性があり、おそらくこの問題に取り組む前に進む意味のある唯一の方法です(問題がまだ発生していると仮定)。