उपयोगकर्ता / समूह आईडी जानकारी Android पर कहाँ संग्रहीत है और मैं इसकी व्याख्या कैसे करूँ?


15

मैं काफी समय से सोच रहा था; एंड्रॉइड यह उपयोगकर्ता और समूह आईडी जानकारी कहां संग्रहीत करता है?

उदाहरण के लिए, मानक लिनक्स पर, उपयोगकर्ता और समूह जानकारी में संग्रहित है /etc/passwdऔर /etc/groupक्रमश:। जब आप किसी समूह में किसी उपयोगकर्ता को जोड़ते हैं, तो उसका उपयोगकर्ता नाम / यूआईडी उस समूह के उपयोगकर्ताओं की सूची में जुड़ जाता है, उदाहरण के लिए मेरा ऑडियो समूह प्रविष्टि /etc/groupइस तरह दिखता है:

audio:x:29:pulse,edge-case

जहाँ पल्सएडियो डैमन के यूड में पल्स को मैप किया जाता है और मेरे लिनक्स बॉक्स पर एज-केस को मेरे यूआईडी (1000) में मैप किया जाता है।

जैसा कि मैं इसे समझता हूं, प्रत्येक ऐप जो एंड्रॉइड पर इंस्टॉल हो जाता है, वह स्वयं यूआईडी और जीआईडी ​​हो जाता है और यह ऐप के "सैंडबॉक्सिंग" का आधार है जो एंड्रॉइड पर होता है क्योंकि वे सभी अपनी प्रक्रिया में चलते हैं और दूसरे के डेटा तक नहीं पहुंच सकते हैं किसी अन्य ऐप के स्वामित्व वाली प्रक्रिया या फ़ाइलें जब तक कि ऐप प्रोग्रामर द्वारा बनाई गई मैनिफ़ेस्ट फ़ाइल में घोषणा नहीं होती है जो यह बताती है कि अन्य ऐप को क्या जानकारी साझा करनी है और क्या नहीं। यह भी है कि ऐप्प कैसे प्राप्त करते हैं या स्थापना के दौरान नेटवर्किंग सेवाओं तक पहुँच प्राप्त करने का अनुरोध करते हैं, ऐसा इंटरनेट ग्रुप में जोड़ने का अनुरोध करते हुए या कुछ इस तरह से करते हैं, मुझे नेट नेट समूह के नाम पर उद्धृत नहीं करते हैं, यह INET की तरह हो सकता है या INET6, किसी भी तरह से मुझे पता है कि नेटवर्क एक्सेस के कई स्तर हैं जो एंड्रॉइड पर इस तंत्र के माध्यम से किसी एप्लिकेशन को दिए जा सकते हैं।

मेरा प्रश्न यह है कि यह जानकारी Android में कहाँ संग्रहीत है?

इसके अलावा, क्या इसे संशोधित करना संभव है?

मैं इसके साथ एक शानदार स्टैक को एकीकृत करना चाहता हूं और इसके भीतर डेटा मेरी /etc/{passwd,group}फाइलों में है, मुझ पर विश्वास करो, वे मेरे फोन पर मौजूद हैं, मेरे पास बहुत से अन्य अच्छाइयों के साथ स्थापित है।

अद्यतन: अधिक खोज कर रहा है और यह वही हो सकता है जिसकी मुझे तलाश है।

मुझे थोड़ा गहरा खुदाई करने और यह सुनिश्चित करने की आवश्यकता होगी कि यह वह सब कुछ है जिसकी मुझे तलाश है।

अपडेट: (5:40 जून 27 2014)

चूंकि कोई सोचता है कि मुझे नहीं पता कि मैं क्या कर रहा हूं या इसके बारे में बात कर रहा हूं, मुझे स्पष्ट करें;

एंड्रॉइड पर उपयोगकर्ता यूआईडी 100000 के साथ ऑफसेट होते हैं और ऐप यूआईडी 10000 के साथ ऑफसेट होते हैं जब उपयोगकर्ता नंबर _ एप नंबर पर मैप किया जाता है, इसलिए जब कोई पीएस u0_a10 जैसा कुछ दिखाता है, जिसका अर्थ है कि यूआईडी 100000 वाला उपयोगकर्ता यूआईडी 10010 के साथ ऐप चला रहा है,

मैंने सिस्टम / कोर से यूआईडी और उपयोगकर्ता / डेमॉन नामों को खींच लिया है / इसमें / निजी / android_filesystem_config.h शामिल हैं और उन लोगों को मेरे / etc / passwd और / etc / group फ़ाइलों को अपडेट करने के लिए उपयोग किया है (उदाहरण के लिए मेरे एंड्रॉइड बॉक्स पर), उदाहरण के लिए my / etc / passwd फ़ाइल (मेरे Android बॉक्स पर) इस तरह दिखाई देती है:

