मैं रूट होने के बावजूद स्ट्रेस / जीडीबी एक प्रक्रिया से क्यों नहीं जोड़ूंगा?


26
  • मैंने रूट के रूप में लॉग इन किया लेकिन straceमुझे यह देता है:

    root @ kyznecov-System: / home / kyznecov # ps -e | grep 111
     3807 pts / 2 00:00:00 111
     3810 पीटी / 2 00:00:00 111
    रूट @ kyznecov- सिस्टम: / होम / kyznecov # स्ट्रेस -p 3810
    
    संलग्न करें: ptrace (PTRACE_ATTACH, ...): ऑपरेशन की अनुमति नहीं है
    प्रक्रिया में संलग्न नहीं किया जा सका। यदि आपका यूआईडी लक्ष्य के यूआईडी से मेल खाता है
    प्रक्रिया, / proc / sys / कर्नेल / यम / ptrace_scope, या कोशिश की सेटिंग की जाँच करें
    फिर से रूट उपयोगकर्ता के रूप में। अधिक जानकारी के लिए, /etc/sysctl.d/10-ptrace.conf देखें
    जड़ @ kyznecov-सिस्टम: / घर / kyznecov
    
    रूट @ kyznecov- सिस्टम: / होम / kyznecov # बिल्ली / proc / sys / कर्नेल / यम / ptrace_scope
    0
  • मैंने तब gdbएक्सेलस सीडीटी में एक मल्टीप्रोसेस प्रोग्राम को फोर्किंग के साथ डिबग करने के लिए उपयोग करने की कोशिश की , और इसने मुझे वही वीडियो / वीडियो दिया:

    यहाँ छवि विवरण दर्ज करें

कोई विचार?


चूंकि ptrace_scope शून्य है, इसलिए इसे कोई फर्क नहीं पड़ता, लेकिन सिर्फ एक प्रयोग के रूप में आप स्ट्रेस के अधिक सरल उपयोग का प्रयास कर सकते हैं, जहां अनुरेखण प्रक्रिया का पता लगाया जा रहा है। जैसे strace /bin/echo test? क्या वही त्रुटि संदेश देता है?
जॉर्डन उगला

@EliahKagan, सिद्धांत में ओपी का वर्णन कर्नेल बग की अनुपस्थिति में हो सकता है। यदि आपके पास अगले 24 घंटों में कुछ समय है और आप अपनी टिप्पणी को एक उत्तर में बदल सकते हैं, तो यह बहुत अच्छा होगा - Precise पर मेरे परीक्षण से कोई समस्या सामने नहीं आई है, और इस तरह यह निश्चित उत्तर होगा कि कुछ प्रश्न थे ओपी के विन्यास में ... वह 29 मई को अपने प्रारंभिक प्रश्न के बाद वापस नहीं आया।
ish

@ एलियाकगन, एक चीज ने मुझे "ऑपरेशन की अनुमति नहीं है" को थोड़ा सा हटाने पर मुझे मारा - क्योंकि मैंने इसे कई बार पहले देखा है जब मैं ओपन वीजेड वीपीएस / वीएम पर रूट करता हूं (वे होस्ट मशीन कर्नेल साझा करते हैं, इसलिए नहीं , आप केवल अपने छोटे द्वीप के राजा हैं) ... शायद यह मामला था? इस पेस्ट को
ish

@izx आपका पेस्ट समाप्त हो गया है। और मेरे पास यह मुद्दा है (एक कंटेनर के अंदर), कोई भी जानकारी अच्छी होगी
कुणाल त्यागी

जवाबों:


25

त्रुटि प्राप्त करने का एक कारण:

attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

क्योंकि प्रक्रिया पहले से ही gdb, straceया इसी तरह से जुड़ी हुई है । यह जाँचने के लिए कि क्या यह मामला है,

grep TracerPid /proc/$THE_PID/status

यदि यह नॉनज़ेरो है, तो यह मौजूदा प्रोग्राम का एक प्रकार है जो पहले से ही उस प्रक्रिया पर एक निशान चला रहा है।


