AVC отказано в переходе на Деймон - PullRequest
0 голосов
/ 09 января 2019

У меня есть сделанный на заказ демон, который я добавляю в дерево исходных текстов Android 8.1.

но я получаю сообщение об ошибке:

type=1400 audit(21.610:3): avc: denied { transition } for pid=217 comm="init" path="/system/bin/rfidmanagerd" dev="dm-1" ino=293 scontext=u:r:init:s0 tcontext=u:object_r:rfidmanager_exec:s0 tclass=process permissive=1

вот мой файл rfidmanager.te:

# RFID manager process
type rfidmanager, coredomain;
type rfidmanager_exec, exec_type, file_type;

init_daemon_domain(rfidmanager)
domain_auto_trans(init, rfidmanager_exec, rfidmanager)

# Access system/etc/rfid
allow rfidmanager sysfs:file rw_file_perms;
allow rfidmanager tmpfs:chr_file { read write };
allow rfidmanager sysfs:file write;
allow rfidmanager system_file:file r_file_perms;
# Access /data/misc/rfid.
allow rfidmanager misc_rfid_file:dir create_dir_perms;
allow rfidmanager misc_rfid_file:file create_file_perms;
allow rfidmanager misc_rfid_file:file rw_file_perms;
allow rfidmanager misc_rfid_file:file { read write setattr append unlink link rename };
allow rfidmanager misc_rfid_file:fifo_file { create open read write };
# Access /dev/circchar
allow rfidmanager rfidhal_device:chr_file r_file_perms;
allow rfidmanager rfidhal_device:chr_file { read write };
# Access serial ports
allow rfidmanager tty_device:chr_file r_file_perms;

вот мои file_contexts:

/system/bin/rfidmanagerd        u:object_r:rfidmanager_exec:s0

в моем файле init.te для отказа у меня есть:

allow init rfidmanager_exec:process {transition};

на устройстве должен быть установлен SELinux в принудительном режиме. и вот как я запускаю свой сервис в файле init.rc

service rfidmanagerd /system/bin/rfidmanagerd -c /system/etc/rfid/rfidmanagerd.conf
        class core
        seclabel u:object_r:rfidmanager_exec:s0
        user root
        group root system
        oneshot
start rfidmanagerd

когда я пытаюсь запустить службу вручную, т.е.

su system 
./system/bin/rfidmanagerd

запускается, но с помощью ps -eZ я вижу, что сервис выглядит следующим образом:

u:r:su:s0 system 859 1 4524 360 poll_schedule_timeout 0 S rfidmanagerd

однако оно должно быть с u:object_r:rfidmanager_exec:s0, как я определил в моих контекстах.

он не запускается автоматически, что понятно по ошибке отказа SELinux, однако любая комбинация разрешающих правил для этого конкретного отказа, похоже, игнорируется.

когда я пытаюсь сделать start rfidmanagerd (как root) в терминале, я получаю

[  474.879385] init: starting service 'rfidmanagerd'...
[  474.885868] init: property_set("ro.boottime.rfidmanagerd", "474879774055") failed: property already set
[  474.915929] init: cannot execve('/system/bin/rfidmanagerd'): Permission denied
[  474.925563] type=1400 audit(480.580:9): avc: denied { transition } for pid=998 comm="init" path="/system/bin/rfidmanagerd" dev="dm-1" ino=381 scontext=u:r:init:s0 tcontext=u:object_r:rfidmanager_exec:s0 tclass=process permissive=0

Я понимаю отрицание, но не понимаю, почему мое правило разрешения не исправляет это ...

все работает нормально, когда я нахожусь в разрешающем режиме, но, как я сказал, я не могу иметь его в разрешающем режиме.

Любая помощь будет принята с благодарностью!

Спасибо

ОБНОВЛЕНИЕ - У меня был этот переход от энтузиастов андроида к STACKEXCHANGE назад к энтузиастам андроида - он продолжает двигаться, может кто-нибудь, пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 17 января 2019

для тех, у кого похожая проблема ... Android 8.1 нуждается в основном домене, чтобы при компиляции selinux не существовало правило "ниже"!

Однако, есть некоторые проблемы с selinux, которые разрешают setexeccontext.

поэтому первая строка в моем .te файле должна читаться -

type rfidmanager, coredomain, domain;

вместо

type rfidmanager, coredomain;

Надеюсь, это кому-нибудь поможет.

...