Por que o GDB não pode anexar ao aplicativo de servidor convocado com o Inetd?

StackOverflow https://stackoverflow.com/questions/1586812

  •  22-09-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo de servidor que pode ser convocado para o cliente usando o Inetd. No entanto, se eu tentar anexar ao processo do servidor que foi lançado com o INTD, recebo a seguinte resposta: PTRACE: Operação não permitida.

gdb --annotate=3 /my/app/here <processId>

Current directory is /usr/local/bin/
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
Reading symbols from /usr/local/bin/flumed...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
Attaching to program: /my/app/here, process <processId>
ptrace: Operation not permitted.
/usr/local/bin/<processId>: No such file or directory.
(gdb) 
Foi útil?

Solução 2

Aparentemente, as coisas ficam descoladas com o Inetd, onde o ID do usuário não é root. Você acaba com um processo com permissões estranhas. Por exemplo, você não pode ler/proc/self/exe, embora as permissões sejam 777. Eu suspeito que esse problema seja mais do mesmo. Mesmo que eu seja o UserID do processo, não tenho permissões. Usar a raiz para o GDB é um trabalho por aí.

Outras dicas

Solução para mim foi a seguinte:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

Além do que Tgoodhart disse, outro ptrace usuários gostam /usr/bin/strace também bloqueará gdb.

Também vi esse problema ocorrer quando várias instâncias de GDB estão sendo executadas ao mesmo tempo, geralmente porque não fechei o GDB corretamente. O fechamento dessas instâncias vazadas corrigiu o problema.

PLS executa o seguinte comando para resolver seu problema:

sudo chmod +s/usr/bin/gdb

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top