izx 가 언급 했듯이 , 이것은 커널 버그로 인해 발생할 수 있습니다. 따라서 현재이 질문의 원본 포스터를 포함하여이 문제를 일으킬 수있는 사람은 해당 페이지를 철저하고 신중하게 읽고 영향을받는 컴퓨터에서 실행 하여 버그 로 보고하는 것이 좋습니다ubuntu-bug linux
. 메인 라인 커널에서 로드 할 수없는 경우 메인 라인 (업스트림) 커널이 아니라linux
Ubuntu에서 이를보고해야합니다 ( 로드해야 함).yama
Ubuntu 10.10으로 시작하는 모든 버전의 Ubuntu에서 예상되는 동작은 B가 A의 직접적인 자식이 아니면 프로세스 A가 실행중인 프로세스 B를 추적 할 수 없다는 것 root
입니다. 이는 보안 강화 기능으로, 공격자가 손상된 프로세스가 커널이 제공 한 디버깅 기능을 사용하여 다른 프로세스에서 정보를 검색 할 수 없도록합니다. 이것은 보안 기능 커뮤니티 위키 페이지 의 ptrace 범위 섹션에 설명되어 있습니다.
이 제한적인 동작은 기본값이지만 프로세스 A가 프로세스 A와 동일한 사용자 ID로 실행중인 실행중인 프로세스 B를 추적하도록 프로세스 A를 변경할 수 있습니다. 즉, 프로세스가 서로 디버그하도록 시스템을 구성 할 수 있습니다. 이렇게하면 이미 실행중인 프로세스에 디버거를 간단하게 연결할 수 있습니다.
이에 대한 설정은 /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 라이브 시스템)의 일부 텍스트입니다.
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
? 동일한 오류 메시지가 표시됩니까?