У меня есть сделанный на заказ демон, который я добавляю в дерево исходных текстов 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 назад к энтузиастам андроида - он продолжает двигаться, может кто-нибудь, пожалуйста, помогите мне!