लिनक्स कर्नेल का अगला संस्करण, 7.2, openat2 सिस्टम कॉल के लिए OPENAT2_REGULAR फ्लैग शामिल करेगा। यह कार्यक्षमता प्रोग्रामों को यह सुनिश्चित करने की अनुमति देती है कि वे केवल नियमित फ़ाइलें खोलें, जिससे उन्हें /dev/null या FIFO जैसे विशेष उपकरणों पर रीडायरेक्ट होने से रोका जा सके, जो अप्रत्याशित ब्लॉकिंग व्यवहार और सुरक्षा कमजोरियों का कारण बन सकते हैं।
कर्नेल में OPENAT2_REGULAR कैसे काम करता है 🛡️
OPENAT2_REGULAR फ्लैग openat2 कॉल में एक फिल्टर के रूप में कार्य करता है। जब यह सक्रिय होता है, तो कर्नेल खोलने की अनुमति देने से पहले जांचता है कि लक्ष्य फ़ाइल नियमित प्रकार (S_IFREG) की है या नहीं। यदि फ़ाइल एक ब्लॉक डिवाइस, FIFO या सॉकेट है, तो ऑपरेशन EISDIR या EPERM त्रुटि के साथ विफल हो जाता है। यह जांच प्रतीकात्मक लिंक को हल करने के बाद होती है, जिससे उन हमलों का रास्ता बंद हो जाता है जो विशेष उपकरणों को इंगित करने के लिए लिंक का उपयोग करते हैं। इस कार्यान्वयन का अनुरोध UAPI समूह द्वारा उन अनुप्रयोगों की सुरक्षा के लिए किया गया था जो उपयोगकर्ता फ़ाइलों को संसाधित करते हैं।
/dev/null और शरारती FIFO से छुटकारा 😅
अब तक, एक भरोसेमंद प्रोग्राम एक फ़ाइल खोल सकता था और पा सकता था कि वह एक FIFO है जो उसे हमेशा के लिए डेटा की प्रतीक्षा में छोड़ देता है, या इससे भी बदतर, एक /dev/null जो बिना कुछ कहे उसके सभी आउटपुट को निगल जाता है। OPENAT2_REGULAR के साथ, ये डर खत्म हो जाते हैं: यदि फ़ाइल नियमित नहीं है, तो कर्नेल 'नहीं' कहता है और डेवलपर डिबगिंग के घंटों से बच जाता है। यह डिस्क के प्रवेश द्वार पर एक फिल्टर लगाने जैसा है ताकि केवल वास्तविक फ़ाइलें ही अंदर आ सकें, कार्निवल के भेष में नहीं।