हालांकि यह प्रश्न पुराना है, यह अनुत्तरित (मेरे टैग) प्रश्नों के ऊपर दिखाई देता रहता है । तो मुझे लगता है कि मुझे इसका जवाब देना चाहिए :)
क्षमताओं के लिए 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
विशेषाधिकार छोड़ने के लिए इस लाइब्रेरी का उपयोग करता है।
- SELinux
capability
डोमेन को क्षमताओं को देने / अस्वीकार करने के लिए कक्षा का उपयोग करता है ।
यह निष्कर्ष निकालता है कि एंड्रॉइड अत्यधिक लिनक्स क्षमताओं पर निर्भर करता है, यह एक छोटी-सी सुविधा नहीं है।
सम्बंधित: