我一直想知道已经有一段时间了。Android在哪里存储用户和组ID信息?
例如,在标准Linux上,用户和组信息分别存储在/etc/passwd
和中/etc/group
。当您将用户添加到组中时,其用户名/ uid将被添加到该组中的用户列表中,例如,我的音频组条目/etc/group
如下所示:
audio:x:29:pulse,edge-case
在我的Linux机器上,其中pulse被映射到pulseaudio守护程序的uid,边缘情况被映射到我的uid(1000)。
据我了解,安装在Android上的每个应用程序都具有自己的uid和gid,这是在Android上发生的应用程序“沙箱”的基础,因为它们都在各自的进程中运行并且无法访问其他应用程序的数据进程或其他应用程序拥有的文件,除非应用程序程序员创建的清单文件中有声明,该声明规定哪些信息要共享给其他应用程序,哪些则不共享。这也是应用程序在安装过程中通过请求被添加到INTERNET组或类似的方式来获得或请求访问网络服务的方式,不要在NET网络组的名称上引用我,这可能更像是INET或INET6,无论哪种方式,我都知道可以通过Android上的此机制将多个级别的网络访问权限授予应用程序。
我的问题是,此信息在Android中存储在哪里?
更进一步,是否可以修改?
我想将glibc堆栈与其内部的数据集成在一起 /etc/{passwd,group}
文件中,相信我,它们存在于我的手机中,我什至还安装了许多其他好东西。
更新:进行了更多搜索,并且 这可能就是我想要的。
我将需要更深入地研究,并确保它是我想要的一切。
更新:(2014年6月27日5:40)
由于有人认为我不知道我在做什么或在说什么,所以让我澄清一下;
当映射到用户编号_应用编号时,Android上的用户UID偏移100000,而应用UID偏移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的信息同步。
你可以阅读更多有关此内容的书“嵌入式Android的”由Karim Yaghmour 这里出售
我的目标是使nvlc之类的程序正常运行,但我需要使UID和GID保持同步,以便Android知道我的用户及其所属的组,例如,我的大脑用户可以访问音频设备。
另外,我还需要通知Android有关Postres及其在网络组中的成员身份,以便它可以打开套接字并允许访问数据库。我暂时在内核中禁用了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库中,它们需要与双方的应用程序兼容,没有例外,期望C ++例外; p ---我已经写过几个经验法则2 :)让我自己遵循。我可能还需要为流行的软件包管理系统(如rpm和apt)编写一个包装程序,以伪造apk安装并为每个新的deb | rpm软件包提供一个UID,也许只是将所有内容符号链接到FHS中。这可能是我可以寻求的最理想的解决方案,尽管工作量最大,因为每个人都需要在其“清单”中拥有一组权限,也许是安装过程中用户可以根据需要提供和获得的菜单。
- 有没有人能很好地解释这些文件的语法?我对XML不太熟悉,更不用说它的使用通常取决于解释它的应用程序。
packages.list
除了null
最后一栏中的条目,我确实了解该文件,任何人都可以解释一下吗?