अगर हम ग्रहण में डिबगिंग कर रहे हैं, तो हम इसे नोटिस नहीं करते ... जो पहले से ही GDB
ernesto

इस पर ध्यान दिलाने के लिए धन्यवाद। मैं स्ट्रेस रैपर के माध्यम से एक कार्यक्रम चला रहा था। कार्यक्रम कांटे और फिर खुद को क्रियान्वित करता है। निर्वासित बच्चा जल्दी से मर जाता है क्योंकि यह स्ट्रेस रैपर चलाता है, जो संलग्न करने में विफल रहता है क्योंकि माता-पिता की प्रक्रिया पहले से ही स्ट्रेस के नियंत्रण में है।
रॉब केनेडी

18

जैसा कि izx ने टिप्पणी की है, यह केवल कर्नेल बग के कारण ही हो सकता है। तो जो कोई भी वर्तमान में इस समस्या का उत्पादन कर सकता है - जिसमें और विशेष रूप से इस प्रश्न का मूल पोस्टर शामिल है - उस पृष्ठ को अच्छी तरह से और सावधानीपूर्वक पढ़कर, और फिर प्रभावित मशीन पर चलकर इसे बग के रूप में रिपोर्ट करने के लिए अच्छी तरह से सलाह दी जाएगीubuntu-bug linux । यह linuxउबंटू के खिलाफ रिपोर्ट किया जाना चाहिए , और एक मेनलाइन (अपस्ट्रीम) कर्नेल के खिलाफ नहीं , जब तक कि आप इसे मेनलाइन कर्नेल पर नहीं बना सकते (आपको yamaलोड करना होगा)।

उबंटू 10.10 से शुरू होने वाले उबंटू के हर संस्करण में अपेक्षित व्यवहार वह प्रक्रिया है जब तक कि B एक A (या A के रूप में रन root) का प्रत्यक्ष बच्चा नहीं है, तब तक प्रक्रिया A एक चल रही प्रक्रिया B का पता नहीं लगा सकती है । यह एक सुरक्षा वृद्धि है, जो इसे बनाता है ताकि एक प्रक्रिया जो एक हमलावर द्वारा समझौता की गई है, कर्नेल द्वारा प्रदान की गई डिबगिंग सुविधाओं का उपयोग अन्य प्रक्रियाओं से जानकारी खोजने के लिए नहीं कर सकती है। यह सिक्योरिटी फीचर्स कम्युनिटी विकी पेज के ptrace स्कोप सेक्शन में बताया गया है ।

यह प्रतिबंधात्मक व्यवहार डिफ़ॉल्ट है लेकिन किसी भी चल रही प्रक्रिया B का पता लगाने के लिए एक प्रक्रिया A को अनुमति देने के लिए परिवर्तित किया जा सकता है जो कि प्रक्रिया A के समान उपयोगकर्ता ID के साथ चलाया जाता है। यही है, आप अपनी किसी भी प्रक्रिया को एक दूसरे को डिबग करने की अनुमति देने के लिए अपने सिस्टम को कॉन्फ़िगर कर सकते हैं। यह डिबगर्स को पहले से चल रही प्रक्रियाओं में संलग्न करने को सरल बनाता है।

इसके लिए सेटिंग /proc/sys/kernel/yama/ptrace_scope sysctl द्वारा उजागर की गई है । 1अधिक प्रतिबंधात्मक व्यवहार और 0कम प्रतिबंधात्मक व्यवहार को दर्शाता है। सेटिंग को इसके साथ पढ़ा जा सकता है:

cat /proc/sys/kernel/yama/ptrace_scope

निम्न प्रतिबंधक (गैर-डिफ़ॉल्ट) व्यवहार को इसके साथ सेट किया जा सकता है:

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

और अधिक प्रतिबंधात्मक (डिफ़ॉल्ट) व्यवहार को इसके साथ सेट (या वापस सेट) किया जा सकता है:

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

