परिवेश क्षमता

क्षमताएं लिनक्स प्रक्रियाओं को विशेषाधिकारों के सबसेट को बनाए रखते हुए अधिकांश रूट-जैसे विशेषाधिकारों को छोड़ने की अनुमति देती हैं, जिन्हें उन्हें अपना कार्य करने की आवश्यकता होती है। क्षमताओं के मूल कार्यान्वयन ने फोर्क+निष्पादित प्रक्रियाओं के लिए इनहेरिट क्षमताओं को असंभव बना दिया जब तक कि निष्पादित की जा रही फ़ाइलों में फ़ाइल क्षमताओं को कॉन्फ़िगर नहीं किया गया था। फ़ाइल क्षमताएँ, बदले में, एक सुरक्षा जोखिम प्रस्तुत करती हैं क्योंकि फ़ाइल क्षमताओं वाली फ़ाइल को निष्पादित करने वाली कोई भी प्रक्रिया उन क्षमताओं को प्राप्त करने में सक्षम होगी।

परिवेश क्षमताएं init द्वारा लॉन्च की गई सिस्टम सेवाओं को उनकी .rc फ़ाइलों में क्षमताओं को कॉन्फ़िगर करने की अनुमति देती हैं, fs_config.c फ़ाइल में कॉन्फ़िगरेशन को विभाजित करने के बजाय कॉन्फ़िगरेशन को एक फ़ाइल में लाती हैं। इसका अर्थ है कि init द्वारा लॉन्च की गई किसी भी सेवा के लिए, आप उस सेवा के लिए क्षमताओं को कॉन्फ़िगर करने के लिए सेवा से संबद्ध .rc फ़ाइल का उपयोग कर सकते हैं।

परिवेश क्षमताएं init द्वारा शुरू की गई सेवाओं के लिए क्षमताओं को सेट करने के लिए पसंदीदा तंत्र हैं (यह विधि सेवा कॉन्फ़िगरेशन के सभी पहलुओं को एक .rc फ़ाइल में रखती है)। हम config.fs फ़ाइलों में कैप्स अनुभाग का उपयोग करके फ़ाइल सिस्टम क्षमताओं को कॉन्फ़िगर करने के बजाय परिवेश क्षमताओं का उपयोग करने की अनुशंसा करते हैं।

init द्वारा लॉन्च नहीं की गई सेवाओं के लिए क्षमताओं को सेट करते समय, fs_config.c का उपयोग करके फ़ाइल सिस्टम क्षमताओं को कॉन्फ़िगर करना जारी रखें।

परिवेश क्षमताओं को सक्षम करना

किसी दी गई सेवा के लिए परिवेश क्षमताओं को सक्षम करने के लिए, init में capabilities कीवर्ड का उपयोग करें। वर्तमान init भाषा विवरण के लिए, init README.md देखें।

उदाहरण के लिए, AOSP सेवा wificond के लिए परिवेश क्षमताओं को सक्षम करने के लिए, wificond सेवा के लिए .rc फ़ाइल उपयुक्त उपयोगकर्ता और समूह सेट करती है और capabilities कीवर्ड का उपयोग करके सेवा को निर्दिष्ट क्षमताएं प्रदान करती है:

service wificond /system/bin/wificond
    class main
    user wifi
    group wifi net_raw net_admin
    capabilities NET_RAW NET_ADMIN

संदर्भ कार्यान्वयन

संदर्भ कार्यान्वयन Android सामान्य कर्नेल है https://android.googlesource.com/kernel/common/

आवश्यक पैच

आवश्यक पैच को सभी प्रासंगिक Android सामान्य कर्नेल शाखाओं में वापस भेज दिया गया है।

मुख्य परिवेश क्षमता पैच https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 में बैकपोर्ट किया गया है:

एक छोटा सुरक्षा सुधार https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 में बैकपोर्ट किया गया है:

मान्यकरण

बायोनिक इकाई परीक्षणों में परिवेशी क्षमताओं के लिए इकाई परीक्षण शामिल हैं। इसके अलावा, किसी सेवा के लिए एंड्रॉइड init में "क्षमताओं" कीवर्ड का उपयोग करना, और फिर यह जांचना कि सेवा को अपेक्षित क्षमताएं मिलती हैं, इस सुविधा के रनटाइम परीक्षण की अनुमति देगी।