正如izx所说,这只能由于内核错误才能发生。因此,建议任何当前能够产生此问题的人(尤其是该问题的原始发帖人)建议通过彻底仔细地阅读该页面,然后在受影响的计算机上运行,将其报告为错误ubuntu-bug linux
。这应该linux
在Ubuntu中进行报告,而不是在主线(上游)内核中进行报告,除非可以在主线内核中生成它(必须已yama
加载)。
从Ubuntu 10.10开始的每个版本的Ubuntu中的预期行为是,除非B是A的直接子代(或A运行为root
),否则进程A无法跟踪正在运行的进程B。这是一项安全性增强功能,可以使遭受攻击者破坏的进程无法使用内核提供的调试功能从其他进程中发现信息。在“ 安全功能”社区Wiki页面的ptrace范围部分对此进行了说明。
此限制性行为是默认的,但可以更改以允许进程A跟踪使用与进程A自己的用户ID相同的用户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
问题的原始张贴者不仅无法将strace
实例附加到ptrace-scope
设置为的当前正在运行的进程上0
,而且当strace
以root
。几乎看不到这是一个错误,而是很难-我强烈建议将其报告为一个。
起初,我以为我能够重现忽略ptrace_scope
设置0
并将其视为的问题1
。但是我不再相信这种情况了,因为我再次做了所有相同的事情,因此我无法重现该问题。我已经测试过:
- 我每天使用Lubuntu Precise amd64物理机作为主机。
- 运行Lubuntu Precise i386(12.04)实时CD的VirtualBox虚拟机。
- 每天运行Quantal i386(Ubuntu + 1)的相同VirtualBox虚拟机(20120608)。
在所有三台计算机上,都会发生预期的行为,并且我无法重现此问题的原始发布者所询问的条件。这是终端机(Precise live系统)中的一些文本:
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
只会产生少量结果,显然没有关于该错误的报告。报告该错误将对其他人有所帮助,可能会导致变通办法或修复,并且可能是继续解决此问题的唯一有意义的方法(假定问题仍然存在)。
strace /bin/echo test
?是否给出相同的错误信息?