क्या कोई Google उपकरण हैं जो अपने डिफ़ॉल्ट कर्नेल में क्षमताओं का समर्थन करते हैं?


14

अगर मैं /systemएक Nexus डिवाइस को सिस्टम रहित रूट ( विभाजन के लिए कोई संशोधन नहीं करता ), तो क्या मैं मूल कर्नेल बाइनरी को बदले बिना निष्पादकों पर क्षमताओं को सेट करने में सक्षम होगा ?

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

समस्या यह है, मैं इस तरह के उपकरण का मालिक नहीं हूं। इसलिए मैं नहीं बता सकता कि यह किसी पर काम करेगा Nexus 5X Nexus 6P Nexus 9 Pixel C


2
मैं भी एक नेक्सस एमुलेटर खोजने में असमर्थ था ...
user2284570

मुझे इसमें संदेह है ... चूँकि Android बायोनिक लिबास का उपयोग करता है न कि मानक GNU लिबास (ग्लिब्क) लाइब्रेरी का, यह पोसिक्स कंप्लेंट के भी करीब नहीं है। आप Bionic के बजाय CrystaX NDK जैसे एक अलग libc के साथ अपने स्वयं के कर्नेल को संकलित करने में सक्षम हो सकते हैं, लेकिन मुझे नहीं पता कि क्या वे विशेषताएँ उस में भी हैं।
ऐसजवेलिन

@acejavelin: उपयोगकर्ता भूमि का हिस्सा केवल क्षमताओं वाले विस्तारित विशेषताओं को स्थापित करने के लिए आवश्यक है। बाकी सब कर्नेल पक्ष है। मैंने अभी देखा कि /system/bin/pingकमांड मेरे असली सैमसंग डिवाइस पर सेटिउड नहीं है, सुझाव दे रहा है CAP_NET_RAW। हालाँकि, मैं एक असली डिवाइस को रूट नहीं करूँगा और मुझे नहीं पता कि मैं कौन से टूल का उपयोग कर सकता हूँ ताकि संबंधित फ़ीचर को देख सकूँ, इसलिए मैं जाँच नहीं कर सकता।
user2284570

आप Nexus डिवाइस को रूट क्यों नहीं करेंगे? यह उसके लिए है और आपकी वारंटी को शून्य नहीं करता है। यह किसी भी नेक्सस डिवाइस को पुनर्स्थापित करने के लिए बहुत सरल है, यह डिफ़ॉल्ट रूप से, अनारोटेड और लॉक स्टेट है, डिवाइस मूल रूप से अटूट है।
ऐसजेलिन

@acejavelin: मेरे पास एक नेक्सस डिवाइस नहीं है ... मेरा उद्देश्य सुरक्षा अनुसंधान है और Google केवल अपने स्वयं के उपकरणों के लिए इनाम देता है। इसलिए मुझे यह जानने की जरूरत है कि क्या क्षमताओं में से किसी एक डिवाइस का कर्नेल xattr का उपयोग करके समर्थन करता है। मैं अपने गैलेक्सी टैब पर जो देख रहा हूं वह शायद केवल सैमसंग से संबंधित है। यदि मैं अपने प्रश्न में निहित नहीं करता हूं तो यह अस्पष्ट के रूप में बंद हो सकता है
user2284570

जवाबों:


1

हालांकि यह प्रश्न पुराना है, यह अनुत्तरित (मेरे टैग) प्रश्नों के ऊपर दिखाई देता रहता है । तो मुझे लगता है कि मुझे इसका जवाब देना चाहिए :)

क्षमताओं के लिए AOSP'S समर्थन:

प्रश्न विशेष रूप से Google उपकरणों के बारे में है, मैंने कभी भी Google डिवाइस का उपयोग नहीं किया है। हालाँकि जो मैं निश्चित रूप से कह सकता हूं वह यह है कि लिनक्स (प्रक्रिया) क्षमताओं को अधिकांश उपकरणों पर सक्षम किया जाना चाहिए (यदि सभी नहीं) Android 1.6 के रूप में कम चल रहा है। संदर्भ में पाया जाता है initऔर system_server, दोनों AOSP की बहुत प्राथमिक घटकों। उदाहरण के लिए, एंड्रॉइड 4.2 में, installdएक और मुख्य घटक - गिरा क्षमताओं के साथ चलने के लिए बनाया गया था।