....
brainard:x:100002:100002:Professor Brainard,0420,,:/home/brainard
:/bin/bash
radio:x:1001:1001::/data/radio:/bin/false
bluetooth:x:1002:1002::/data/bluetooth:/bin/false
graphics:x:1003:1003::/home/graphics:/bin/false
input:x:1004:1004::/home/input:/bin/false
camera:x:1006:1006::/home/camera:/bin/false
log:x:1007:1007::/home/log:/bin/false
compass:x:1008:1008::/home/compass:/bin/false
mount:x:1009:1009::/home/mount:/bin/false
wifi:x:1010:1010::/home/wifi:/bin/false
adb:x:1011:1011::/home/adb:/bin/false
install:x:1012:1012::/home/install:/bin/false
media:x:1013:1013::/home/media:/bin/false
dhcp:x:1014:1014::/home/dhcp:/bin/false
....

मैंने नए उपयोगकर्ताओं को ऐसा बनाने के लिए /etc/adduser.conf में कॉन्फ़िगरेशन सेट किया है (मेरे Android बॉक्स पर):

# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=100001
LAST_UID=199999

FIRST_GID=100001
LAST_GID=199999

यह एंड्रॉइड की नीति के अनुसार है, मैंने "glibc आधारित" सिस्टम उपयोगकर्ताओं को अभी भी 100-999 श्रेणी से बनाया है, मेरा मानना ​​है कि और मैंने ऑडियो उपयोगकर्ता को अपने / etc / passwd और / etc / समूह फ़ाइलों को 1005 के रूप में संशोधित किया, जैसे यह Android पर है।

मुझे एंड्रॉइड को अपडेट करने और अपने यूजर यूआईडी के साथ-साथ अपने डेमॉन या सिस्टम यूजर यूआईडी के साथ ग्लिबैक स्टैक के बारे में जानकारी के साथ सिंक्रनाइज़ करने की आवश्यकता है।

आपने पुस्तक "एंबेडेड एंड्रॉयड" करीम Yaghmour द्वारा इस बारे में और अधिक पढ़ सकते हैं यहां बिक

मेरा लक्ष्य काम करने के लिए एनवीएलसी जैसे कार्यक्रम प्राप्त करना है, लेकिन मुझे यूआईडी और जीआईडी ​​को सिंक्रनाइज़ करने की आवश्यकता है ताकि एंड्रॉइड को मेरे उपयोगकर्ताओं और उन समूहों के बारे में पता हो, जो उदाहरण के लिए, मेरे दिमाग के उपयोगकर्ता जिनके पास ऑडियो डिवाइस हैं।

इसके अलावा, मुझे एंड्रॉइड को पोस्टर्स के बारे में सूचित करने की आवश्यकता है और यह नेटवर्क समूह में सदस्यता है ताकि यह सॉकेट खोल सके और डेटाबेस तक पहुंच की अनुमति दे सके। मैंने फिलहाल कर्नेल में PARANOID_NETWORKING को अक्षम कर दिया है, लेकिन यह हैक केवल Android को वेनिला लिनक्स के रूप में सिक्योर बनाने का काम करता है, कम नहीं। यह अच्छा होगा कि पैरानॉयड सेटिंग रखें और समूह अनुमतियों को उन डेमों / उपयोगकर्ताओं के लिए लागू करें जिन्हें मैं फिट देखता हूं।

यह एंड्रॉइड को इस तरह के पागल और ठीक ट्यून किए गए नियंत्रणों के साथ सार्वजनिक सामना करने वाले सर्वरों के लिए एक महान ऑपरेटिंग सिस्टम बना देगा। कर्बेरॉस, LDAP, PAM, या जब आप रेडियस को कॉन्फ़िगर किए जा रहे WAP के रूप में फोन का उपयोग कर रहे हैं, जिसमें से सभी डिबियन और अन्य वितरण रिपॉजिट से मुफ्त में उपलब्ध हैं।

मुझे यह सब पता चल गया है, मुझे बस यह जानना होगा कि एंड्रॉइड के यूआईडी / जीआईडी ​​डेटाबेस को कैसे अपडेट किया जाए, जो हर बार जब आप ऐप इंस्टॉल करते हैं तो अपडेट हो जाता है, इसलिए मुझे पता है कि यह संभव है।

अपडेट: (7:08 बजे 30 जून, 2014)

निम्न फ़ाइलों में डेटा पर जाने के बाद ...

/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml

