ฉันสงสัยมาระยะหนึ่งแล้ว Android เก็บข้อมูลผู้ใช้และ ID กลุ่มไว้ที่ไหน
ตัวอย่างเช่นบน Linux มาตรฐานข้อมูลผู้ใช้และกลุ่มจะถูกเก็บไว้ใน/etc/passwd
และ/etc/group
ตามลำดับ เมื่อคุณเพิ่มผู้ใช้ในกลุ่มชื่อผู้ใช้ / uid ของเขาหรือเธอจะถูกเพิ่มไปยังรายชื่อผู้ใช้ในกลุ่มนั้นตัวอย่างเช่นรายการกลุ่มเสียงของฉัน/etc/group
มีลักษณะดังนี้:
audio:x:29:pulse,edge-case
ที่ซึ่งชีพจรถูกแมปกับ uid ของ pulseaudio daemon และ edge-case จะถูกแมปกับ uid ของฉัน (1,000) บนกล่อง Linux ของฉัน
ตามที่ฉันเข้าใจมันแต่ละแอพที่ติดตั้งบน Android จะเป็นของตัวเองทั้ง uid และ gid และนี่คือฐานของ "แซนด์บ็อกซ์" ของแอพที่เกิดขึ้นบน Android ในขณะที่พวกเขาทำงานในกระบวนการของตัวเอง กระบวนการหรือไฟล์ที่แอพอื่นเป็นเจ้าของเว้นแต่มีการประกาศในไฟล์ Manifest ที่สร้างขึ้นโดยโปรแกรมเมอร์แอพซึ่งกำหนดข้อมูลที่จะแชร์กับแอพอื่น ๆ นี่เป็นวิธีที่แอพได้รับหรือต้องการเข้าถึงบริการระบบเครือข่ายในระหว่างการติดตั้งโดยขอให้เพิ่มกลุ่มอินเทอร์เน็ตหรืออะไรทำนองนั้นอย่าอ้างฉันในชื่อกลุ่ม NET net มันอาจจะเป็น INET หรือ INET6 ทั้งสองวิธีที่ฉันรู้ว่ามีการเข้าถึงเครือข่ายหลายระดับที่สามารถมอบให้กับแอปพลิเคชันผ่านกลไกนี้บน Android
คำถามของฉันคือข้อมูลนี้เก็บอยู่ที่ไหนใน Android?
ยิ่งไปกว่านั้นมันเป็นไปได้ที่จะแก้ไข?
ฉันต้องการรวม glibc stack เข้ากับมันและข้อมูลที่อยู่ใน/etc/{passwd,group}
ไฟล์ของฉันเชื่อฉันพวกเขามีอยู่ในโทรศัพท์ของฉันฉันยังมีการติดตั้ง apt กับสารพัดอื่น ๆ อีกมากมาย
อัปเดต: ทำการค้นหาเพิ่มเติมและ นี่อาจเป็นสิ่งที่ฉันกำลังมองหา
ฉันจะต้องขุดให้ลึกขึ้นอีกหน่อยและตรวจสอบให้แน่ใจว่าเป็นทุกสิ่งที่ฉันกำลังมองหา
อัปเดต: (5:40 27 มิถุนายน 2014)
เนื่องจากมีคนคิดว่าฉันไม่รู้ว่าฉันกำลังทำอะไรหรือพูดถึงอะไรให้ฉันอธิบาย;
UID ของผู้ใช้บน Android จะถูกชดเชยด้วย 100000 และ UID ของแอปจะถูกชดเชยด้วย 10,000 เมื่อแมปกับหมายเลขผู้ใช้ _ แอปดังนั้นเมื่อ ps แสดงบางอย่างเช่น u0_a10 ซึ่งหมายความว่าผู้ใช้ UID 100000 กำลังเรียกใช้แอปที่มี UID 10010
ฉันได้ดึง UID และชื่อผู้ใช้ / daemon จากระบบ / core / include / private / android_filesystem_config.h และใช้เพื่ออัปเดตไฟล์ / etc / passwd และ / etc / group ของฉัน (ในกล่อง Android ของฉัน) เช่น 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
นี่เป็นไปตามนโยบายของ Android ฉันปล่อยให้ผู้ใช้ระบบ "glibc based" ยังคงถูกสร้างขึ้นจากช่วง 100-999 ฉันเชื่อและฉันได้แก้ไขผู้ใช้เสียงในไฟล์ / etc / passwd และ / etc / group เป็น 1005 เช่น มันเป็นบน Android
ฉันต้องการอัปเดต Android และซิงโครไนซ์กับข้อมูลเกี่ยวกับ UID ผู้ใช้ของฉันเช่นเดียวกับ Daemon หรือ UID ผู้ใช้ระบบจาก glibc stack
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในหนังสือ "Embedded Android" โดย Karim Yaghmour ขายที่นี่
เป้าหมายของฉันคือการรับโปรแกรมเช่น nvlc ให้ทำงาน แต่ฉันต้องได้รับ UID และ GIDs ให้ตรงกันเพื่อให้ Android รับรู้ถึงผู้ใช้ของฉันและกลุ่มที่พวกเขาอยู่เพื่อให้ตัวอย่างเช่นผู้ใช้สมองของฉันที่มีการเข้าถึงอุปกรณ์เสียง
นอกจากนี้ฉันต้องแจ้ง Android เกี่ยวกับ Postres และเป็นสมาชิกในกลุ่มเครือข่ายเพื่อให้สามารถเปิดซ็อกเก็ตและอนุญาตให้เข้าถึงฐานข้อมูล ฉันได้ปิดการใช้งาน PARANOID_NETWORKING ในเคอร์เนลในขณะนี้ แต่แฮ็คนี้ให้บริการเพื่อทำให้ Android ปลอดภัยเหมือน vanilla Linux ไม่น้อย มันจะเป็นการดีถ้าให้การตั้งค่าหวาดระแวงและใช้การอนุญาตกลุ่มกับ daemons / ผู้ใช้ที่ฉันเห็นว่าเหมาะสม
สิ่งนี้จะทำให้ Android เป็นระบบปฏิบัติการที่ยอดเยี่ยมสำหรับเซิร์ฟเวอร์สาธารณะที่มีการควบคุมหวาดระแวงและการปรับจูนดังกล่าว ลองนึกภาพว่ามีการเข้าถึง Kerberos, LDAP, PAM หรือเมื่อใช้โทรศัพท์ของคุณเป็น WAP ที่มีการกำหนดค่า Radius ซึ่งทั้งหมดนี้สามารถใช้ได้จาก Debian และ repos การกระจายอื่น ๆ ฟรี
ฉันได้สิ่งนี้มาทั้งหมดฉันแค่ต้องรู้วิธีอัปเดตฐานข้อมูล UID / GID ของ Android ซึ่งจะได้รับการปรับปรุงทุกครั้งที่คุณติดตั้งแอพดังนั้นฉันรู้ว่ามันเป็นไปได้
อัปเดต: (7:08 น. 30 มิถุนายน 2557)
หลังจากผ่านข้อมูลในไฟล์ต่อไปนี้ ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... ฉันได้อัปเดตคำถามของฉันเพื่อรวม "ฉันจะตีความได้อย่างไร"
- ฉันคิดว่าฉันจะต้องสร้างโมดูล PAM ที่กำหนดเองและผสมผสาน Bionic และ Glibc ลงในไลบรารี C เดียวพวกเขาต้องเข้ากันได้กับแอปพลิเคชันทั้งสองด้านโดยไม่มีข้อยกเว้นคาดว่าจะมีข้อยกเว้น C ++ นั่นคือ p --- ฉันได้เขียน กฎสองข้อของ thumb-2 :) ให้ฉันทำตาม ฉันอาจต้องเขียน wrapper ไปยังระบบการจัดการแพกเกจยอดนิยมเช่น rpm และ apt ที่ปลอมการติดตั้ง apk และให้ UID ใหม่แพ็คเกจ deb | rpm และบางที sym-link ทุกอย่างลงใน FHS นั่นอาจเป็นทางออกที่ดีที่สุดที่ฉันสามารถทำได้แม้จะใช้งานได้ดีที่สุดเพราะแต่ละอย่างจะต้องมีชุดการอนุญาตใน "รายการ" ของพวกเขาอาจมีเมนูระหว่างการติดตั้งที่ผู้ใช้สามารถให้และรับได้ตามต้องการ
- ใครบ้างมีการอ้างอิงที่ดีที่อธิบายถึงไวยากรณ์ของไฟล์เหล่านี้หรือไม่ ฉันไม่ค่อยคุ้นเคยกับ XML มากและไม่ต้องพูดถึงการใช้งานขึ้นอยู่กับแอปพลิเคชันที่ตีความมัน
- ฉันเข้าใจ
packages.list
ไฟล์ด้วยข้อยกเว้นของnull
รายการในคอลัมน์สุดท้ายทุกคนสามารถอธิบายได้หรือไม่