gpt4 book ai didi

android - avc 拒绝在守护进程上进行转换

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:37 24 4
gpt4 key购买 nike

我有一个定制的守护进程,我正在添加到我的 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;

这是我的文件上下文:

/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

我理解拒绝,但不明白为什么我的允许规则没有解决这个问题......

当我处于宽容模式时,一切都运行良好,但正如我所说,我不能让它处于宽容模式。

如有任何帮助,我们将不胜感激!

谢谢

更新——我已经将它从 ANDROID ENTHUSIASTS 迁移到 STACKEXCHANGE 并返回到 ANDROID ENTHUSIASTS——它一直在移动,有人可以帮助我吗!

最佳答案

对于遇到类似问题的任何人....Android 8.1 在编译 selinux 时需要核心域没有 neverallow 规则!

但是,这在 selinux 解析 setexeccontext 时存在一些问题。

所以我的 .te 文件中的第一行应该是 -

type rfidmanager, coredomain, domain;

不仅仅是

type rfidmanager, coredomain;

我希望这对任何人都有帮助。

关于android - avc 拒绝在守护进程上进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com