फ़ाइल क्षमताओं प्रमुख में से एक थे , Android 4.3 में सुरक्षा संवर्द्धन जिसे निकाल set-uid/ set-gidजैसे बाइनरी से run-as, उन पर फ़ाइल क्षमताओं की स्थापना। इससे एंड्रॉइड की रूटिंग यात्रा में क्रांतिकारी परिवर्तन हुए।

एंड्रॉइड 8 में एम्बिएंट क्षमताओं के लिए समर्थन जोड़ा गया था जो फ़ाइल क्षमताओं के उपयोग को हतोत्साहित करता है:

फ़ाइल क्षमताएं, बदले में, एक सुरक्षा जोखिम प्रस्तुत करती हैं क्योंकि फ़ाइल क्षमताओं के साथ किसी फ़ाइल को निष्पादित करने की प्रक्रिया उन क्षमताओं को प्राप्त करने में सक्षम होगी।

कई initसेवाएं उन पर निर्भर करती हैं storaged, जैसे मेरे स्वयं के sshdऔर dnscrypt-proxyसेवाएं भी।

राजधानी के लिए राजधानी का समर्थन:

कर्नेल भाग में आ रहा है, क्षमताओं के बिना कर्नेल का निर्माण वैकल्पिक नहीं है:

कर्नेल 2.5.27 से कर्नेल 2.6.26 तक, क्षमताएं एक वैकल्पिक कर्नेल घटक थीं, और CONFIG_SECURITY_CAPABILITIES कर्नेल कॉन्फ़िगरेशन विकल्प के माध्यम से सक्षम / अक्षम की जा सकती हैं ।

तथा:

लिनक्स 2.6.33 से पहले कर्नेल में, फ़ाइल क्षमताएं CONFIG_SECURITY_FILE_CAPABILITIES विकल्प के माध्यम से एक वैकल्पिक सुविधा कॉन्फ़िगर करने योग्य थीं । लिनक्स 2.6.33 के बाद से, कॉन्फ़िगरेशन विकल्प हटा दिया गया है और फ़ाइल क्षमताएं हमेशा कर्नेल का हिस्सा होती हैं।

सबसे पुराने एंड्रॉयड खजाने पर आम कर्नेल संस्करण 2.6.39 जो है भी शामिल है भी फ़ाइल क्षमताओं के लिए समर्थन करते हैं।

कर्नेल की ओर से फाइलसिस्टम क्षमताओं के लिए समर्थन कुछ ओईएम से विलंबित होना चाहिए था, लेकिन उन्हें स्विच करना पड़ा, क्योंकि अन्यथा कार्यशीलता टूट जाती। उदाहरण के लिए surfaceflinger(एंड्रॉइड सरफेस कंपोजर ) एंड्रॉइड 7.1 के बाद से फ़ाइल क्षमताओं के बिना काम नहीं करेगा।

मेनलाइन लिनक्स कर्नेल 4.3 परिवेश (प्रक्रिया) क्षमताओं, के लिए Sep'15 में में समझौता किया गया था बैकपोर्टेड Android के लिए 2016 में 3.18 और 4.1 कर्नेल तो वे आवश्यक रूप से गिरी का एक हिस्सा हैं।

निष्कर्ष:

लिनक्स डिस्ट्रोस पर, बहुत कम प्रोग्राम लिनक्स क्षमताओं का उपयोग करते हैं। हालांकि है pam_cap, ज्यादातर (या सभी?) Distros अभी भी उपयोग set-uidपर su, sudo, ping, mount, passwdऔर इतने पर। लेकिन एंड्रॉइड क्षमताओं पर फ्रेमवर्क और कोर सेवाओं में गहराई से एकीकृत हैं। उन्हें हटाने के लिए सैकड़ों संपादन की आवश्यकता होगी या एओएसपी और कर्नेल स्रोत में हजारों लाइनें हो सकती हैं। इसका कोई मतलब नहीं है कि एक ओईएम (विशेष रूप से Google, जिसने एंड्रॉइड के लिए एओएसपी और संशोधित लिनक्स कर्नेल विकसित किया है) इस फ्री-कॉस्ट सुरक्षा सुविधा का उपयोग नहीं करता है जब यह एंड्रॉइड कर्नेल में आसानी से उपलब्ध है। यह एक शुद्ध ओएस से संबंधित सुविधा है, किसी भी अतिरिक्त हार्डवेयर समर्थन की मांग नहीं करता है। तो किसी भी निर्माता के किसी भी फोन में क्षमताओं का समर्थन होना चाहिए।


