我的音频 HAL 中有一个 unix 套接字守护进程,我需要从我的应用连接到它。
我收到如下 SELinux 拒绝日志:
08-08 10:38:01.939 2622-2622/com.xxx.xxx.xxx W/ksetsdk.xxx: type=1400 audit(0.0:511): avc: denied { connectto } for path=0023xxx scontext=u:r:system_app:s0 tcontext=u:r:audioserver:s0 tclass=unix_stream_socket permissive=0
即使我的应用程序使用平台 key 签名、安装在 system.img 中并作为系统运行,也会打印此信息:
root@hikey:/ # ps | grep xxx
system 2619 1893 1561788 86956 SyS_epoll_ 0000000000 S com.xxx.xxx.xxx
root@hikey:/ # ps -Z | grep xxx
u:r:system_app:s0 system 2619 1893 1561788 86736 SyS_epoll_ 0000000000 S com.xxx.xxx.xxx
root@hikey:/ #
并且我添加了 SEPolicy 如下:
auditallow system_app audioserver:unix_stream_socket { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown connectto };
任何人都可以指导我了解我错过的内容吗? AOSP SEPolicy 中是否有任何规则与此相矛盾?如何让它发挥作用?
最佳答案
在我构建 aosp 和更改 SEPolicy 规则时肯定存在一些同步问题。
我做了更详尽的测试并发现:
(1) 当应用程序通过平台 key 签名,并在 list 中请求系统 uid 时,它作为 system_app 运行并且遵循以下规则:
auditallow system_app audioserver:unix_stream_socket { connectto };
(2) 当应用程序通过平台 key 签名,但不在 list 中请求系统 uid 时,它作为 platform_app 运行,但遵循规则不工作:
auditallow platform_app audioserver:unix_stream_socket { connectto };
(3) 如果 App 没有被平台 key 签名,它作为 priv_app 运行,并且下面的规则不工作:
auditallow priv_app audioserver:unix_stream_socket { connectto };
我一定是在测试 AOSP 时混淆了 AOSP 中内置的规则。
我仍然是个谜,为什么 priv_app 或 platform_app 不能工作,但 system_app 可以用类似的规则。
关于android - 为什么 SELinux 拒绝此访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45566313/