क्या जोड़ना सुरक्षित है? मेरे पेट को कैसे?


49

मैंने लोगों को अन्य उत्तरों में उल्लेख किया है कि यह .आपके $PATHपर्यावरण चर में वर्तमान कार्य निर्देशिका (' ') को शामिल करने के लिए एक बुरा विचार है , लेकिन विशेष रूप से इस मुद्दे को संबोधित करने वाले प्रश्न को खोजने में सक्षम नहीं है।

तो, मुझे .अपने रास्ते से क्यों नहीं जोड़ना चाहिए ? और अगर सभी चेतावनियों के बावजूद मैं इसे वैसे भी करता हूं, तो मुझे क्या देखना होगा? क्या इसे शुरू से अंत तक जोड़ना सुरक्षित है?


जवाबों:


39

यदि आप मशीन के एकमात्र उपयोगकर्ता हैं तो यह ठीक है, जब तक आप जानते हैं कि आप क्या कर रहे हैं। सामान्य चिंता यह है कि आपकी वर्तमान निर्देशिका होने से PATH, आप कमांड को एक स्थिर सूची के रूप में नहीं देख सकते हैं। यदि आपको अपनी वर्तमान निर्देशिका से कोई स्क्रिप्ट / प्रोग्राम चलाने की आवश्यकता है, तो आप हमेशा ./उसके नाम (आप सिस्टम को "मैं अपनी वर्तमान निर्देशिका से इस फ़ाइल को चलाना चाहता हूं" बताकर) इसे स्पष्ट रूप से चला सकते हैं ।

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

हालाँकि, यदि आप इसे जोड़ने जा रहे हैं, तो मैं सुझाव देता हूं कि इसे सूची के अंत में जोड़ा .जाए PATH( export PATH=$PATH:.)। कम से कम आप इस तरह सिस्टम-वाइड बायनेरिज़ को ओवरराइड नहीं करेंगे।

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


1
+ अंतर्निहित सिद्धांत के लिए और यह उल्लेख करने के लिए स्वीकार करें कि समस्याएँ तब भी मौजूद हो सकती हैं जब आप सिस्टम के एकमात्र उपयोगकर्ता हों। दोनों जवाब उत्कृष्ट अंक लाते हैं। जब भी आप निर्देशिकाओं को किसी अन्य उपयोगकर्ता के साथ साझा करते हैं, तो यह जोखिम बढ़ जाता है कि आप रूट हैं या नहीं।
जैंडर

6
यहां तक ​​कि मशीन पर एकमात्र उपयोगकर्ता के रूप में: हर बार जब आप एक अविश्वासित टार निकालते हैं तो यह lsआपके वर्तमान निर्देशिका में रख सकता है । अगले आप lsनिकाली गई फ़ाइलों का निरीक्षण करने के लिए दौड़ते हैं और आप पहले ही दुर्भावनापूर्ण कोड चला चुके हैं।
lesmana

35

जोखिम किसी को निर्देशिका में एक दुर्भावनापूर्ण निष्पादन योग्य है जो आपके वर्तमान में होता है।

सबसे खराब स्थिति तब होती है जब:

  • आप लॉग इन हैं क्योंकि दुर्भावनापूर्ण कमांड में असीमित क्षति शक्ति है
  • .आपके PATH की शुरुआत में मानक कमांड के रूप में इसे देखे बिना आपके द्वारा ओवरराइड किया जा सकता है (आमतौर पर lsजो सूची से खुद को छिपा सकता है)।

यदि आप एक नियमित उपयोगकर्ता के रूप में लॉग इन हैं और .आपके PATH के अंत में जोखिम कम है, लेकिन यह अभी भी मौजूद है:

  • कोई व्यक्ति आपको अक्सर एक आदेश को गलत समझ सकता है और एक मिलान स्थापित कर सकता है
  • कोई एक नकली कमांड स्थापित कर सकता है जिसका नाम नहीं है।

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


15
slयह देखने के लिए स्थापित करें कि बिंदु 3 कितनी बार होता है।
जोर्डन

या alias l=`ls`
एको

इसमें दुर्भावना नहीं है। मैं lsएक निर्देशिका सूची प्राप्त करने की उम्मीद करता हूं, लेकिन कुछ परियोजना जो मैं डाउनलोड करता हूं ls, उनके रूट प्रोजेक्ट फ़ोल्डर में कुछ और के शॉर्टकट के रूप में एक स्क्रिप्ट हो सकती है । lsशायद एक बुरा उदाहरण है, लेकिन मैं निश्चित रूप eसे संपादित dकरने के लिए, डीबग mके लिए, बनाने के लिए, bनिर्माण के लिए कल्पना कर सकता हूं । मेरे पास विश्व स्तर पर खुद कुछ हैं। यदि मैं टाइप करता mहूं, तो मैं उम्मीद करता हूं कि लॉन्च (मेरी शॉर्टकट), न कि कुछ स्थानीय स्क्रिप्ट mको निष्पादित करने के लिए कहा जाए।
gman

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

3

यहां तक ​​कि अगर आप हमेशा टाइप करते हैं, तो आप बहुत सावधानी बरतते हैं , यहां तक ​​कि अंत में, .आपके लिए डालते हुए PATH, अभी भी असुरक्षित है क्योंकि कुछ प्रोग्राम वर्तमान निर्देशिका को बदल देते हैं /tmp(जो कि विश्व लेखन योग्य है) और उन उपयोगिताओं को निष्पादित करने का भी प्रयास कर सकते हैं जो वास्तव में स्थापित नहीं हैं, इस प्रकार क्या में डिफ़ॉल्ट है /tmp। यदि ऐसा होता है, तो यह हमले का एक वेक्टर है।

यह भी ध्यान रखें वहाँ से बचने का ज्यादा दोष नहीं है कि .में PATH, क्योंकि ./(विशेष रूप से QWERTY, जहां लगातार कुंजी पर इन पात्रों कर रहे हैं और शिफ्ट की जरूरत नहीं है की तरह कीबोर्ड पर) टाइप करने के लिए और का उपयोग कर के लिए आसान है ./, यह भी पूरा होने में मदद मिलेगी इस प्रकार संभावित कीस्ट्रोक्स बचत अतं मै।

यदि आप वास्तव में वर्तमान निर्देशिका से कमांड टाइप करने में सक्षम होना चाहते हैं, तो आधुनिक गोले (जैसे zsh, इसके साथ command_not_found_handler) आपको सुरक्षित रूप से करने के लिए सुविधाएँ प्रदान कर सकते हैं, अर्थात, आप हैंडलर में अपनी इच्छित सभी सुरक्षा जांचों को जोड़ने की अनुमति दे सकते हैं, इससे पहले कमांड निष्पादित किया जाता है।

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