INETDで召喚されたサーバーアプリケーションにGDBを接続できないのはなぜですか?

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

  •  22-09-2019
  •  | 
  •  

質問

INETDを使用してクライアントに召喚できるサーバーアプリケーションがあります。ただし、INETDで起動されたサーバープロセスに接続しようとすると、次の応答が表示されます。PTRACE:操作は許可されていません。

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) 
役に立ちましたか?

解決 2

どうやら、UserIDがルートではない場合、INETDで物事はファンキーになります。奇妙な権限を持つプロセスになります。たとえば、許可が777であるにもかかわらず、読み取り/proc/self/exeを読むことができません。この問題は同じであると思います。私はプロセスのユーザーIDですが、許可はありません。 GDBにrootを使用することは回避策です。

他のヒント

私にとって解決策はこれでした:

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

さらに、Tgoodhartが言ったことを他に ptrace ユーザーは好きです /usr/bin/strace また、ブロックします gdb.

また、GDBの複数のインスタンスが同時に実行されている場合、通常、GDBを正しく閉じることができなかったために、この問題が発生することもわかりました。これらの漏れたインスタンスを閉じるには、問題が解決しました。

plsは次のコマンドを実行して問題を解決します。

sudo chmod +s/usr/bin/gdb

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top