SELinux सिद्धांत

SELinux सिद्धांतों से परिचित होने के लिए इस पेज को देखें.

ज़रूरी ऐक्सेस कंट्रोल

बेहतर सुरक्षा के लिए Linux (SELinux), एक ज़रूरी ऐक्सेस कंट्रोल (MAC) सिस्टम है सबसे ज़रूरी है. MAC सिस्टम के तौर पर, यह Linux के जाने-पहचाने विवेकपूर्ण ऐक्सेस कंट्रोल (DAC) सिस्टम का इस्तेमाल किया जा सकता है. DAC सिस्टम में, एक सिद्धांत मालिकाना हक मौजूद है, जहां किसी खास संसाधन का मालिक ऐक्सेस को कंट्रोल करता है अनुमतियां दी हैं. आम तौर पर, यह समस्या होती है के लिए किया जा सकता है. हालांकि, MAC सिस्टम ऐक्सेस करने की सभी कोशिशों पर फ़ैसला लेने का अधिकार देती है.

SELinux को Linux सिक्योरिटी मॉड्यूल (LSM) के हिस्से के तौर पर लागू किया गया है फ़्रेमवर्क, जो कई कर्नेल ऑब्जेक्ट और संवेदनशील कार्रवाइयों की पहचान करता है परफ़ॉर्म किया. वह बिंदु जहां से ये कार्रवाइयां की जाएंगी किया जाता है, तो LSM हुक फ़ंक्शन का इस्तेमाल यह तय करने के लिए किया जाता है कि इस कार्रवाई की अनुमति, किसी ओपेक में सेव की गई जानकारी के हिसाब से दी जानी चाहिए सुरक्षा ऑब्जेक्ट. SELinux इन हुक के लिए एक इंप्लिमेंटेशन उपलब्ध कराता है और मैनेज करने में मदद करता है. यह अपनी नीति के साथ मिलकर काम करता है, और उसके ऐक्सेस के बारे में फ़ैसले लेते हैं.

अन्य Android सुरक्षा उपायों के साथ, Android का ऐक्सेस कंट्रोल यह नीति छेड़छाड़ की गई मशीनों और खाते. Android के हिसाब से और ज़रूरी ऐक्सेस जैसे टूल इस्तेमाल करना कंट्रोल से आपको ऐसा स्ट्रक्चर मिलता है जिससे यह पक्का किया जा सके कि आपका सॉफ़्टवेयर कम से कम खास अधिकारों वाला लेवल. यह हमलों के असर को कम करता है और गलत तरीके से प्रोसेस होने की संभावना.

Android 4.3 और उसके बाद के वर्शन में, SELinux एक ज़रूरी ऐक्सेस कंट्रोल (MAC) उपलब्ध कराता है परंपरागत हिसाब से ऐक्सेस कंट्रोल (डीएसी) पर काम करने की ज़रूरत नहीं है. इसके लिए उदाहरण के लिए, रॉ पर लिखने के लिए सॉफ़्टवेयर को आम तौर पर रूट उपयोगकर्ता खाते के रूप में चलना चाहिए ब्लॉक डिवाइस. पारंपरिक DAC-आधारित Linux एनवायरमेंट में, अगर रूट उपयोगकर्ता डेटा हैक हो जाता है और उपयोगकर्ता हर रॉ ब्लॉक डिवाइस पर डेटा सेव कर सकता है. हालांकि, SELinux का इस्तेमाल इन डिवाइसों को लेबल करने के लिए किया जा सकता है, ताकि प्रोसेस को रूट दिया जा सके संरक्षित करने के अधिकार के तहत, सिर्फ़ संबंधित नीति में बताए गए नियमों के तहत कार्रवाई की जा सकती है. इसमें इस तरह से, यह प्रक्रिया रॉ ब्लॉक डिवाइस.

इस्तेमाल के उदाहरण देखें SELinux के साथ खतरों और उनसे निपटने के तरीकों के और उदाहरण देखने के लिए.

नीति उल्लंघन ठीक करने के तरीके (एनफ़ोर्समेंट) के लेवल

SELinux को अलग-अलग मोड में लागू किया जा सकता है:

  • अनुमति है - SELinux सुरक्षा नीति लागू नहीं की जाती, सिर्फ़ लॉग किया जाता है.
  • लागू करना - सुरक्षा नीति लागू की गई और लॉग किया गया. इस सुविधा ने इतनी बार काम नहीं किया EPERM गड़बड़ियों के तौर पर दिखती है.

