Como o izx comentou, isso só deve acontecer devido a um bug do kernel. Portanto, qualquer pessoa que possa produzir esse problema atualmente - incluindo e especialmente o pôster original desta pergunta - seria aconselhável denunciá-lo como um erro , lendo essa página com cuidado e atenção e depois executando ubuntu-bug linux
na máquina afetada . Isso deve ser relatado linux
no Ubuntu, e não no kernel da linha principal (upstream), a menos que você possa produzi-lo em um kernel da linha principal (você precisaria ter yama
carregado).
O comportamento esperado em todas as versões do Ubuntu iniciadas no Ubuntu 10.10 é que o processo A não pode rastrear um processo em execução B, a menos que B seja filho direto de A (ou A seja executado como root
). Esse é um aprimoramento de segurança, o que faz com que um processo comprometido por um invasor não possa usar os recursos de depuração fornecidos pelo kernel para descobrir informações de outros processos. Isso é explicado na seção escopo ptrace da página de wiki da comunidade de Recursos de Segurança .
Esse comportamento restritivo é o padrão, mas pode ser alterado para permitir que um processo A rastreie qualquer processo em execução B executado com o mesmo ID de usuário que o próprio processo A. Ou seja, você pode configurar seu sistema para permitir que qualquer um dos seus processos depure um ao outro. Isso simplifica a anexação de depuradores a processos já em execução.
A configuração para isso é exposta pelo /proc/sys/kernel/yama/ptrace_scope
sysctl . 1
denota o comportamento mais restritivo e 0
o menos restritivo. A configuração pode ser lida com:
cat /proc/sys/kernel/yama/ptrace_scope
O comportamento menos restritivo (não padrão) pode ser definido com:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
E o comportamento mais restritivo (padrão) pode ser definido (ou retrocedido) com:
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Não apenas o pôster original desta pergunta não conseguiu anexar uma strace
instância a um processo atualmente em execução com ptrace-scope
definido como 0
, mas o pôster original ainda não conseguiu fazê-lo ao executar strace
como root
. É difícil ver como isso pode ser qualquer coisa, menos um bug - eu recomendo denunciá-lo como um.
No começo, eu pensava que era capaz de reproduzir o problema em que uma ptrace_scope
configuração de 0
é ignorada e tratada como se fosse 1
. Mas não acredito mais que esse seja o caso, pois fiz as mesmas coisas novamente e não posso reproduzir o problema. Eu testei isso em:
- A máquina física Lubuntu Precise amd64 que uso diariamente como minha caixa principal.
- Uma máquina virtual do VirtualBox executando um CD ao vivo do Lubuntu Precise i386 (12.04).
- Uma máquina virtual VirtualBox idêntica executando um Quantal i386 (Ubuntu + 1) de vida diária (20120608).
Nas três máquinas, o comportamento esperado ocorre e não consigo reproduzir a condição que o pôster original desta pergunta está perguntando. Aqui está um texto do Terminal (do sistema ao vivo 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
continuei produzindo mensagens até que eu a suspendi, como esperado.
Concluo recomendando novamente denunciar isso como um bug. Uma pesquisa maximamente inclusiva em https://bugs.launchpad.net (que inclui todos os bugs relatados do Ubuntu) para o texto ptrace_scope
produz apenas alguns resultados, nos quais claramente não há relatórios para esse bug . Relatar o bug ajudaria outras pessoas, pode levar a soluções alternativas ou a uma correção, e é provavelmente a única maneira significativa de avançar no trabalho sobre esse problema (supondo que o problema ainda esteja ocorrendo).
strace /bin/echo test
? Isso dá a mesma mensagem de erro?