2012-01-20 17 views
5

टीएलडीपी की उन्नत बैश स्क्रिप्टिंग गाइड बताती है कि शैल स्क्रिप्ट का उपयोग "situations where security is important, where you need to guarantee the integrity of your system and protect against intrusion, cracking, and vandalism" के लिए नहीं किया जाना चाहिए।शैल स्क्रिप्ट और सुरक्षा

शैल स्क्रिप्ट इस तरह के उपयोग के मामले के लिए अनुपयुक्त बनाता है?

उत्तर

6
खोल के आघातवर्धनीयता की वजह से

, यह एक है कि सत्यापित करने के लिए मुश्किल है शेल स्क्रिप्ट इसके इच्छित फ़ंक्शन और केवल निष्पादित करता है जो प्रतिकूल इनपुट के चेहरे पर कार्य करता है। शैल व्यवहार जिस तरह से पर्यावरण पर निर्भर करता है, साथ ही इसके अपने कई कॉन्फ़िगरेशन चर की सेटिंग्स भी निर्भर करता है। प्रत्येक कमांड लाइन विस्तार, मूल्यांकन और इंटरपोलेशन के कई स्तरों के अधीन है। कुछ खोल संरचना उपप्रोसेसेस में चलती हैं जबकि मूलभूत प्रक्रिया में निर्माण के चर शामिल होते हैं। यह सब उन प्रणालियों को डिजाइन करते समय केआईएसएस सिद्धांत के मुकाबले है जिन पर हमला किया जा सकता है।

3

शायद क्योंकि यह स्क्रू करना आसान है। जब PATH सही ढंग से सेट नहीं किया गया है, तो आपकी स्क्रिप्ट गलत आदेशों को निष्पादित करना शुरू कर देगी। किसी स्ट्रिंग में कहीं भी जगह डालने से यह बाद में दो स्ट्रिंग बन सकता है। इससे शोषण योग्य सुरक्षा छेद हो सकते हैं। संक्षेप में: गोले आपको कुछ गारंटी देते हैं कि आपकी स्क्रिप्ट कैसे व्यवहार करेगी, लेकिन वे वास्तव में सुरक्षित प्रोग्रामिंग के लिए बहुत कमजोर या जटिल हैं।

(यह मुझे लगता है कि सुरक्षित प्रोग्रामिंग जोड़ना चाहते हैं करने के लिए अपने आप में एक कला है, और पंगा लेना किसी भी भाषा में संभव है।)

1

मैं उस कथन से असहमत हूं, क्योंकि उन स्क्रिप्ट्स के बारे में कुछ भी नहीं है जो उन्हें स्वाभाविक रूप से असुरक्षित बनाते हैं। बैश स्क्रिप्टिंग पूरी तरह सुरक्षित हैं यदि कुछ सरल दिशानिर्देशों का पालन किया जाता है:

  • क्या स्क्रिप्ट में ऐसी जानकारी है जो दूसरों को देखने में सक्षम नहीं होना चाहिए? यदि ऐसा है, तो सुनिश्चित करें कि यह केवल स्वामी द्वारा पठनीय है।
  • क्या स्क्रिप्ट किसी भी डेटा से इनपुट डेटा पर निर्भर करती है? यदि ऐसा है, तो सुनिश्चित करें कि इनपुट डेटा किसी भी तरह से दंडित नहीं किया जा सकता है, या उस चित्रित डेटा का पता लगाया जा सकता है और त्याग दिया गया।
  • क्या इससे कोई फर्क पड़ता है कि अन्य स्क्रिप्ट को चलाने और चलाने के लिए थे? यदि ऐसा है, तो पहले बिंदु के साथ, सुनिश्चित करें कि कोई भी इसे निष्पादित नहीं कर सकता है, और अधिमानतः इसे पढ़ नहीं सकता है। chmod 0700 आमतौर पर स्क्रिप्ट के लिए एक अच्छा विचार है जो सिस्टम फ़ंक्शन करता है।
  • और जिन मामलों में आप एक स्क्रिप्ट एक setuid (अपने दुभाषिया के माध्यम से) है करना चाहते हैं अत्यंत दुर्लभ

दो अंक है कि अलग एक संकलित कार्यक्रम से एक स्क्रिप्ट होगा कि स्रोत दिख रहा है कर रहे हैं , और एक दुभाषिया इसे निष्पादित करता है। जब तक दुभाषिया से समझौता नहीं किया गया है (जैसे कि उस पर एक सेट्यूड बिट होना), तो आप ठीक होंगे।

सिस्टम कार्यों को करने के लिए स्क्रिप्ट लिखते समय, टाइपो और स्क्रूप्स और इसे लिखते समय सामान्य मानव त्रुटि कुछ हद तक एक संभावित सुरक्षा विफलता का प्रतिनिधित्व करती है, लेकिन यह संकलित कार्यक्रमों के मामले में भी होगा (और बहुत से लोग इस तथ्य को अनदेखा करें कि संकलित कार्यक्रमों को भी अलग किया जा सकता है)

यह ध्यान देने योग्य है कि अधिकांश (यदि सभी नहीं) लिनक्स स्वाद, अधिकांश (यदि वास्तव में, वास्तव में, ऐसा नहीं है जो किसी भी नहीं हैं) सेवाओं को एक शेलस्क्रिप्ट के माध्यम से शुरू किया जाता है।

+1

जब कोई स्क्रिप्ट पठनीय नहीं होती है, तो यह निष्पादन योग्य नहीं है। स्क्रिप्ट पर सेटुइड भी संभव नहीं है। –

1
  • यह बुरा लड़कों खोल स्क्रिप्ट काम अलग ढंग से करने के लिए आसान है
  • इसके लिए अच्छे लड़के (पासवर्ड गुजर संवेदनशील डेटा से निपटने के लिए कठिन है (यह अन्य प्रक्रियाओं, पथ, खोल कार्यों के साथ एक बहुत, prifile में सूचना का आदान प्रदान), आदि)
संबंधित मुद्दे