बैश एक दुभाषिया है; यह इनपुट स्वीकार करता है और जो कुछ भी करना चाहता है, करता है। यह निष्पादन योग्य बिट को ध्यान देने की आवश्यकता नहीं है। वास्तव में, बैश पोर्टेबल है, और ऑपरेटिंग सिस्टम और फाइल सिस्टम पर चल सकता है जिसमें निष्पादन योग्य बिट की कोई अवधारणा नहीं है।
निष्पादन योग्य बिट के बारे में क्या परवाह है ऑपरेटिंग सिस्टम कर्नेल है। जब लिनक्स कर्नेल एक प्रदर्शन करता है exec
, उदाहरण के लिए, यह जाँचता है कि फाइल सिस्टम एक noexec
विकल्प के साथ मुहिम नहीं करता है, यह प्रोग्राम फ़ाइल के निष्पादन योग्य बिट की जांच करता है, और सुरक्षा मॉड्यूल (जैसे SELinux या AppAmmor) द्वारा लगाए गए किसी भी आवश्यकताओं को लागू करता है।
ध्यान दें कि निष्पादन योग्य बिट एक विवेकाधीन प्रकार का नियंत्रण है। लिनक्स x86-64 सिस्टम पर, उदाहरण के लिए, आप स्पष्ट /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
रूप से दुभाषिया के रूप में लागू करके निष्पादन योग्य बिट के कर्नेल सत्यापन को बायपास कर सकते हैं :
cp /bin/ls /tmp/
chmod -x /tmp/ls
/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /tmp/ls
यह बाश में बश स्रोत कोड को सोर्स करने के लिए कुछ हद तक अनुरूप है, सिवाय इसके कि ld.so
दुभाषिया है, और जिस कोड को यह निष्पादित करता है वह ईएलएफ प्रारूप में मशीन कोड है।
chmod
आप एक ऑक्टल नंबर के साथ अनुमतियाँ सेट कर सकते हैं (`x सहित) कुछ सुराग देता है कि यह किस युग से आता है। मुझे आश्चर्य नहीं होगा अगर यह एक त्वरित और गंदे के रूप में शुरू हुआ "यह एक द्विआधारी फ़ाइल है जिसे आप निष्पादित कर सकते हैं" सूचक, उन दिनों से जब वह धमाकेदार आविष्कार किया गया था, लेकिन मेरे पास इसका कोई सबूत नहीं है