प्रशन:

क्या मैं मूल कर्नेल बाइनरी को बदलने के बिना निष्पादकों पर क्षमताओं को स्थापित करने में सक्षम हो सकता हूं?

हां, आपको होना चाहिए।

आवश्यक चीजें कैप सेट करने के लिए उपकरण हैं ...

मैं उपयोग कर रहा है capsh, getcap, setcap, getpcapsसे libcapऔर netcap, pscapसे libcap-ngबिना किसी समस्या के। लेकिन मैं एंबिएंट क्षमताओं को पसंद करता हूं, जिन्हें कॉन्फ़िगर करना आसान है और फाइल क्षमताओं के मामले में विस्तारित विशेषताओं जैसी किसी भी फाइल सिस्टम सुविधाओं पर निर्भर नहीं हैं । तुम भी उपयोग कर सकते हैं listxattr, getxattr, setxattrऔर removexattrसे उपकरण xattr_syscall_wrapperहेरफेर करने के लिए security.capabilityया किसी अन्य XATTR सीधे।

अपनी टिप्पणी से:

मैंने सिर्फ सुझाव दिया कि मेरे असली सैमसंग डिवाइस पर /system/bin/pingकमांड नहीं setuidहै, सुझाव दे रहा हैCAP_NET_RAW

Android का पिंग न तो है set-uidऔर न ही है CAP_NET_RAW। यह एक विशेष गैर-रॉ सॉकेट बनाता है IPPROTO_ICMPजो - इसके विपरीत IPPROTO_RAW- किसी भी विशेषाधिकार की आवश्यकता नहीं है।


अन्य संदर्भ:

ऊपर दिए गए 10+ संदर्भों के अलावा, यहाँ AOSP कोड के कुछ अन्य भाग हैं जो लिनक्स क्षमताओं का समर्थन और उपयोग कर रहे हैं:

  • मुख्य घटक: बायोनिक libc, init, trusty(ओएस)
  • बाहरी घटकों: libcap ,libcap-ng
  • डेमॉन / सेवाओं: zygote (काँटेदार ऐप्स और system_server), hostapd, wpa_supplicant, dnsmasq, logd, netd( NetLinkप्रबंधक, निजी DNS), debuggerd(परीक्षण), sdcardडेमॉन, performanced, incidentd, mtpd, traced_probes(perfetto), racoon(IPSec), wificondसहित एचएएल डेमॉन के एक नंबर rild
  • निष्पादन योग्य: reboot (init), dumpstate, tcpdump, strace, iputils( ping, tracerouteआदि)
  • मिनीजेल: एक समर्पित सैंडबॉक्सिंग टूल और लाइब्रेरी जो क्षमताओं के आसपास घूमती है। adbdविशेषाधिकार छोड़ने के लिए इस लाइब्रेरी का उपयोग करता है।
  • SELinuxcapability डोमेन को क्षमताओं को देने / अस्वीकार करने के लिए कक्षा का उपयोग करता है ।

यह निष्कर्ष निकालता है कि एंड्रॉइड अत्यधिक लिनक्स क्षमताओं पर निर्भर करता है, यह एक छोटी-सी सुविधा नहीं है।


सम्बंधित:


कुछ भी जवाब नहीं देता है। आपके द्वारा बताई गई हर बात ज्ञात है। सवाल का मुद्दा यह है कि इसका उपयोग बहुत कम is किया जाता है, Google ब्रांडेड उपकरणों में शामिल है।
user2284570
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.