Estou pensando há algum tempo; onde o Android armazena as informações de identificação de usuário e grupo?
Por exemplo, no Linux padrão, as informações de usuário e grupo são armazenadas em /etc/passwd
e /etc/group
, respectivamente. Quando você adiciona um usuário a um grupo, seu nome de usuário / uid é adicionado à lista de usuários desse grupo, por exemplo, a entrada do meu grupo de áudio /etc/group
aparece assim:
audio:x:29:pulse,edge-case
Onde o pulso é mapeado para o uid do daemon pulseaudio e o edge-case é mapeado para o meu uid (1000), na minha caixa Linux.
Pelo que entendi, cada aplicativo que é instalado no Android recebe seu próprio uid e gid e essa é a base do "sandboxing" de aplicativos que ocorre no Android, pois todos são executados em seu próprio processo e não podem acessar dados de outro processo ou arquivos pertencentes a outro aplicativo, a menos que exista declaração em um arquivo de manifesto criado por programadores de aplicativos, que determina quais informações devem ser compartilhadas com outros aplicativos e quais não. É também assim que os aplicativos obtêm ou melhor, solicitam acesso aos serviços de rede durante a instalação, solicitando a inclusão no grupo INTERNET ou algo parecido. Não me cite o nome do grupo NET, pode ser mais parecido com INET ou INET6, de qualquer forma, sei que existem vários níveis de acesso à rede que podem ser concedidos a um aplicativo por meio desse mecanismo no Android.
Minha pergunta é: onde essas informações são armazenadas no Android?
Além disso, é possível modificar?
Gostaria de integrar uma pilha glibc a ela e os dados nela contidos nos meus /etc/{passwd,group}
arquivos, confie em mim, eles existem no meu telefone, eu até tenho instalado com muitas outras vantagens.
Atualização: tenho feito mais pesquisas e isso pode ser o que estou procurando.
Vou precisar me aprofundar um pouco mais e garantir que seja tudo o que estou procurando.
Atualização: (5:40 27 de junho de 2014)
Como alguém pensa que eu não sei o que estou fazendo ou falando, deixe-me esclarecer;
Os UIDs de usuários no Android são compensados com 100000 e os UIDs de aplicativos são compensados com 10000 quando mapeados para o número de usuário _ número do aplicativo; portanto, quando um ps mostra algo como u0_a10, significa que o usuário com UID 100000 está executando o aplicativo com UID 10010,
Peguei nomes de UID e de usuário / daemon de system / core / include / private / android_filesystem_config.h e usei-os para atualizar meus arquivos / etc / passwd e / etc / group (Na minha caixa Android), por exemplo, meus / etc / O arquivo passwd (na minha caixa do Android) fica assim:
....
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
....
Eu configurei a configuração no /etc/adduser.conf para criar novos usuários assim (na minha caixa do 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
Isso está de acordo com a política do Android, deixo que os usuários do sistema "baseados em glibc" ainda sejam criados no intervalo de 100 a 1999, acredito e modifiquei o usuário de áudio nos meus arquivos / etc / passwd e / etc / group para 1005, como Está no Android.
Preciso atualizar o Android e sincronizá-lo com informações sobre meus UIDs de usuário, bem como com meu Daemon ou UIDs de usuário do sistema da pilha glibc.
Você pode ler mais sobre isso no livro "Android incorporado" de Karim Yaghmour Vendido aqui
Meu objetivo é fazer com que programas como o nvlc funcionem, mas preciso sincronizar UIDs e GIDs para que o Android esteja ciente dos meus usuários e dos grupos aos quais eles pertencem, para que, por exemplo, meu usuário com acesso limitado aos dispositivos de áudio.
Também preciso informar o Android sobre o Postres e sua associação ao grupo de rede para que ele possa abrir soquetes e permitir o acesso a bancos de dados. Por enquanto, desativei o PARANOID_NETWORKING no kernel, mas esse truque serve apenas para tornar o Android tão seguro quanto o vanilla Linux. Seria bom manter a configuração paranóica e aplicar as permissões de grupo a quais daemons / usuários que eu achar melhor.
Isso tornaria o Android um ótimo sistema operacional para servidores públicos, com controles paranóicos e refinados. Imagine ter acesso ao Kerberos, LDAP, PAM ou Ao usar seu telefone como WAP com o Radius configurado, todos disponíveis gratuitamente no Debian e em outros repositórios de distribuição.
Já entendi tudo, só preciso atualizar o banco de dados UID / GID do Android, que é atualizado toda vez que você instala um aplicativo, pelo que sei que é possível.
Atualização: (19:08 30 de junho de 2014)
Depois de revisar os dados nos seguintes arquivos ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... Atualizei minha pergunta para incluir "como a interpreto?"
- Eu acho que vou precisar criar um módulo PAM personalizado e misturar Bionic e Glibc em uma única biblioteca C, eles precisam ser compatíveis com aplicativos de ambos os lados, sem exceções, esperar exceções em C ++; p --- eu escrevi algumas regras básicas :) para eu seguir. Também posso precisar escrever um wrapper para sistemas populares de gerenciamento de pacotes, como o rpm e o apt, que falsificam a instalação de um apk e fornecem a cada novo pacote deb | rpm um UID e talvez apenas vincule tudo o que é necessário ao FHS. Essa pode ser a solução mais ideal que eu poderia buscar, embora a maioria funcione, pois cada uma delas precisaria de um conjunto de permissões em seu "manifesto", talvez um menu durante a instalação que o usuário possa dar e receber conforme necessário.
- Alguém tem uma boa referência que explica a sintaxe desses arquivos? Não sou muito versado em XML, para não mencionar que seu uso geralmente depende do aplicativo que o interpreta.
- Eu entendo o
packages.list
arquivo, com exceção danull
entrada na última coluna, alguém pode explicar isso?