Bir süredir merak ediyorum; Android kullanıcı ve grup kimliği bilgilerini nerede saklıyor?
Örneğin, standart Linux'ta, kullanıcı ve grup bilgileri sırasıyla /etc/passwd
ve içinde saklanır /etc/group
. Bir gruba kullanıcı eklediğinizde, kullanıcı adı / kullanıcı kimliği bu gruptaki kullanıcılar listesine eklenir; örneğin, içindeki ses grubu girişim /etc/group
şöyle görünür:
audio:x:29:pulse,edge-case
Nabız, pulseaudio arka plan programının daidine eşleştirilir ve edge-case, Linux kutumda uid'ime (1000) eşlenir.
Anladığım kadarıyla, Android'e yüklenen her uygulama kendi kullanıcı kimliğini ve yönünü alır ve bu, Android'de gerçekleşen ve hepsi kendi işlemlerinde çalıştığı ve başka bir uygulamanın verilerine erişemediği için uygulamaların "korumalı alanının" temelidir. uygulama programcıları tarafından oluşturulan ve hangi bilgilerin diğer uygulamalarla paylaşılacağını ve nelerin paylaşılmayacağını belirten bir Bildirim dosyasında olmadığı sürece başka bir uygulamaya ait işlem veya dosyalar. Bu aynı zamanda uygulamaların İNTERNET grubuna veya bunun gibi bir şeye eklenmesini talep ederek kurulum sırasında ağ hizmetlerine erişim kazanması veya daha çok talep etmesidir, bana NET net grubunun adına teklif vermeyin, daha çok INET veya INET6, her iki şekilde de Android'deki bu mekanizma yoluyla bir uygulamaya verilebilecek birkaç ağ erişimi seviyesi olduğunu biliyorum.
Sorum şu: Android'de bu bilgiler nerede saklanıyor?
Dahası, değiştirmek mümkün mü?
Bir glibc yığınını ve içindeki /etc/{passwd,group}
dosyalarımla entegre etmek istiyorum , bana güvenin, telefonumda varlar, hatta birçok başka güzellikle yüklü bir apt var.
Güncelleme: Daha fazla arama yapıyordum ve aradığım şey bu olabilir.
Biraz daha derine inmem ve aradığım her şey olduğundan emin olmalıyım.
Güncelleme: (5:40 27 Haziran 2014)
Birisi ne yaptığımı veya hakkında konuştuğumu bilmediğimi düşündüğünden, açıklığa kavuşturayım;
Android'deki kullanıcı UID'leri 100000 ile dengelenir ve Uygulama UID'leri, kullanıcı numarası _ uygulama numarasına eşlendiğinde 10000 ile dengelenir, bu nedenle ps, u0_a10 gibi bir şey gösterdiğinde, UID 100000'li Kullanıcı UID 10010 ile uygulama çalıştırdığı anlamına gelir.
UID ve kullanıcı / daemon adlarını sistem / core / include / private / android_filesystem_config.h dosyasından aldım ve / etc / passwd ve / etc / group dosyalarımı (Android kutumda) güncellemek için kullandım, örneğin / etc / passwd dosyası (Android kutumda) şöyle görünür:
....
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 dosyasında yeni kullanıcılar oluşturmak için yapılandırmayı ayarladım (Android kutumda):
# 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
Bu, Android'in politikasına uygun olarak, "glibc tabanlı" sistem kullanıcılarının 100-999 aralığından oluşturulmasına izin verdim ve / etc / passwd ve / etc / group dosyalarımdaki ses kullanıcısını 1005 olacak şekilde değiştirdim. Android'de.
Android'i güncellemem ve Kullanıcı UID'lerimle ilgili bilgilerin yanı sıra Daemon veya glibc yığınından sistem kullanıcı UID'leri ile senkronize etmem gerekiyor.
Bununla ilgili daha fazla bilgiyi Karim Yaghmour'un "Gömülü Android" kitabından edinebilirsiniz.
Amacım nvlc gibi programların çalışmasını sağlamak ama UID ve GID'leri senkronize etmem gerekiyor, böylece Android kullanıcılarımdan ve ait oldukları gruplardan haberdar oluyor, örneğin beynim kullanıcısı ses cihazlarına erişebiliyor.
Ayrıca, soketleri açabileceği ve veritabanlarına erişime izin verebilmesi için Android'i Postres ve ağ grubundaki üyeliği hakkında bilgilendirmem gerekiyor. Şimdilik çekirdekteki PARANOID_NETWORKING işlevini devre dışı bıraktım, ancak bu kesmek sadece Android'i vanilya Linux olarak Güvenli hale getirmeye hizmet ediyor, daha az değil. Paranoyak ayarını korumak ve grup izinlerini uygun gördüğüm cinlere / kullanıcılara uygulamak iyi olurdu.
Bu, Android'i bu tür paranoyak ve ince ayarlı kontrollere sahip halka açık sunucular için harika bir işletim sistemi haline getirecektir. Kerberos, LDAP, PAM veya Telefonunuzu Radius yapılandırılmış WAP olarak kullanırken, hepsine Debian ve diğer dağıtım depolarından ücretsiz olarak erişebileceğinizi düşünün.
Bunu anladım, sadece bir uygulama yüklediğinizde güncellenen Android'in UID / GID veritabanını nasıl güncelleyeceğimi bilmeliyim, bu yüzden mümkün olduğunu biliyorum.
Güncelleme: (30 Haziran 2014 19:08)
Aşağıdaki dosyalardaki verileri inceledikten sonra ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... sorumu "nasıl yorumlayabilirim?" İfadesini içerecek şekilde güncelledim.
- Özel bir PAM modülü oluşturmam ve Bionic ve Glibc'i tek bir C kütüphanesine karıştırmam gerekeceğini düşünüyorum, her iki taraftaki uygulamalarla uyumlu olmaları, istisnalar yok, C ++ istisnaları bekliyorum; p --- yazdım birkaç kural başparmak-2 :) kendim için izleyin. Ayrıca, rpm ve apt gibi popüler paket yönetim sistemlerine, bir apk kurulumunu taklit eden ve her yeni deb | rpm paketine bir UID veren ve belki de her şeyi FHS'ye bağlayan bir paketleyici yazmam gerekebilir. Her biri kendi "manifest" in bir dizi izinlere ihtiyaç duyacağı için, en çok iş olsa da, gidebileceğim en ideal çözüm olabilir, belki bir kullanıcı yükleme sırasında bir menü verebilir ve gerektiği gibi alabilir.
- Herkes bu dosyaların sözdizimini açıklayan iyi bir referans var mı? Ben XML ile çok iyi usta değilim, bahsetmiyorum genellikle kullanımı yorumlayan uygulamaya bağlıdır.
packages.list
Dosyayınull
son sütundaki giriş dışında anlıyorum, herkes açıklayabilir mi?