Определение политики 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 домен. Для этого мне нужно кому:

  1. установить в priv_app во время сборки Android.
  2. подпишите его с ключом платформы
  3. объявить общий идентификатор пользователя в манифесте: 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-файл или проект, специфичный для предоставления разрешения