यह विकल्प बाइनरी है. इससे यह तय होता है कि आपकी नीति के तहत, सिर्फ़ आपको संभावित गड़बड़ियों का पता लगाने में मदद मिलती है. अनुमति देने की सुविधा, खास तौर पर इस समय काम आती है लागू करना.

टाइप, एट्रिब्यूट, और नियम

Android अपने लिए SELinux के टाइप एनफ़ोर्समेंट (TE) कॉम्पोनेंट का इस्तेमाल करके की नीति देखें. इसका मतलब यह है कि सभी ऑब्जेक्ट (जैसे कि फ़ाइल, प्रोसेस या सॉकेट) में type का इस्तेमाल करें. उदाहरण के लिए, डिफ़ॉल्ट रूप से कोई ऐप्लिकेशन untrusted_app टाइप होगा. प्रोसेस के लिए, इसका टाइप भी इसे उसके डोमेन के नाम से जाना जाता है. किसी एक टाइप के साथ एनोटेट करना संभव है कई एट्रिब्यूट. एट्रिब्यूट का इस्तेमाल कई तरह के एट्रिब्यूट के बारे में बताने के लिए किया जा सकता है ट्रैक करने में मदद मिलती है.

ऑब्जेक्ट को क्लास में मैप किया जाता है (जैसे, फ़ाइल, डायरेक्ट्री, सिम्बॉलिक लिंक, सॉकेट) और अलग-अलग तरह का ऐक्सेस हर क्लास के लिए, अनुमतियों से दिखाया जाता है. उदाहरण के लिए, क्लास के लिए open अनुमति मौजूद है file. इसके तहत, टाइप और एट्रिब्यूट नियमित तौर पर अपडेट किए जाते हैं. Android SELinux नीति, अनुमतियां और क्लास स्थिर रूप से तय की गई हैं और किसी नई Linux रिलीज़ में शायद ही कभी अपडेट किया जाता हो.

नीति का नियम इस तरह का होता है: allow source target:class permissions; कहां:

  • सोर्स - नियम के विषय का टाइप (या एट्रिब्यूट). ऐक्सेस का अनुरोध कौन कर रहा है?
  • टारगेट - ऑब्जेक्ट का टाइप या एट्रिब्यूट. किसके लिए ऐक्सेस का अनुरोध किया गया है?
  • क्लास - ऑब्जेक्ट का टाइप (जैसे कि फ़ाइल, सॉकेट) ऐक्सेस किया जा रहा है.
  • अनुमतियां - कार्रवाई (या कार्रवाइयों का सेट) (जैसे कि पढ़ना, लिखना) की जा रही है.

नियम का एक उदाहरण यह है:

allow untrusted_app app_data_file:file { read write };

इसमें बताया गया है कि ऐप्लिकेशन को लेबल की गई फ़ाइलों को पढ़ने और उनमें बदलाव करने की अनुमति है app_data_file. ऐप्लिकेशन के लिए अन्य प्रकार भी मौजूद हैं. इसके लिए इंस्टेंस, isolated_app का इस्तेमाल इन ऐप्लिकेशन की सेवाओं के लिए किया जाता है मेनिफ़ेस्ट में isolatedProcess=true शामिल हैं. दोहराने के बजाय दोनों तरह के नियम हैं, तो Android appdomain नाम की एट्रिब्यूट का इस्तेमाल करता है हर तरह के ऐप्लिकेशन के लिए:

# Associate the attribute appdomain with the type untrusted_app.
typeattribute untrusted_app, appdomain;

# Associate the attribute appdomain with the type isolated_app.
typeattribute isolated_app, appdomain;

allow appdomain app_data_file:file { read write };

जब कोई नियम लिखा जाता है जो किसी एट्रिब्यूट का नाम तय करता है, तो वह नाम सूची में, प्रॉपर्टी से जुड़े डोमेन या टाइप तक अपने-आप बड़ी हो जाती है एट्रिब्यूट की वैल्यू सबमिट करें. यहां कुछ अहम एट्रिब्यूट दिए गए हैं:

  • domain - सभी तरह की प्रोसेस से जुड़ी विशेषता,
  • file_type - सभी फ़ाइल टाइप से जुड़ा एट्रिब्यूट.

