Tôi đã tự hỏi khá lâu rồi; Android lưu trữ thông tin id người dùng và nhóm ở đâu?
Chẳng hạn, trên Linux tiêu chuẩn, thông tin người dùng và nhóm được lưu trữ trong /etc/passwd
và /etc/group
, tương ứng. Khi bạn thêm người dùng vào một nhóm, tên người dùng / uid của người đó sẽ được thêm vào danh sách người dùng trong nhóm đó, ví dụ như mục nhập nhóm âm thanh của tôi /etc/group
trông như thế này:
audio:x:29:pulse,edge-case
Trường hợp xung được ánh xạ tới uid của daemon pulseaudio và trường hợp cạnh được ánh xạ tới uid của tôi (1000), trên hộp Linux của tôi.
Theo tôi hiểu, mỗi ứng dụng được cài đặt trên Android đều có uid và gid riêng và đây là cơ sở của "hộp cát" các ứng dụng xảy ra trên Android vì tất cả chúng đều chạy trong quy trình của riêng chúng và không thể truy cập dữ liệu của người khác xử lý hoặc các tệp thuộc sở hữu của ứng dụng khác trừ khi có tuyên bố trong tệp Manifest được tạo bởi các lập trình viên ứng dụng, điều này cho biết thông tin nào sẽ được chia sẻ cho các ứng dụng khác và không. Đây cũng là cách các ứng dụng đạt được hoặc đúng hơn là yêu cầu quyền truy cập vào các dịch vụ mạng trong khi cài đặt bằng cách yêu cầu thêm vào nhóm INTERNET hoặc đại loại như thế, đừng trích dẫn tôi tên của nhóm mạng NET, nó có thể giống như INET hoặc INET6, theo cách nào đó tôi biết có một số cấp truy cập mạng có thể được cấp cho một ứng dụng thông qua cơ chế này trên Android.
Câu hỏi của tôi là, thông tin này được lưu trữ trong Android ở đâu?
Hơn nữa, nó có thể sửa đổi?
Tôi muốn tích hợp một ngăn xếp glibc với nó và dữ liệu trong nó trong /etc/{passwd,group}
các tập tin của tôi , tin tôi đi, chúng tồn tại trên điện thoại của tôi, tôi thậm chí còn cài đặt apt với rất nhiều tính năng khác.
Cập nhật: Đã thực hiện nhiều tìm kiếm hơn và đây có thể là những gì tôi đang tìm kiếm.
Tôi sẽ cần phải đào sâu hơn một chút và chắc chắn rằng đó là tất cả mọi thứ tôi đang tìm kiếm.
Cập nhật: (5:40 ngày 27 tháng 6 năm 2014)
Vì ai đó nghĩ rằng tôi không biết tôi đang làm gì hoặc nói về điều gì, hãy để tôi làm rõ;
UID người dùng trên Android được bù với 100000 và UID ứng dụng được bù với 10000 khi được ánh xạ tới số người dùng _ số ứng dụng, do đó, khi ps hiển thị một cái gì đó như u0_a10, có nghĩa là Người dùng có UID 100000 đang chạy ứng dụng với UID 10010,
Tôi đã lấy tên UID và tên người dùng / daemon từ system / core / include / private / android_filesystem_config.h và sử dụng chúng để cập nhật các tập tin / etc / passwd và / etc / group (Trên hộp Android của tôi), ví dụ như / etc / tệp passwd (trên hộp Android của tôi) trông như thế này:
....
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
....
Tôi đã thiết lập cấu hình trong /etc/adduser.conf để tạo người dùng mới như vậy (Trên hộp Android của tôi):
# 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
Điều này phù hợp với chính sách của Android, tôi cho phép người dùng hệ thống "dựa trên glibc" vẫn được tạo từ phạm vi 100-999 Tôi tin và tôi đã sửa đổi người dùng âm thanh trên các tệp / etc / passwd và / etc / group của mình thành 1005, như đó là trên Android.
Tôi cần cập nhật Android và đồng bộ hóa nó với thông tin liên quan đến UID người dùng cũng như với các UID Daemon hoặc người dùng hệ thống của tôi từ ngăn xếp glibc.
Bạn có thể đọc thêm về điều này trong cuốn sách "Android nhúng" của Karim Yaghmour Bán tại đây
Mục tiêu của tôi là làm cho các chương trình như nvlc hoạt động nhưng tôi cần phải đồng bộ hóa UID và GID để Android biết về người dùng của tôi và các nhóm mà họ thuộc về để người dùng trí tuệ của tôi có quyền truy cập vào các thiết bị âm thanh.
Ngoài ra, tôi cần thông báo cho Android về Postres và đó là thành viên trong nhóm mạng để nó có thể mở ổ cắm và cho phép truy cập vào cơ sở dữ liệu. Hiện tại tôi đã vô hiệu hóa PARANOID_NETWORKING trong kernel, nhưng bản hack này chỉ phục vụ để làm cho Android trở nên an toàn như vanilla Linux, không hơn không kém. Sẽ tốt hơn nếu giữ cài đặt hoang tưởng và áp dụng các quyền của nhóm cho những trình tiện ích / người dùng nào tôi thấy phù hợp.
Điều này sẽ làm cho Android trở thành một hệ điều hành tuyệt vời cho các máy chủ đối mặt công khai với các điều khiển hoang tưởng và tinh chỉnh như vậy. Hãy tưởng tượng bạn có quyền truy cập vào Kerberos, LDAP, PAM hoặc Khi sử dụng điện thoại của bạn dưới dạng Wap có cấu hình Radius, tất cả đều có sẵn từ Debian và các bản phân phối khác miễn phí.
Tôi đã hiểu tất cả những điều này, tôi chỉ cần biết cách cập nhật cơ sở dữ liệu UID / GID của Android, được cập nhật mỗi khi bạn cài đặt một ứng dụng, vì vậy tôi biết điều đó là có thể.
Cập nhật: (7:08 tối ngày 30 tháng 6 năm 2014)
Sau khi xem qua dữ liệu trong các tệp sau ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... Tôi đã cập nhật câu hỏi của mình để bao gồm "làm thế nào để tôi giải thích nó?"
- Tôi nghĩ rằng tôi sẽ cần phải tạo một mô-đun PAM tùy chỉnh và trộn Bionic và Glibc vào một thư viện C duy nhất, chúng cần tương thích với các ứng dụng ở cả hai bên, không có ngoại lệ, mong đợi các ngoại lệ C ++ đó là; p --- Tôi đã viết một vài quy tắc của ngón tay cái-2 :) để tôi tuân theo. Tôi cũng có thể cần phải viết một trình bao bọc cho các hệ thống quản lý gói phổ biến như vòng / phút và apt thực hiện cài đặt apk và cung cấp cho mỗi gói gỡ lỗi mới một UID và có thể chỉ cần liên kết sym mọi thứ vào FHS. Đó có thể là giải pháp lý tưởng nhất mà tôi có thể thực hiện, mặc dù công việc nhiều nhất, vì mỗi công việc sẽ cần một bộ quyền trong "bảng kê khai" của chúng, có thể là một menu trong khi cài đặt mà người dùng có thể cung cấp và thực hiện theo nhu cầu.
- Có ai có một tài liệu tham khảo tốt giải thích cú pháp của các tập tin này? Tôi không rành về XML lắm, chưa kể nó sử dụng thường phụ thuộc vào ứng dụng diễn giải nó.
- Tôi không hiểu các
packages.list
tập tin ngoại trừnull
mục nhập trong cột cuối cùng, bất cứ ai có thể giải thích điều đó?