Определение политики SELinux для системной службы Android:Как настроить?
ранее я написал автономный демон для доступа к пользовательскому устройству (/dev/mydev0). Глядя на источник AOSP, я решил, что мне нужны политики установки в следующих файлах, чтобы заставить его работать:
новый файл устройства.те, содержащие:
type mydev_device, dev_type;
новый файл mydevsrvc.te containing
# service flash_recovery in init.rc
type mydevsrvc_type, domain;
type mydevsrvc_type_exec, exec_type, file_type;
init_daemon_domain(mydevsrvc_type)
allow mydevsrvc_type mydev_device:chr_file rw_file_perms;
редактировать по умолчанию, чтобы добавить:
/dev/mydev[0-9]* u:object_r:mydev_device:s0
отредактированные service_contexts для добавления:
mydevsrvc u:object_r:mydevsrvc_type:s0
и запустил демон, отредактировав init.Фло.ПДУ, чтобы включить эти строки:
service mydevsrvc /system/bin/mydevsrvc
class main
user system
group system
seclabel u:r:mydevsrvc_type:s0
oneshot
теперь мне нужно получить доступ к устройству в приложениях android, поэтому я должен изменить демон в системную службу android.
Я могу запустить службу (поток) с помощью boot_completed intent как описано в предыдущий вопрос
Я не могу понять, как настроить политики SELinux, чтобы эта служба java также могла получить доступ к файлу dev.
[Update] я продолжал использовать привилегированный демон для этого цель. Моя служба java подключается к демону через сокеты. У меня нет лучшего решения.
3 ответов
я, наконец, понял ответ. Разместите его здесь, потому что там обязательно будет SEPolicy noobs, как я, ищущий аналогичные ответы.
для этой работы мне нужно было получить доступ к файлу устройства из моего java-приложения, которое реализует мою службу.
мне нужно было добавить следующее правило в мой каталог sepolicy, в новый файл:
allow system_app mydev_device:chr_file rw_file_perms;
кроме того, необходимо сделать мой сервис приложение работает в system_app
домен. Для этого мне нужно кому:
- установить в
priv_app
во время сборки Android. - подпишите его с ключом платформы
- объявить общий идентификатор пользователя в манифесте:
android.uid.system
. Я обнаружил, что без этого приложение работает вplatform-app
домен и не смог получить доступ к моему файлу устройства даже с соответствующим изменением в правиле SEPolicy. Не знаю почему, но я не потрудился отладить.
также может быть возможно запустить мое приложение службы в mydevsrvc_type
домен. Я не знал, как это сделать. что, или от того, что будет работать.
вот краткое резюме шагов, необходимых для реализации SELinux на вашем устройстве Android:
добавить поддержку SELinux в ядро и конфигурацию. Предоставьте каждой службе (процессу или демону), запущенной из init, свой собственный домен. Выявление этих услуг: Обзор init..rc-файл и поиск всех сервисов. Изучение предупреждений формы init: внимание! Имя службы требует определенного домена SELinux; пожалуйста, исправьте! в вывод dmesg. Проверка вывода PS-Z | grep init, чтобы увидеть, какой службы работают в домене init. Обозначьте все новые процессы, драйверы, сокеты и т. д. Все объекты должны быть помечены правильно, чтобы обеспечить их правильное взаимодействие с применяемыми политиками. Примеры создания имен меток см. В разделе метки, используемые в AOSP. Установите политики безопасности, которые полностью охватывают все метки и ограничивают разрешения до их абсолютного минимума. В идеале, OEMs начинают с политик в AOSP, а затем строят на них свои собственные настройки.
дополнительные https://source.android.com/security/selinux/implement.html
возможно, добавьте строку в свой ueventd.rc-файл или проект, специфичный для предоставления разрешения