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?
sumber
Jawaban:
Lihat
GET_ACCOUNTS
izinnya? ( Ed. Catatan: Fitur tertentu itu mungkin juga tidak berguna untuk pertanyaan ini, karena tampaknya fitur yang dikembangkan lebih untuk otentikasi web.)Secara pribadi, saya membaca tentang topik sehubungan dengan nilai-nilai UID / GID yang dihitung pada saat instalasi APK - saat ini, sebagai penelitian untuk artikel blog yang sederhana - tetapi saya ingin mempelajari topik ini sedikit lebih jauh juga. Mengacu pada dokumentasi referensi tentang fitur-fitur OS yang terhubung multipel ini, di Android, tampaknya ada Layanan Akun di OS Android. ( Ed. Catatan Tampaknya, lebih lanjut, bahwa Layanan Akun di Android mungkin lebih merupakan layanan yang dikembangkan untuk aplikasi tentang akun web pengguna Android)
Meskipun secara pribadi saya sibuk untuk menulis artikel lain, segera, tetapi tentu saja Layanan Akun mungkin perlu studi lebih lanjut. Mungkin itu relevan, secara ortogonal, sehubungan dengan penerapan Kerberos pada perangkat Android. Ada beberapa pekerjaan yang sudah ada, sehubungan dengan mengimplementasikan layanan Kerberos di platform Android. Untuk aplikasi web, tentu saja ada OAuth / OAuth2.
Terbukti, Android tidak menggunakan file passwd / shadow UNIX konvensional ( Anderson2013 ). Perkiraan terbaik saya, saat ini, adalah bahwa Layanan Akun OS Android dapat menjadi topik untuk studi lebih lanjut ... setidaknya, sejauh mengetahui bahwa Layanan Akun Android mungkin lebih merupakan utilitas otentikasi web ( API: Manajer Akun ).
Saya yakin ada sesuatu yang lebih tentang alternatif Android
/etc/passwd
, di suatu tempat di kode sumber Android. Mudah-mudahan, itu dekat dengan namun hal yang sama mungkin didekati di CyanogenMod.sumber
Di sini pikiran saya tentang bagaimana Android mengimplementasikan pencarian UID / GID. Saya harap ini akan membantu siapa saja yang memiliki pertanyaan.
grp_pwd.cpp menjelaskan bagaimana Android menerjemahkan UID / nama pengguna ke
passwd
struktur. Darigetpwuid
fungsinya kita bisa melihatnyaUID pertama dibandingkan dengan AIDS telah ditetapkan dari
generated_android_ids.h
bawah$(AOSP_ROOT)/out/soong/.intermediates/bionic/libc/generated_android_ids/gen
yang dihasilkan dari android_filesystem_config.h menurut bionik / libc / Android.bp dan bionik / Android.bp . AID disimpan dalam nama pengguna untuk peta UIDstruct android_id_info android_ids[]
dan ketika dilihat, mereka dikonversi kepasswd
struktur denganuid
dangid
diatur ke AID, direktori home diatur ke/
dan shell set ke/system/bin/sh
( kode ).Jika tidak ada pengguna yang ditemukan pada langkah sebelumnya, fungsi akan mencari pengguna yang ditentukan OEM. UID pengguna ini berkisar dari
AID_OEM_RESERVED_START
keAID_OEM_RESERVED_END
danAID_OEM_RESERVED_2_START
keAID_OEM_RESERVED_2_END
. Pengguna yang ditentukan vendor disimpan di/vendor/etc/passwd
. Nama pengguna diatur keoem_${uid}
dan atribut lainnya diatur dengan cara yang sama dengan pengguna AID.Akhirnya, ini akan memeriksa semua pengguna aplikasi
app_id_to_passwd()
dan prosesnya sangat mirip.Jika Anda ingin mendapatkan semua
passwd
entri, silakan lihat digetpwent()
file yang sama dan juga halaman getpwent (3)sumber
Pertama-tama karena Anda mengetahui bahwa setiap Aplikasi memiliki PID (ID Proses) yang unik, PID ini ditugaskan untuk aplikasi oleh kernel Sistem Operasi.
sumber