... मैंने अपने प्रश्न को शामिल करने के लिए अपडेट किया है "मैं इसकी व्याख्या कैसे करूं?"

  • मुझे लगता है कि मुझे एक कस्टम PAM मॉड्यूल बनाने और Bionic और Glibc को एक ही C लाइब्रेरी में मिलाने की आवश्यकता है, उन्हें दोनों पक्षों के अनुप्रयोगों के साथ संगत करने की आवश्यकता है, कोई अपवाद नहीं, C ++ अपवादों की अपेक्षा करें; p --- मैंने लिखा है अपने आप को पालन करने के लिए अंगूठे -2 के कुछ नियम। मुझे rpm और apt जैसे लोकप्रिय पैकेज मैनेजमेंट सिस्टम के लिए एक रैपर लिखना भी पड़ सकता है, जो एपीके इंस्टॉलेशन को फेक करता है और प्रत्येक नई डिबेट देता है। rpm पैकेज एक UID और शायद सिंपल-लिंक सब कुछ FHS में। यह सबसे आदर्श समाधान हो सकता है, जिसके लिए मैं जा सकता था, हालांकि सबसे अधिक काम, क्योंकि प्रत्येक को अपने "मैनिफ़ेस्ट" में अनुमतियों के एक सेट की आवश्यकता होगी, हो सकता है कि उपयोगकर्ता स्थापित करने के दौरान एक मेनू दे सकता है और आवश्यकतानुसार ले सकता है।
  • क्या किसी के पास एक अच्छा संदर्भ है जो इन फ़ाइलों के सिंटैक्स की व्याख्या करता है? मैं एक्सएमएल के साथ बहुत अच्छी तरह से वाकिफ नहीं हूं, यह उल्लेख नहीं है कि इसका उपयोग आमतौर पर उस एप्लिकेशन पर निर्भर करता है जो इसे व्याख्या करता है।
  • मैं packages.listफ़ाइल nullको अंतिम कॉलम में प्रविष्टि के अपवाद के साथ समझता हूं , क्या कोई इसे समझा सकता है?

जवाबों:


1

की GET_ACCOUNTSअनुमति दी? ( एड। नोट: यह विशेष सुविधा इस सवाल के लिए हर उपयोगी नहीं हो सकती है, या तो, जैसा कि यह स्पष्ट रूप से एक प्रमाणीकरण के लिए एक विशेष रूप से विकसित सुविधा है।)

व्यक्तिगत रूप से, मैं इस विषय के बारे में पढ़ रहा हूं जैसे कि एपीआईडी ​​इंस्टॉल के समय यूआईडी / जीआईडी ​​मूल्यों के संबंध में - वर्तमान में, एक साधारण 'ब्लॉग लेख के लिए शोध के रूप में - लेकिन मैं इस विषय का थोड़ा और अध्ययन करना चाहूंगा। एंड्रॉइड में इन बहु-लिंक्ड ओएस विशेषताओं के संदर्भ संदर्भ के संदर्भ में, ऐसा लगता है कि एंड्रॉइड ओएस में एक खाता सेवा है। ( एड। नोट ऐसा प्रतीत हो सकता है कि, Android में खाता सेवा एक Android उपयोगकर्ता के वेब खातों के बारे में आवेदन के लिए विकसित की गई सेवा हो सकती है)

हालाँकि, व्यक्तिगत रूप से मैं एक और लेख लिखने के बारे में पहले से तैयार हूँ, लेकिन निश्चित रूप से खाता सेवा कुछ और अध्ययन कर सकती है। शायद यह एंड्रॉइड उपकरणों पर करबरोस को लागू करने के संबंध में प्रासंगिक रूप से, ऑर्थोगोनली हो सकता है। एंड्रॉइड प्लेटफॉर्म पर केर्बरोस सेवाओं को लागू करने के संबंध में कुछ मौजूदा काम हैं। वेब ऐप्स के लिए, निश्चित रूप से OAuth / OAuth2 है।

जाहिर है, एंड्रॉइड पारंपरिक UNIX पासवार्ड / शैडो फ़ाइलों ( Anderson2013 ) का उपयोग नहीं करता है । मेरा सबसे अच्छा अनुमान, वर्तमान में, यह है कि Android OS खाता सेवा आगे के अध्ययन के तरीके का विषय हो सकता है ... कम से कम, अब तक यह पता लगाने के लिए कि Android खाता सेवा बल्कि एक वेब प्रमाणीकरण उपयोगिता ( API) हो सकती है: खाता प्रबंधक )।

मुझे यकीन है कि /etc/passwdAndroid स्रोत कोड में कहीं न कहीं Android के विकल्प के बारे में कुछ और है । उम्मीद है, यह हालांकि CyanogenMod में एक ही बात के करीब हो सकता है।


