Saya telah bertanya-tanya untuk beberapa waktu sekarang; di mana Android menyimpan informasi id pengguna dan grup?
Misalnya, pada Linux standar, informasi pengguna dan grup disimpan di /etc/passwd
dan /etc/group
, masing-masing. Saat Anda menambahkan pengguna ke grup, nama pengguna / nya akan ditambahkan ke daftar pengguna di grup itu, misalnya entri grup audio saya /etc/group
terlihat seperti ini:
audio:x:29:pulse,edge-case
Di mana pulsa dipetakan ke uid dari daemon pulseaudio dan edge-case dipetakan ke uid saya (1000), pada kotak Linux saya.
Seperti yang saya pahami, setiap aplikasi yang terinstal di Android mendapatkan sendiri uid dan gid dan ini adalah dasar dari "kotak pasir" aplikasi yang terjadi di Android karena mereka semua berjalan dalam proses mereka sendiri dan tidak dapat mengakses data dari yang lain proses atau file yang dimiliki oleh aplikasi lain kecuali ada deklarasi dalam file Manifest yang dibuat oleh programmer aplikasi yang menentukan info apa yang akan dibagikan ke aplikasi lain dan apa yang tidak. Ini juga cara aplikasi mendapatkan atau lebih tepatnya meminta akses ke layanan jaringan selama instalasi dengan meminta ditambahkan ke grup INTERNET atau semacamnya, jangan mengutip saya atas nama grup net NET, mungkin lebih seperti INET atau INET6, bagaimanapun saya tahu ada beberapa tingkat akses jaringan yang dapat diberikan ke aplikasi melalui mekanisme ini di Android.
Pertanyaan saya adalah, di mana informasi ini disimpan di Android?
Lebih jauh lagi, apakah mungkin untuk memodifikasi?
Saya ingin mengintegrasikan tumpukan glibc dengan itu dan data di dalamnya dalam /etc/{passwd,group}
file saya , percayalah, mereka ada di ponsel saya, saya bahkan harus menginstal dengan banyak barang lainnya.
Perbarui: Telah melakukan lebih banyak pencarian dan ini mungkin yang saya cari.
Saya perlu menggali sedikit lebih dalam dan memastikan itu semua yang saya cari.
Pembaruan: (5:40 27 Juni 2014)
Karena seseorang berpikir saya tidak tahu apa yang saya lakukan atau bicarakan, izinkan saya mengklarifikasi;
Pengguna UID di Android diimbangi dengan 100000 dan Aplikasi UID diimbangi dengan 10.000 ketika dipetakan ke nomor pengguna _ nomor aplikasi, maka ketika ps menunjukkan sesuatu seperti u0_a10 yang berarti bahwa Pengguna dengan UID 100000 menjalankan aplikasi dengan UID 10010,
Saya telah menarik UID dan nama pengguna / daemon dari sistem / core / include / private / android_filesystem_config.h dan menggunakannya untuk memperbarui file / etc / passwd dan / etc / saya (pada kotak Android saya), misalnya my / etc / file passwd (di kotak Android saya) terlihat seperti ini:
....
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
....
Saya telah mengatur konfigurasi di /etc/adduser.conf untuk membuat pengguna baru seperti itu (Di kotak Android saya):
# 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
Ini sesuai dengan kebijakan Android, saya membiarkan pengguna sistem "berbasis glibc" masih dibuat dari kisaran 100-999 Saya percaya dan saya memodifikasi pengguna audio pada file / etc / passwd dan / etc / group saya menjadi 1005, seperti itu di Android.
Saya perlu memperbarui Android dan menyinkronkannya dengan info mengenai UID Pengguna saya serta dengan Daemon atau UID pengguna sistem saya dari tumpukan glibc.
Anda dapat membaca lebih lanjut tentang ini di buku "Embedded Android" oleh Karim Yaghmour Terjual di sini
Tujuan saya adalah membuat program seperti nvlc berfungsi, tetapi saya perlu menyinkronkan UID dan GID agar Android mengetahui pengguna saya dan grup yang mereka miliki sehingga misalnya, pengguna brainard saya memiliki akses ke perangkat audio.
Saya juga perlu memberi tahu Android tentang Postres dan keanggotaannya di grup jaringan sehingga dapat membuka soket dan memungkinkan akses ke database. Saya telah menonaktifkan PARANOID_NETWORKING di kernel untuk saat ini, tetapi peretasan ini hanya berfungsi untuk membuat Android seaman vanilla Linux, tidak kurang. Akan lebih baik untuk mempertahankan pengaturan paranoid dan menerapkan izin grup ke daemon / pengguna yang cocok untuk saya.
Ini akan menjadikan Android sistem operasi yang bagus untuk server yang menghadap publik dengan kontrol paranoid dan fine tuned. Bayangkan memiliki akses ke Kerberos, LDAP, PAM, atau Ketika menggunakan ponsel Anda sebagai WAP yang dikonfigurasi Radius, yang semuanya tersedia dari Debian dan repo distribusi lainnya tanpa biaya.
Saya sudah mengetahui ini semua, saya hanya perlu tahu cara memperbarui basis data UID / GID Android, yang diperbarui setiap kali Anda memasang aplikasi, jadi saya tahu itu mungkin.
Pembaruan: (19:08 30 Juni 2014)
Setelah memeriksa data dalam file berikut ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... Saya telah memperbarui pertanyaan saya untuk memasukkan "bagaimana cara menafsirkannya?"
- Saya pikir saya akan perlu membuat modul PAM khusus dan menggabungkan Bionic dan Glibc ke dalam pustaka C tunggal, mereka harus kompatibel dengan aplikasi di kedua sisi, tidak ada pengecualian, mengharapkan pengecualian C ++ yaitu; p --- Saya telah menulis beberapa aturan praktis-2 :) untuk saya ikuti. Saya mungkin juga perlu menulis pembungkus untuk sistem manajemen paket populer seperti rpm dan apt yang memalsukan instalasi apk dan memberikan setiap paket deb | rpm baru sebuah UID dan mungkin hanya sym-link semuanya ke FHS. Itu mungkin solusi paling ideal yang bisa saya pilih, meskipun paling berhasil, karena masing-masing akan memerlukan satu set izin dalam "manifes" mereka, mungkin sebuah menu saat menginstal yang dapat diberikan dan diterima pengguna sesuai kebutuhan.
- Adakah yang punya referensi bagus yang menjelaskan sintaksis file-file ini? Saya tidak terlalu berpengalaman dengan XML, belum lagi penggunaannya biasanya tergantung pada aplikasi yang mengartikannya.
- Saya mengerti
packages.list
file dengan pengecualiannull
entri di kolom terakhir, adakah yang bisa menjelaskannya?