私はかなり長い間疑問に思っていました。AndroidはユーザーIDとグループID情報をどこに保存しますか?
たとえば、標準のLinuxでは、ユーザーとグループの情報はそれぞれ/etc/passwd
と/etc/group
に保存されます。ユーザーをグループに追加すると、そのユーザー名/ uidがそのグループ内のユーザーのリストに追加されます。たとえば、私のオーディオグループエントリは/etc/group
次のようになります。
audio:x:29:pulse,edge-case
pulseはpulseaudioデーモンのuidにマップされ、edge-caseはLinuxボックスのuid(1000)にマップされます。
私が理解しているように、Androidにインストールされる各アプリは独自のuidとgidを取得します。これは、Androidで発生するアプリの「サンドボックス化」の基盤です。他のアプリと共有する情報とそうでない情報を指定するアプリプログラマーによって作成されたマニフェストファイルに宣言がない限り、別のアプリが所有するプロセスまたはファイル。これは、インストール中にアプリがインターネットグループまたはそのようなものに追加することを要求することにより、ネットワークサービスへのアクセスを取得または要求する方法でもあります。NETネットグループの名前を引用しないでください。 INET6、どちらにしても、Androidでこのメカニズムを使用してアプリケーションに許可できるネットワークアクセスにはいくつかのレベルがあります。
私の質問は、この情報はAndroidのどこに保存されていますか?
さらに、変更することは可能ですか?
glibcスタックと、その中のデータを/etc/{passwd,group}
ファイルに統合したいと思います。信頼してください。それらは私の電話に存在します。他にもたくさんのグッズがインストールされています。
更新:より多くの検索を実行しており、 これが私が探しているものかもしれません。
もう少し掘り下げて、探しているものがすべて揃っていることを確認する必要があります。
更新:(2014年6月27日5時40分)
誰かが私が何をしているのか、何について話しているのかわからないと思っているので、はっきりさせてください。
AndroidのユーザーUIDは100000でオフセットされ、アプリUIDはユーザー番号_ app番号にマッピングされると10000でオフセットされます。したがって、psがu0_a10のようなものを示す場合、UID 100000のユーザーはUID 10010でアプリを実行しています。
system / core / include / private / android_filesystem_config.hからUIDおよびユーザー/デーモン名を取得し、それらを使用して/ etc / passwdおよび/ etc / groupファイル(Androidボックス上)を更新しました(例:/ 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ベース」のシステムユーザーを100〜999の範囲から作成し、/ etc / passwdおよび/ etc / groupファイルのオーディオユーザーを1005のように変更しました。 Android上にあります。
Androidを更新し、ユーザーUIDに関する情報と、glibcスタックからのデーモンまたはシステムユーザーUIDとを同期する必要があります。
この詳細については、Karim Yaghmour氏の著書「Embedded Android」を 参照してください。
私の目標はnvlcのようなプログラムを機能させることですが、UIDとGIDを同期して、Androidがユーザーと所属するグループを認識できるようにする必要があります。たとえば、私の頭のいいユーザーはオーディオデバイスにアクセスできます。
また、ソケットを開いてデータベースへのアクセスを許可できるように、PostresとネットワークグループのメンバーシップについてAndroidに通知する必要があります。とりあえずカーネルでPARANOID_NETWORKINGを無効にしましたが、このハックはAndroidをバニラLinuxほどセキュアにするためだけに役立ちます。偏執的な設定を維持し、グループのアクセス許可を適切なデーモン/ユーザーに適用するとよいでしょう。
これにより、Androidはこのような偏執狂的で微調整されたコントロールを備えた公共向けサーバーの優れたオペレーティングシステムになります。Kerberos、LDAP、PAMにアクセスできることを想像してください。または、Radiusが設定されたWAPとして電話を使用する場合を想像してください。これらはすべてDebianおよびその他の配布リポジトリから無料で入手できます。
私はこれをすべて把握しました。アプリをインストールするたびに更新されるAndroidのUID / GIDデータベースを更新する方法を知る必要があるので、それが可能であることはわかっています。
更新:(2014年6月30日午後7時08分)
次のファイルのデータを調べた後...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
...質問を更新して、「どのように解釈すればよいですか?」
- カスタムPAMモジュールを作成し、BionicとGlibcを単一のCライブラリにブレンドする必要があると思います。それらは両側のアプリケーションと互換性があり、例外はありません。; p ---親指2のいくつかのルール:)私が従うために。また、apkインストールを偽装し、各deb | rpmパッケージにUIDを与え、すべてをFHSにシンボリックリンクするrpmやaptなどの一般的なパッケージ管理システムにラッパーを書き込む必要があるかもしれません。それは私が求めることができる最も理想的なソリューションかもしれませんが、ほとんどの作業は、それぞれが「マニフェスト」にアクセス許可のセットを必要とするので、インストール中にユーザーが必要に応じて提供および取得できるメニューかもしれません。
- これらのファイルの構文を説明する良いリファレンスはありますか?私はXMLにあまり精通していません。もちろん、その使用は通常、それを解釈するアプリケーションに依存します。
- 最後の列のエントリを
packages.list
除いてファイルを理解していますが、null
誰でも説明できますか?