क्या इंटरप्रेटर बाइनरी की सेटिंग के बिना स्क्रिप्ट में क्षमताओं का उपयोग किया जा सकता है?


14

अभी मैं cap_net_bind_service MY_USERNAME/etc/security/capability.conf में उपयोग कर रहा हूं ।
अब मैं सिर्फ सेट करने की जरूरत है cap_net_bind_service+iमेरी पसंदीदा पटकथा भाषा का दुभाषिया पर जोड़ने के लिए सक्षम होने के लिए CAP_NET_BIND_SERVICEकरने के लिए प्रभावी libcap [-ng] के माध्यम से सेट।

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

जवाबों:


4

आमतौर पर, क्षमताओं को बच्चों को विरासत में मिला है। जैसा कि मैनपेज में कहा गया है :

कांटा (2) के माध्यम से बनाया गया एक बच्चा अपने माता-पिता की क्षमता सेट की प्रतियां विरासत में मिला है।

स्क्रिप्ट के साथ मुद्दा यह है कि वे सीधे निष्पादन योग्य नहीं हैं। कर्नेल चेक की सूची से गुजरता है (कर्नेल कोड fs / binfmt _ *। C पर स्थित है)। उनमें से एक "Binfmt_script.c" है, जो एक शेबंग के लिए पहली पंक्ति की जांच करता है, फिर तर्क के रूप में आपकी स्क्रिप्ट के साथ वास्तविक दुभाषिया (शेबंग में एक) को कॉल करें। जैसे, मानक / आम दुभाषिया कहा जाता है, और बस आपकी स्क्रिप्ट को एक तर्क के रूप में पढ़ता है।

इसका मतलब आपको स्क्रिप्ट पर नहीं, बल्कि दुभाषिया पर क्षमता निर्धारित करनी होगी। यही बात suidबिट्स, और अन्य विशेष झंडों पर लागू होती है ।

तो या तो आप अपने दुभाषिया की एक प्रति बनाएँ, उस पर अपनी इच्छित क्षमताओं को सेट करें (यह भी जाँच लें कि कोई भी इसे चामोद / चाउन के माध्यम से एक्सेस नहीं कर सकता), और इस प्रतिलिपि दुभाषिया को अपने शेबंग में बुलाएँ। आप अपनी स्क्रिप्ट में सेट किए गए तर्क भी कर सकते हैं।


ठीक है, देखा नहीं था कि सवाल 2 साल पहले पूछा गया था, लेकिन कभी बंद नहीं हुआ ... इसके अलावा, unix.stackexchange.com/questions/87348/… के
Adrien M.

लेकिन केवल i(विरासत), पिछले निष्पादन हो जाता है। और iअपने आप कुछ भी नहीं करता है, यह केवल तभी काम करता है जब फ़ाइल में मेल होता है i, और मैं e(प्रभावी) बिट (जब तक स्क्रिप्ट / निष्पादन योग्य सेट नहीं होता है)। यह और भी जटिल है कि सेतु, यह एक स्क्रिप्ट प्रभाव नहीं है।
Ctrl-Alt-delor

1
मुझे लगा कि शेल्फ़ को कर्नेल ने पढ़ा है न कि शेल? ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/… )
फिलिप कूलिंग

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