Androidのユーザー/グループID情報はどこに保存されますか、またどのように解釈しますか?


15

私はかなり長い間疑問に思っていました。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誰でも説明できますか?

回答:


1

GET_ACCOUNTS許可を見ましたか?(Ed。注:この特定の機能は、明らかにウェブ認証用に開発された機能であるため、この質問にも役立つとは限りません。)

個人的には、APKのインストール時に計算されたUID / GIDの値に関するトピックについて読んでいます。現在は、単純な「ブログ記事」の研究としてですが、このトピックについても少し勉強したいと思います。これらの多重リンクOS機能に関するリファレンスドキュメントを参照すると、Androidでは、Android OSにアカウントサービスがあるようです。(Ed。Noteさらに、Android のアカウントサービスは、AndroidユーザーのWebアカウントに関するアプリケーション用に開発されたサービスであるように思われるかもしれません)

個人的には、すぐに別の記事を書くことに夢中になっていますが、確かに、アカウントサービスはさらに調査する必要があります。おそらく、AndroidアプライアンスへのKerberosの適用に関しては、直交的に関連する可能性があります。AndroidプラットフォームでのKerberosサービスの実装に関して、いくつかの既存の作業があります。Webアプリの場合、もちろんOAuth / OAuth2があります。

明らかに、Androidは従来のUNIX passwd / shadowファイル(Anderson2013)を使用していません。現在のところ、Android OSアカウントサービスは、さらなる研究の方法のトピックになる可能性があります...少なくとも、AndroidアカウントサービスがWeb認証ユーティリティ(API: AccountManager)。

/etc/passwdAndroidのソースコードのどこかに、Android の代替手段について何か何かがあると確信しています。願わくば、CyanogenModでも同じことが近づいているかもしれません。


1

ここで、AndroidがどのようにUID / GIDルックアップを実装するかについての私の考え。私はそれが質問を持っている人に役立つことを願っています。

grp_pwd.cppは、AndroidがUID /ユーザー名をpasswd構造に変換する方法を説明しています。よりgetpwuid機能我々はそれを見ることができます

  1. UIDは、最初から定義済みのAIDと比較されるgenerated_android_ids.hの下$(AOSP_ROOT)/out/soong/.intermediates/bionic/libc/generated_android_ids/genから生成されるandroid_filesystem_config.hに係る生体/ libcの/ Android.bp及び生体/ Android.bp。エイズはでUIDマップにユーザ名に格納されているstruct android_id_info android_ids[]と見上げたとき、彼らはに変換されpasswdて構造uid及びgidAID、ホームディレクトリのセットにするように設定/するとシェルセット/system/bin/shコード)。

  2. 前の手順でユーザーが見つからない場合、関数はOEM定義のユーザーを探します。これらのユーザーのUIDが範囲AID_OEM_RESERVED_STARTAID_OEM_RESERVED_ENDAID_OEM_RESERVED_2_STARTしますAID_OEM_RESERVED_2_END。ベンダー定義のユーザーはに保存され/vendor/etc/passwdます。ユーザー名はに設定されoem_${uid}、他の属性はAIDユーザーと同じ方法で設定されます。

  3. 最後に、すべてのアプリユーザーをチェックインしapp_id_to_passwd()、プロセスは非常によく似ています。

すべてのpasswdエントリを取得する場合getpwent()は、同じファイルとgetpwent(3)のマンページをご覧ください。


0

まず、すべてのアプリケーションには独自の一意のPID(プロセスID)があることを認識しているため、このPIDはオペレーティングシステムのカーネルによってアプリケーションに割り当てられます。

  1. Android ADTでは、logcatでPIDを表示できます。
  2. デバイスでPIDを表示する場合は、プレイストアからアプリケーションをインストールする必要があります(アプリによって表示されるPIDが本物であるかどうかを保証することはできません)
  3. 変更部分に来るのは大きな番号です。
  4. PIDを変更することはできません。セキュリティ上の問題や、別のアプリのアプリ間のあいまいさの原因となるため、同じPIDが競合につながる可能性があるためです。

6
これは、PIDとは関係ありません。PIDは、最初に作成されるプロセスであるため、常にPID 1であるinitを除き、変数です。これは、glibcスタックのUIDをAndroidに認識させることと関連しています)、たとえばPostgresデーモンなど、セキュリティ上の問題ではありません。システムにあるこれらの余分なUIDとGIDをBionicスタックに認識させると、セキュリティが向上します。Android Kerberos、LDAP、およびPAMを認識させることはどのようにセキュリティ上の欠陥になる可能性がありますか?!それはすごいでしょう!
Overloaded_Operator 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.