इतना ही नहीं इस सवाल का एक संलग्न करने में असमर्थ के मूल पोस्टर था straceके साथ एक वर्तमान में चल प्रक्रिया के लिए उदाहरण ptrace-scopeके लिए सेट 0है, लेकिन मूल पोस्टर अब भी जब चल रहा है ऐसा करने में असमर्थ थे straceके रूप में root। यह देखना मुश्किल है कि यह कुछ भी हो सकता है लेकिन बग - मैं दृढ़ता से इसे एक के रूप में रिपोर्ट करने की सलाह देता हूं।

सबसे पहले, मैंने सोचा था कि मैं उस समस्या को पुन: उत्पन्न करने में सक्षम था जहां एक ptrace_scopeसेटिंग 0को नजरअंदाज कर दिया जाता है और जैसे कि वह है 1। लेकिन अब मुझे विश्वास नहीं हुआ कि यह मामला है, क्योंकि मैंने सभी समान चीजें फिर से की हैं, और मैं समस्या को पुन: पेश नहीं कर सकता। मैंने इस पर परीक्षण किया है:

  • लुबंटू सटीक amd64 भौतिक मशीन मैं अपने मुख्य बॉक्स के रूप में दैनिक उपयोग करता हूं।
  • एक VirtualBox वर्चुअल मशीन एक ल्यूबंटू सटीक i386 (12.04) लाइव सीडी चला रही है।
  • एक समान वर्चुअलबॉक्स वर्चुअल मशीन क्वांटल i386 (उबंटू + 1) डेली-लाइव (20120608) चला रही है।

सभी तीन मशीनों पर, अपेक्षित व्यवहार होता है, और मैं इस स्थिति को पुन: उत्पन्न नहीं कर सकता कि इस प्रश्न का मूल पोस्टर किसके बारे में पूछ रहा है। यहाँ टर्मिनल से कुछ पाठ है (सटीक लाइव सिस्टम से):

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 जब तक मैंने अपेक्षा के अनुसार उसे निलंबित नहीं किया, तब तक उसने संदेश देना जारी रखा।

मैं इसे बग के रूप में रिपोर्ट करने के लिए फिर से सिफारिश करके समाप्त करता हूं। पाठ के लिए https://bugs.launchpad.net (जिसमें कोई भी कथित उबंटू कीड़े शामिल हैं) पर अधिकतम समावेशी खोज केवल कुछ मुट्ठी भर परिणामptrace_scope पैदा करती है , जिसमें स्पष्ट रूप से इस बग के लिए कोई भी रिपोर्ट नहीं है । बग की रिपोर्ट करने से दूसरों को मदद मिलेगी, वर्कअराउंड या फिक्स हो सकता है, और शायद इस समस्या पर काम करने के लिए आगे बढ़ने का एकमात्र सार्थक तरीका है (यह समस्या अभी भी हो रही है)।


सुझाव के लिए धन्यवाद, मैं इसे कल विस्तार से पढ़ूंगा और शायद कुछ उप-जोड़ जोड़ दूंगा, लेकिन मुझे लगता है कि यह बहुत अच्छी है :)
ish

मेरे पोस्ट में आप देख सकते हैं: root @ kyznecov-System: / home / kyznecov # cat / proc / sys / kernel / yama / ptrace_scope 0 मैंने ऐसा किया: echo 0 | सूदो टी / proc / sys / कर्नेल / यम / ptrace_scope
andreykyz

कोन्कोल में सभी आसानी से काम करते हैं। लेकिन अगर मैं ग्रहण में कार्यक्रम चलाता हूं और कंसोल से कोशिश करता हूं तो मुझे उक्त समस्या हो जाती है।
एंड्रीज़

2
प्रक्रिया का एक साइड-इफेक्ट पहले से पता लगाया जा सकता है? जब मुझे कांटा-मोड वाले बच्चे के साथ मूल प्रक्रिया पर gdb का उपयोग करने में एक ही समस्या थी
जेमी पाट

2
मुझे यह बग 14.04 को भी मिल रहा है। किसी को पता है कि क्या एक बग कभी इसके लिए रिपोर्ट किया गया था?
detly
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.