1

यहाँ Android UID / GID लुकअप कैसे लागू करता है पर मेरे विचार। मुझे उम्मीद है कि यह उन लोगों के लिए मददगार होगा, जिनके पास सवाल हैं।

grp_pwd.cpp बताता है कि कैसे Android एक passwdसंरचना में एक यूआईडी / उपयोगकर्ता नाम का अनुवाद करता है । से getpwuidसमारोह हम देख सकते हैं

  1. UID की तुलना पहले से तय की generated_android_ids.hगई AID से की जाती है, $(AOSP_ROOT)/out/soong/.intermediates/bionic/libc/generated_android_ids/genजिसके तहत bionic / libc / Android.bp और bionic / Android.bp के अनुसार android_filesystem_config.h से उत्पन्न होता है । AID को उपयोगकर्ता नाम में UID मानचित्र में संग्रहीत किया जाता है और जब ऊपर देखा जाता है, तो वे संरचना में परिवर्तित हो जाते हैं और AID पर सेट हो जाते हैं, होम डाइरेक्टरी सेट और शेल ( कोड ) पर सेट हो जाती है ।struct android_id_info android_ids[]passwduidgid//system/bin/sh

  2. यदि कोई उपयोगकर्ता पिछले चरण में नहीं पाया जाता है, तो फ़ंक्शन OEM परिभाषित उपयोगकर्ताओं के लिए दिखेगा। इन उपयोगकर्ताओं की UIDs से AID_OEM_RESERVED_STARTलेकर AID_OEM_RESERVED_ENDऔर AID_OEM_RESERVED_2_STARTतक होती हैं AID_OEM_RESERVED_2_END। विक्रेता-परिभाषित उपयोगकर्ता संग्रहीत हैं /vendor/etc/passwd। उपयोगकर्ता नाम सेट किए जाते हैं oem_${uid}और अन्य विशेषताओं को उसी प्रकार सेट किया जाता है जैसे AID उपयोगकर्ता।

  3. अंत में, यह सभी ऐप उपयोगकर्ताओं की जांच करेगा app_id_to_passwd()और प्रक्रिया बहुत समान है।

यदि आप सभी passwdप्रविष्टियाँ प्राप्त करना चाहते हैं, तो कृपया एक getpwent()ही फ़ाइल पर एक नज़र डालें और गेटप्वेंट (3) का मैनपेज भी देखें।


0

सबसे पहले जैसा कि आप जानते हैं कि हर एप्लिकेशन की अपनी विशिष्ट PID (प्रोसेस आईडी) होती है, इस PID को ऑपरेटिंग सिस्टम के कर्नेल द्वारा एप्लिकेशन को सौंपा जाता है।

  1. एंड्रॉइड एडीटी में आप लॉगकैट में पीआईडी ​​देख सकते हैं।
  2. यदि आप अपने डिवाइस में पीआईडी ​​देखना चाहते हैं तो आपको प्ले स्टोर से एक एप्लिकेशन इंस्टॉल करना होगा (कोई गारंटी नहीं दे सकता है कि ऐप द्वारा प्रदर्शित पीआईडी ​​वास्तविक है या नहीं)
  3. संशोधन भाग में आना एक बड़ी संख्या है।
  4. नहीं, आप अपनी इच्छा के अनुसार पीआईडी ​​को संशोधित नहीं कर सकते क्योंकि इससे सुरक्षा चिंताओं को बढ़ावा मिलेगा और साथ ही दूसरे ऐप के लिए ऐप के बीच अस्पष्टता के समान पीआईडी ​​हो सकती है जिससे संघर्ष हो सकता है।

6
इसका पीआईडी ​​के साथ कोई लेना-देना नहीं है, जो कि init के अपवाद के साथ परिवर्तनशील है, जो हमेशा PID 1 है, क्योंकि यह पहली प्रक्रिया है, जिसे बनाने के लिए UID को मेरे ग्लिब स्टैक (और इसके विपरीत) से अवगत कराना अधिक है ), जैसे कि पोस्टग्रैस डेमॉन, और नहीं, यह एक सुरक्षा चिंता का विषय नहीं है, जिससे बायोनिक स्टैक को इन अतिरिक्त यूआईडी और जीआईडी ​​के बारे में पता चलता है जिससे मैं अपने सिस्टम पर सुरक्षा बढ़ाऊंगा। कैसे Android Kerberos, LDAP और PAM को जागरूक करने से सुरक्षा दोष हो सकता है ?! यह विस्मयकारी होगा!
ओवरलोडेड_ऑपरेटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.