2012-12-19 23 views
10

मेरे पास एक ऐसा प्रोग्राम है जो स्मृति में सुरक्षा-संवेदनशील जानकारी (जैसे निजी कुंजी) रखता है, क्योंकि यह प्रोग्राम के जीवनकाल में उनका उपयोग करता है। इस प्रोग्राम के प्रोडक्शन संस्करणों को यह सुनिश्चित करने के लिए RLIMIT_CORE से 0 सेट किया गया है कि कोर डंप जिसमें यह संवेदनशील जानकारी हो सकती है, कभी भी उत्पादित नहीं होती है।मैं कैसे सुनिश्चित करूं कि मेरा लिनक्स प्रोग्राम कोर डंप का उत्पादन नहीं करता है?

हालांकि

, जबकि इस core(8) मैनपेज में उल्लेख नहीं है, apport documentation on the Ubuntu wiki का दावा है,

नोट भले ही ulimit (विकलांग कोर फ़ाइलों के लिए सेट है कि शून्य की एक कोर फ़ाइल आकार specyfing ulimit का उपयोग करके -सी 0), apport अभी भी दुर्घटना पर कब्जा करेगा।

क्या मेरी प्रक्रिया के भीतर कोई तरीका है (यानी, बाहरी प्रणाली के कॉन्फ़िगरेशन पर भरोसा किए बिना) कि मैं यह सुनिश्चित कर सकता हूं कि मेरी प्रक्रिया का कोर डंप कभी उत्पन्न नहीं होता है?

नोट: मुझे पता है कि बहुत सारी विधियां हैं (जैसे नीचे दी गई टिप्पणियों में उल्लिखित) जहां रूट या प्रक्रिया स्वामी विशेषाधिकार वाले उपयोगकर्ता अभी भी संवेदनशील डेटा तक पहुंच सकते हैं। जो मैं यहां लक्षित कर रहा हूं वह संवेदनशील डेटा के अनजाने एक्सपोजर को डिस्क पर सहेजा जा रहा है, जिसे उबंटू बग ट्रैकिंग सिस्टम, या ऐसी चीजों को भेजा जा रहा है। (यह स्पष्ट करने के लिए Basile Starynkevitch के लिए धन्यवाद।)

+0

ध्यान दें कि एक निर्धारित उपयोगकर्ता कोर डंप प्राप्त करने के लिए अपने आवेदन को चलाने वाले अपने कर्नेल को पैच कर सकता है। –

+0

और प्रक्रिया मेमोरी '/ proc /' –

उत्तर

1

the POSIX spec के अनुसार, कोर केवल संकेत जिसका कार्रवाई डिफ़ॉल्ट कार्रवाई और जिसका डिफ़ॉल्ट कार्रवाई "अतिरिक्त कार्यों के साथ असामान्य रूप से प्रक्रिया समाप्त" करने के लिए है है के जवाब में होने उदासीनता।

इसलिए, यदि आप the description of signal.h में सूची में नीचे स्क्रॉल, एक "A" "डिफ़ॉल्ट कार्रवाई" कॉलम में के साथ सब कुछ एक संकेत आप के बारे में चिंता करने की जरूरत है। उन सभी को पकड़ने के लिए sigaction का उपयोग करें और सिग्नल हैंडलर में exit (या _exit) पर कॉल करें।

मेरा मानना ​​है कि ये एकमात्र तरीके हैं जो POSIX आपको कोर डंप उत्पन्न करने देता है। निश्चित रूप से, लिनक्स के पास इस उद्देश्य के लिए अन्य "बैक दरवाजे" हो सकते हैं; दुर्भाग्यवश, मैं सुनिश्चित करने के लिए एक कर्नेल विशेषज्ञ के पास पर्याप्त नहीं हूं ...

+0

के माध्यम से भी उपलब्ध है एक अच्छा विचार। हालांकि, यह सुनिश्चित करने के लिए मुझे बहुत मुश्किल लगता है कि आपने वास्तव में इसे सही तरीके से कार्यान्वित किया है और यह सभी परिस्थितियों में काम करेगा। दो संभावित त्रुटियों के बारे में मैं सोच सकता हूं: 1) मैं आपके सिस्टम-विशिष्ट दस्तावेज को भूल या गलत तरीके से पढ़ता हूं और सिग्नल याद करता हूं, और 2) मैं सिगसेजीवी की तरह कुछ पकड़ता हूं लेकिन मेरा (स्पष्ट रूप से टूटा हुआ) प्रोग्राम खुद को ऐसे राज्य में डाल देता है जहां यह ठीक से बाहर नहीं निकल सकता है, और एक कोर डंप वैसे भी उत्पादित किया जाता है। –

+0

1 के लिए एक फिक्स यह है: http://ftp.gnu.org/gnu/coreutils/ <- नवीनतम संस्करण डाउनलोड करें, इसे असम्पीडित करें और kill.c स्रोत देखें। इसमें list_signals नामक एक फ़ंक्शन है जो मूल रूप से मानक अनुपालन (यदि मुझे गलत नहीं है) में सभी उपलब्ध संकेतों का आकलन करेगा। 2. के लिए मैं सुझाव देता हूं कि अगर एक संकेत उठाया जाता है जो इतनी गंभीरता का है कि यह एक बुरी स्थिति का संकेत देगा, तो बस वहां से बाहर निकलें और फिर ठीक होने की कोशिश किए बिना। –