Я долго размышлял; где Android хранит информацию об идентификаторах пользователей и групп?
Например, в стандартном Linux информация о пользователях и группах хранится в /etc/passwd
и /etc/group
, соответственно. Когда вы добавляете пользователя в группу, его или ее имя пользователя / uid добавляются в список пользователей в этой группе, например, запись моей аудиогруппы /etc/group
выглядит следующим образом:
audio:x:29:pulse,edge-case
Где импульс отображается в uid демона pulseaudio, а пограничный регистр отображается в мой uid (1000) на моем компьютере с Linux.
Насколько я понимаю, каждое приложение, которое устанавливается на Android, получает свои собственные uid и gid, и это является основой «песочницы» приложений, которые происходят на Android, поскольку все они запускаются в своем собственном процессе и не могут получить доступ к данным другого процесс или файлы, принадлежащие другому приложению, если в файле манифеста, созданном программистами приложения, нет декларации, которая определяет, какая информация должна быть передана другим приложениям, а какая нет. Это также, как приложения получают или, скорее, запрашивают доступ к сетевым службам во время установки, запрашивая добавление в группу ИНТЕРНЕТ или что-то в этом роде. Не указывайте меня в имени группы NET NET, это может быть больше похоже на INET или INET6, так или иначе, я знаю, что есть несколько уровней доступа к сети, которые могут быть предоставлены приложению через этот механизм на Android.
У меня вопрос, где эта информация хранится в Android?
Более того, возможно ли изменить?
Я хотел бы интегрировать в него стек glibc и данные в нем в моих /etc/{passwd,group}
файлах, поверьте мне, они существуют на моем телефоне, я даже установил apt со многими другими вкусностями.
Обновление: делаю больше поисков, и это может быть то, что я ищу.
Мне нужно будет копнуть глубже и убедиться, что это все, что я ищу.
Обновление: (5:40 27 июня 2014 г.)
Поскольку кто-то думает, что я не знаю, что я делаю или о чем говорю, позвольте мне уточнить;
Пользовательские UID в Android смещены на 100000, а пользовательские UID смещены на 10000 при сопоставлении с номером пользователя _ номером приложения, следовательно, когда ps показывает что-то вроде u0_a10, что означает, что пользователь с UID 100000 запускает приложение с UID 10010,
Я извлек UID и имена пользователей / демонов из system / core / include / private / android_filesystem_config.h и использовал их для обновления файлов / 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, а также с моим Daemon или системным пользовательским UID из стека glibc.
Подробнее об этом вы можете прочитать в книге Карима Ягмура «Встроенный Android». Продано здесь
Моя цель - заставить работать такие программы, как nvlc, но мне нужно синхронизировать UID и GID, чтобы Android знал о моих пользователях и группах, к которым они принадлежат, чтобы, например, мой интеллектуальный пользователь имел доступ к аудиоустройствам.
Также мне нужно сообщить Android о Postres и его членстве в сетевой группе, чтобы он мог открывать сокеты и разрешать доступ к базам данных. Я пока отключил PARANOID_NETWORKING в ядре, но этот хак только делает Android таким же безопасным, как и ванильный Linux, не меньше. Было бы неплохо сохранить настройку параноика и применить групповые права доступа к тем демонам / пользователям, которые я считаю нужными.
Это сделало бы Android отличной операционной системой для общедоступных серверов с такими параноидальными и точно настроенными элементами управления. Представьте себе, что у вас есть доступ к Kerberos, LDAP, PAM или при использовании телефона в качестве WAP с настроенным Radius, и все они доступны в Debian и других дистрибутивных репозиториях бесплатно.
Я все понял, мне просто нужно знать, как обновить базу данных Android UID / GID, которая обновляется каждый раз, когда вы устанавливаете приложение, поэтому я знаю, что это возможно.
Обновление: (19:08 30 июня 2014 г.)
После просмотра данных в следующих файлах ...
/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
записи в последнем столбце, кто-нибудь может объяснить это?