Eu entrei como root, mas
strace
me dá o seguinte:raiz @ 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, ...): Operação não permitida Não foi possível anexar ao processo. Se o seu uid corresponder ao uid do alvo processo, verifique a configuração de / proc / sys / kernel / yama / ptrace_scope ou tente novamente como o usuário root. Para mais detalhes, consulte /etc/sysctl.d/10-ptrace.conf root @ kyznecov-System: / home / kyznecov root @ kyznecov-System: / home / kyznecov # cat / proc / sys / kernel / yama / ptrace_scope 0 0
Tentei usar
gdb
para depurar um programa multiprocesso no Eclipse CDT com bifurcação, e isso me deu o mesmo resultado / erro:
Alguma ideia?
strace /bin/echo test
? Isso dá a mesma mensagem de erro?Respostas:
Um motivo para obter o erro:
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
é porque o processo já foi anexado a
gdb
,strace
ou similar. Para verificar se é esse o caso, execute:grep TracerPid /proc/$THE_PID/status
Se for diferente de zero, esse é o pid de um programa existente que já está executando um rastreio nesse processo.
fonte
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 relatadolinux
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 teryama
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 e0
o menos restritivo. A configuração pode ser lida com:O comportamento menos restritivo (não padrão) pode ser definido com:
E o comportamento mais restritivo (padrão) pode ser definido (ou retrocedido) com:
Não apenas o pôster original desta pergunta não conseguiu anexar uma
strace
instância a um processo atualmente em execução comptrace-scope
definido como0
, mas o pôster original ainda não conseguiu fazê-lo ao executarstrace
comoroot
. É 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 de0
é ignorada e tratada como se fosse1
. 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: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):
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).fonte