mktemp(1)
आदमी पेज यह काफी अच्छी तरह से बताते हैं::
परंपरागत रूप से, कई शेल स्क्रिप्ट प्रोग्राम का नाम साथ पीआईडी एक प्रत्यय और उपयोग के रूप में लेने के लिए ऐसा नहीं है कि फ़ाइल का नाम आउटपुट एक अस्थायी फ़ाइल नाम के रूप में। नामकरण योजना के इस प्रकार अनुमानित है और यह दौड़ने की दौड़ की स्थिति है जो हमलावर के लिए जीतने में आसान है। एक सुरक्षित, हालांकि अभी भी कम, दृष्टिकोण एक ही नामकरण योजना का उपयोग कर अस्थायी निर्देशिका बनाना है। जबकि यह किसी को यह गारंटी देने की अनुमति देता है कि एक अस्थायी फ़ाइल नहीं बदली जाएगी, यह अभी भी सेवा हमले की सरल अस्वीकार करने की अनुमति देती है। के लिए इन कारणों से यह सुझाव दिया जाता है कि इसके बजाय mktemp का उपयोग किया जाए।
एक स्क्रिप्ट में, मैं की तरह
mydir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
mktemp कुछ जो एक अस्थायी निर्देशिका मैं में काम कर सकते हैं, और जिसमें मैं सुरक्षित रूप से वास्तविक फ़ाइलें कुछ पठनीय और उपयोगी नाम कर सकते हैं बनाता आह्वान।
mktemp
मानक नहीं है, लेकिन यह कई प्लेटफ़ॉर्म पर मौजूद है। "एक्स" आमतौर पर कुछ यादृच्छिकता में परिवर्तित हो जाएगा, और शायद अधिक यादृच्छिक होगा; हालांकि, कुछ सिस्टम (बिजीबॉक्स राख, एक के लिए) दूसरों की तुलना में अधिक महत्वपूर्ण इस अनियमितता की सीमा
वैसे, अस्थायी फ़ाइलों की सुरक्षित निर्माण अधिक के लिए महत्वपूर्ण है की तुलना में सिर्फ पटकथा शैल।यही कारण है कि अजगर tempfile है पर्ल File::Temp है है,, माणिक Tempfile है, आदि ...
अस्थायी रूप से फ़ाइलों का उपयोग न करें। इसके बजाए अस्थायी रूप से निर्देशिका का प्रयोग करें। और mktemp का उपयोग न करें। यहां देखें क्यों: http://www.codeproject.com/Articles/15956/ सुरक्षा- टिप्स-for- समकालीन- फ़ाइल- उपयोग-in- आवेदन – ceving
@ceving यह आलेख बस गलत है, कम से कम जब शेल कमांड पर लागू होता है mktemp (mktemp लाइब्रेरी कॉल के विपरीत)। चूंकि mktemp फ़ाइल को एक प्रतिबंधक उमास्क के साथ बनाता है, हमलावर केवल तभी काम करता है जब हमलावर हमलावर के समान खाते के तहत काम कर रहा हो ... जिस स्थिति में गेम पहले से ही खो गया है। शेल-स्क्रिप्टिंग दुनिया में सर्वोत्तम प्रथाओं के लिए, http://mywiki.wooledge.org/BashFAQ/062 –
देखें, आप सिस्टम पर 'tempfile (1)' का भी उपयोग कर सकते हैं। –