यही वजह है कि । डिफ़ॉल्ट रूप से पथ में नहीं है?


63

पिछले कुछ वर्षों में UNIX जैसी प्रणालियों (सबसे अधिक प्रासंगिक रूप से मेरे लिए, Linux), मैंने देखा है कि .(वर्तमान dir) $PATHडिफ़ॉल्ट रूप से कभी नहीं होता है। ऐसा क्यों है?

मुझे याद है कि सालों पहले पढ़ना यह एक सुरक्षा समस्या थी, लेकिन मैंने जो लेख पढ़ा वह यह नहीं समझाता कि वास्तव में समस्या क्या थी। क्या ऐसा इसलिए है क्योंकि कोई व्यक्ति किसी दुर्भावनापूर्ण संस्करण को किसी निर्देशिका में छोड़ सकता है lsया नहीं cp, और मैं यह महसूस करूंगा कि यह वहां नहीं था।


6
यह इंटरैक्टिव उपयोगकर्ता सुरक्षा के लिए उतना नहीं है जितना कि अन्य कार्यक्रमों (और स्क्रिप्ट) के लिए है जो अन्य प्रोग्राम चलाते हैं। यहां तक ​​कि कुछ जानकार उपयोगकर्ताओं को यह जानना पसंद है कि जब वे एक यादृच्छिक निर्देशिका में होते हैं, तो यह lsहोगा /usr/bin/lsऔर ./lsनहीं। वहाँ भी बाधा है अगर आप जानते हैं कि कैसे .अपने रास्ते के अंत में जोड़ना है, तो आपको शायद कुछ पता है कि आप क्या कर रहे हैं। रूट में कभी भी .पथ नहीं होना चाहिए , कई सिस्टम रूट को लॉग इन नहीं होने देते हैं।
msw

जवाबों:


41

आपने अपने प्रश्न का सही उत्तर दिया, यही कारण है कि डॉट रास्ते में नहीं है:
बचकाने वायरस या ईमानदार गलतियों से बचाने के लिए।

बेशक, यह एक बहुत ही लंगड़ा और बेकार एंटी-वायरस उपाय है, और कुछ भी आपको अपने आप को डॉट जोड़ने से नहीं रोकता है।


13
हालाँकि, यह हास्यास्पद है, कि आप इससे सुरक्षित हैं, लेकिन -rfनिर्देशिका में एक अकेली फ़ाइल से नहीं ( rm *दिलचस्प बनाता है) ;-)
जॉय

यूनिक्स उत्तर: आपने -rfपहली बार एक फाइल का नाम क्यों रखा? ;)
एमएसडब्ल्यू

2
@msw: एक और यूनिक्स का जवाब है कि सामान्य रूप से पथ में डॉट को व्यवस्थापक खातों के लिए फ़ॉर्वर्ड किया जाता है, लेकिन गैर-व्यवस्थापक के लिए ठीक है।
हैरी

यदि वर्तमान पथ अंतिम पथ था, तो जोखिम को बहुत कम किया जा सकता है , ताकि कार्यक्रमों के लिए सभी सामान्य स्थानों को पहले चेक किया जाए ?
जॉन जेड

1
@ जॉन: वास्तव में नहीं। लेकिन अगर आपका कंप्यूटर वायरस से साफ है तो जोखिम काफी कम है। और अगर कंप्यूटर संक्रमित है, तो आधुनिक वायरस के साथ रास्ता आपकी चिंताओं का कम से कम है।

4

हाँ। यदि आप "डालते हैं।" पथ में, आप अपनी वर्तमान निर्देशिका में फ़ाइलों के लिए बहुत सारी कमांड कॉल भेजना चाहेंगे।

यदि यह अंतिम था, तब भी पायलट त्रुटि है। उदाहरण के लिए, सोलारिस 10 में "शीर्ष" का अभाव है। मैं दिन भर अपने सिस्टम पर "टॉप" टाइप करता हूं, क्योंकि मुझे लगता है कि मैं ऐसे सिस्टम पर हूं, जिसमें "टॉप" है।


