如
izx所评论的,这只能是由于内核漏洞才可能发生。因此,任何目前能够出现这个问题的人,包括尤其是这个问题的原始提问者,都应该仔细阅读那个页面,并在受影响的机器上运行
ubuntu-bug linux
,将其报告为一个bug。这应该报告给Ubuntu中的
linux
,而不是报告给主线(上游)内核,除非你能在主线内核上复现它(你必须加载
yama
)。
每个Ubuntu版本的预期行为,从Ubuntu 10.10开始,是进程A无法跟踪运行中的进程B,除非B是A的直接子进程(或者A以root身份运行)。这是一种安全增强措施,使得被攻击者入侵的进程无法使用内核提供的调试工具来发现其他进程的信息。这在Security Features社区维基页面的ptrace scope部分有所解释。
这种限制性行为是默认设置,但可以更改为允许进程A跟踪任何与进程A自身具有相同用户ID的正在运行的进程B。也就是说,您可以配置系统以允许您的任何进程相互调试。这简化了将调试器附加到已经运行的进程上。
此设置在sysctl中通过/proc/sys/kernel/yama/ptrace_scope公开。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
将
strace
实例附加到当前正在运行的进程上,而且在以
root
身份运行
strace
时仍然无法这样做。很难看出这可能是除了一个错误之外的任何事情 - 我强烈建议将其报告为错误。
起初,我认为我能够重现忽略
ptrace_scope
设置为
0
并被视为
1
的问题。但我不再相信这是真的,因为我已经再次做了所有相同的事情,但我无法重现这个问题。我已在以下环境中进行了测试:
- 我每天用作主要框的Lubuntu Precise amd64物理机器。
- 运行Lubuntu Precise i386(12.04)live CD的VirtualBox虚拟机。
- 运行Quantal i386(Ubuntu+1)daily-live(20120608)的相同VirtualBox虚拟机。
在所有三台机器上,出现了预期的行为,我无法重现这个问题的原始发布者所问的条件。以下是来自终端的一些文本(来自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
?这样会得到相同的错误信息吗? - Jordan Uggla