मैक्रो

खास तौर पर, फ़ाइल ऐक्सेस करने के लिए, आपके पास कई तरह की अनुमतियां होती हैं विचार करें. उदाहरण के लिए, को खोलने के लिए read अनुमति काफ़ी नहीं है फ़ाइल करें या stat को कॉल करें. नियम की परिभाषा को आसान बनाने के लिए, Android यह सबसे सामान्य मामलों को मैनेज करने के लिए मैक्रो का एक सेट उपलब्ध कराता है. उदाहरण के लिए, ऊपर दिए गए नियम के मुताबिक, open जैसी ज़रूरी अनुमतियां शामिल करने के लिए को इस तरह लिखा जा सकता है:

allow appdomain app_data_file:file rw_file_perms;

global_macros देखें और te_macros फ़ाइलों के बारे में ज़्यादा जानें. जहां भी हो सके मैक्रो का इस्तेमाल करें से संबंधित अनुमतियां दी हैं.

टाइप तय होने के बाद, उसे फ़ाइल या प्रोसेस से जोड़ा जाना चाहिए यह दिखाता है. SELinux को लागू करना देखें देखें. इस बारे में ज़्यादा जानकारी पाने के लिए नियमों के बारे में जानने के लिए, SELinux Notebook.

सुरक्षा का संदर्भ और कैटगरी

SELinux नीतियों या फ़ाइलों को लेबल करते समय (इसके ज़रिए) file_contexts या ls -Z में, आप यहां आ सकते हैं सुरक्षा के संदर्भ के मुताबिक (इसे लेबल भी कहा जाता है). इसके लिए उदाहरण: u:r:untrusted_app:s0:c15,c256,c513,c768. सुरक्षा से जुड़े कॉन्टेक्स्ट का फ़ॉर्मैट ऐसा होता है: user:role:type:sensitivity[:categories]. आम तौर पर, आप इसे अनदेखा कर सकते हैं इसमें से user, role, और sensitivity फ़ील्ड कॉन्टेक्स्ट (खास जानकारी देखें). type फ़ील्ड के बारे में पिछले सेक्शन में बताया गया है. categories इसका हिस्सा हैं मल्टी-लेवल सिक्योरिटी (एमएलएस) SELinux में समर्थन करते हैं. Android S में, कैटगरी का इस्तेमाल इन कामों के लिए किया जाता है:

  • कोई दूसरा ऐप्लिकेशन, ऐप्लिकेशन के डेटा को ऐक्सेस न कर सके,
  • ऐप्लिकेशन के डेटा को एक असली उपयोगकर्ता से दूसरे उपयोगकर्ता के डेटा से अलग करें.

विशेषता

Android, SELinux द्वारा प्रदान की गई सभी सुविधाओं का उपयोग नहीं करता है. पढ़ते समय इन बातों का ध्यान रखें:

  • एओएसपी की ज़्यादातर नीतियां, कर्नेल पॉलिसी लैंग्वेज का इस्तेमाल करके तय की जाती हैं. कॉमन इंटरमीडिएट लैंग्वेज (सीआईएल) का इस्तेमाल करने के कुछ अपवाद हैं.
  • SELinux उपयोगकर्ताओं का इस्तेमाल नहीं किया जाता है. सिर्फ़ यह उपयोगकर्ता तय किया गया है u. ज़रूरत पड़ने पर, सुरक्षा से जुड़े कॉन्टेक्स्ट के कैटगरी फ़ील्ड का इस्तेमाल करके असली उपयोगकर्ताओं को दिखाया जाता है.
  • SELinux की भूमिकाओं और भूमिका पर आधारित ऐक्सेस कंट्रोल (RBAC) का इस्तेमाल नहीं किया जाता. दो डिफ़ॉल्ट भूमिकाएं तय की जाती हैं और इनका इस्तेमाल किया जाता है: r विषयों के लिए और ऑब्जेक्ट के लिए object_r.
  • SELinux संवेदनशीलता का इस्तेमाल नहीं किया जाता है. s0 की डिफ़ॉल्ट संवेदनशीलता हमेशा सेट रहती है.
  • SELinux बूलियन्स का इस्तेमाल नहीं किया जाता है. डिवाइस के लिए नीति बनाने के बाद, डिवाइस की स्थिति पर निर्भर नहीं करता है. इससे, नीतियों को ऑडिट और डीबग करना.