1

क्षमा करें, मैं इसे चयनित उत्तर के लिए एक टिप्पणी के रूप में पूछना चाहता हूं, लेकिन मेरे पास अभी तक सुपरसुसर पर कोई प्रतिनिधि नहीं है।

सुरक्षा उत्तर समझ में आता है, लेकिन अगर आप "" डालते हैं। आपके PATH में अंतिम चीज़ के रूप में, वर्तमान निर्देशिका में शेल को अंतिम रूप से नहीं देखना चाहिए क्योंकि यह निष्पादन योग्य के लिए खोज करता है, और इस प्रकार सुरक्षा जोखिम को कम करता है? यदि इसने $ PATH को क्रम में खोजा, तो इसे मिलने से पहले / बिन / ls मिलेगा।

तो, मेरे लिए कितना असुरक्षित है "।" मेरे $ PATH पर्यावरण चर के अंत में?

यह मेरे सुझाव के अनुसार काम करता है। यहाँ मैंने परीक्षण किया है:

सबसे पहले, "जोड़ें।" अपने पथ पर्यावरण चर का अंत करने के लिए।

फिर, निम्न फ़ाइल को कुछ निर्देशिका में डालें, जैसे ~ / dir1 / dir2 / test_which.rb:

#!/your/path/to/ruby

puts "this file is from the current directory"

और इस फाइल को /usr/bin/test_which.rb पर डालें

#!/your/path/to/ruby

puts "this file is at /usr/bin/test_which.rb"

फ़ाइलों को chmod + x के लिए सुनिश्चित करें ताकि वे निष्पादन योग्य हों।

अब, यदि आप निर्देशिका को ~ / dir1 / dir2 में बदलते हैं, और test_which.rb निष्पादित करते हैं, तो आपको आउटपुट मिलेगा

this file is at /usr/bin/test_which.rb

वास्तव में, यदि आप कहीं से "कौन सा test_which.rb" चलाते हैं, तो यह रिपोर्ट करना चाहिए

/usr/bin/test_which.rb

आप अभी भी टाइप करके मौजूदा डायरेक्टरी में फाइल निष्पादित कर सकते हैं:

./test_which.rb

8
किसी ने कभी इस तरह के रूप लिखने में कोई त्रुटि, dcया slया sduoएक खोल में, और द्वारा "कमांड नहीं मिला" बचा लिया गया था। कभी।
डैनियल बेक

1
डैनियल के साथ सहमत: आपके पास एक गलत स्क्रिप्ट हो सकती है जिसका नाम एक गलत वर्तनी वाली कमांड है। इस उत्तर को भी देखें ।
इग्निस

@DanielBeck आपको मिस्टीपिंग के लिए उपनाम का उपयोग करने का प्रयास करना चाहिए। मेरे पास ls(रंग उत्पादन और अधिक) के लिए मेरा पसंदीदा कॉन्फ़िगरेशन है, lजो पूरी तरह से टाइपो के साथ फैलता है।
कार्ल दामगार्ड ने असामुसेन जूल

1
@ कर्लडैमगार्डएस्सुमेन केएल
डेवार्डे

मैं व्यक्तिगत रूप से नहीं जोड़ता हूं। ' मेरे रास्ते पर। यह लिखना मुश्किल नहीं है। स्थानीय डायर में जो भी करना चाहते हैं। इसने मुझे अप्रत्याशित चीजों को लेने से कुछ समय बचाया है। टमाटर टमाटर।
माइकल मैथ्यूज

1

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

विशेष रूप से यह स्क्रिप्ट लिखने के दौरान सही होता है जो उपयोगकर्ता का पथ परिवर्तनशील रखता है। एक अच्छी लिखित स्क्रिप्ट को सभी कोने के मामलों (जैसे उनमें रिक्त स्थान के साथ फ़ाइलनाम या '-' से शुरू) से निपटना चाहिए। लेकिन यह एक सिस्टम कमांड के बजाय मौजूदा निर्देशिका में एक फ़ाइल को रोकने के लिए अव्यावहारिक है ...

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