Android ошибка службы инициализации неверное ключевое слово 'u: object_r: system_file: s0 - PullRequest
1 голос
/ 13 января 2020

Я хочу запустить службу на нескольких планшетах (VONINO NAVO P), чтобы они служили фоторамкой для цифровой рекламы. То, чего я пытаюсь добиться, - это запустить некоторые команды при загрузке, и я застрял. Я создал digitalads.r c в системе / etc / init, которая будет выполнять /system/bin/digitalads.sh, откуда мне нужно будет выполнить несколько команд, таких как:

svc power stayon true
settings put system screen_brightness 255
pm disable com.android.systemui
settings put system screen_off_timeout 999999999
settings put system accelerometer_rotation 0
settings put global airplane_mode_on 0
svc bluetooth disable
monkey -p my.app -c android.intent.category.LAUNCHER 1
and some other custom commands that they will update the contents of media files

my .r c файл:

tulip-f708:/ # cat /system/etc/init/digitalads.rc                                                                          
service digitalads /system/bin/digitalads.sh
    disabled
    user root
    group root
    u:object_r:system_file:s0

on property:sys.boot_completed=1
   start digitalads

вывод dmesg

tulip-f708:/ # dmesg | grep digitalads                                                                                     
[    6.512868] init: /system/etc/init/digitalads.rc: 5: invalid keyword 'u:object_r:system_file:s0'
[    6.522694] init: (Parsing /system/etc/init/digitalads.rc took 0.01s.)
[   44.546434] init: Service digitalads does not have a SELinux domain defined.

SE linux вывод

tulip-f708:/ # getenforce 
Enforcing
tulip-f708:/ # setenforce 0
tulip-f708:/ # getenforce                                                                                                  
Permissive

другие службы, запущенные под u: object_r: system_file: s0

tulip-f708:/ # ls -Z /system/bin/                                                                                          
u:object_r:system_file:s0           4d78d2ea-a631-70fb-aaa787c2b5773052.ta 
u:object_r:system_file:s0           a98befed-d679-ce4a-a3c827dcd51d21ed.ta 
u:object_r:system_file:s0           acpi                                   
u:object_r:system_file:s0           am                                     
u:object_r:system_file:s0           app_process                            
u:object_r:zygote_exec:s0           app_process32                          
u:object_r:zygote_exec:s0           app_process64                          
u:object_r:system_file:s0           applypatch                             
u:object_r:system_file:s0           appops                                 
u:object_r:system_file:s0           appwidget                              
u:object_r:system_file:s0           arping 
............................. 

Я также пытался распаковать boot.img, чтобы изменить init.r c, но потерпел неудачу при его возврате (уложил два из них). Не говоря уже о том, что root им пришлось связаться напрямую с производителем ...

Некоторые подсказки помогут мне! Thx

1 Ответ

1 голос
/ 13 января 2020

Кажется, в ваших .rc файлах отсутствует ключевое слово seclabel. Ваша декларация сервиса должна выглядеть следующим образом:

service digitalads /system/bin/digitalads.sh
    disabled
    user root
    group root
    seclabel u:object_r:system_file:s0

Изменить в отношении вашего нарушения SE Linux: в сообщении говорится, что init не может запустить программу, помеченную как system_file. Это означает, что вы должны изменить правила SE Linux. Лучше всего добавить новую метку, указав c к вашему сервису:

  • Укажите папку, в которую вы хотите добавить свою политику. Это в некоторой степени c для вашей настройки, поэтому я не могу дать вам точный ответ. Проверьте наличие .te файлов в вашем исходном коде. Основные Android политики находятся в system/sepolicy/, но если в вашей настройке есть специальные политики SE где-то в devices/ или vendor/, это расположение будет лучше подходить для вашей настройки (потому что это упрощает обновление до новая версия Android, когда ваши настройки настолько изолированы, насколько это возможно).
  • В этой папке создайте новый файл политики, например, digitalads.te. Добавьте следующие правила:
type digitalads_exec, system_file_type, exec_type, file_type;
type digitalads domain;
init_daemon_domain(digitalads)
  • В той же папке должен быть файл file_contexts: добавьте строку типа
/system/bin/digitalads u:object_r:digitalads_exec:s0
  • (При загрузке с этим изменением ls -Z /system/bin/digitalads должен показывать эту метку.)

  • Для метки безопасности в вашем файле .rc замените system_file на digitalads.

  • (Проверьте вывод dmesg, а также ps -Z, чтобы убедиться, что ваша служба помечена правильно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...