لماذا لا تستطيع GDB إرفاقها بتطبيق الخادم الذي تم استدعاؤه باستخدام Inetd؟

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

على ما يبدو ، تصبح الأمور غير تقليدية مع Inetd حيث لا يكون معرف المستخدم الجذر. ينتهي بك الأمر مع عملية بأذونات غريبة. على سبيل المثال ، أنت غير قادر على قراءة/proc/self/exe على الرغم من أن الأذونات هي 777. أظن أن هذه المشكلة هي نفسها. على الرغم من أنني معمل المستخدم للعملية ، ليس لدي أذونات. استخدام الجذر لـ GDB هو عمل حوله.

نصائح أخرى

كان الحل بالنسبة لي هذا:

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

علاوة على ما قاله Tgoodhart ، آخر ptrace يحب المستخدمون /usr/bin/strace سوف تمنع أيضا gdb.

لقد رأيت أيضًا أن هذه المشكلة تحدث عند تشغيل مثيلات متعددة من GDB في نفس الوقت ، عادةً لأنني فشلت في إغلاق GDB بشكل صحيح. إغلاق هذه الحالات التي تم تسريبها إصلاح المشكلة.

الرجاء تشغيل الأمر التالي لحل مشكلتك:

sudo chmod +s/usr/bin/gdb

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top