我在基于AOSP的Android 7.1.2(更准确地说是基于sony开放设备树)上正确运行自定义selinux策略时遇到一些麻烦.
我的问题是审计日志不断告诉我我实际添加的文件访问规则丢失.我还将audit2allow创建的规则复制到我的策略文件中,但即使那些规则也没有正常工作.
那么,让我们深入了解细节:
我创建了一个名为vendor_app的自定义域.此域根据其签名分配给应用程序.我在mac_permissions.xml中添加了一个条目来分配seinfo字段供应商.在seapp_contexts中,我像这样分配vendor_app域:
user=_app seinfo=vendor domain=vendor_app type=app_data_file levelFrom=user
Run Code Online (Sandbox Code Playgroud)
我的应用程序在vendor_app上下文中正确启动:
# ps -Z | grep permissiontest
u:r:vendor_app:s0:c512,c768 u0_a109 4110 508 1620732 79584 SyS_epoll_ 0000000000 S com.vendor.android.permissiontest
Run Code Online (Sandbox Code Playgroud)
所以,现在对于根本不起作用的部分.在vendor_app上下文中运行的应用程序将获得/ persist/vendor中文件的读/写访问权限.为了创建nessesary规则,我将一个名为vendor.te的文件添加到设备目录中的sepolicy文件夹中,其中包含以下内容:
type vendor_app, domain;
type vendor_file, file_type, data_file_type;
# permissive vendor_app;
app_domain(vendor_app)
net_domain(vendor_app)
bluetooth_domain(vendor_app)
allow vendor_app persist_file:dir r_dir_perms;
allow vendor_app vendor_file:dir create_dir_perms;
allow vendor_app vendor_file:file create_file_perms;
allow vendor_app audioserver_service:service_manager find;
allow vendor_app cameraserver_service:service_manager find; …Run Code Online (Sandbox Code Playgroud) 我想在启动时在 Android 5.1 的目标板上执行一个可执行文件,所以我在 init.rc 中添加了这个:
on boot
start myservice
service myservice /system/bin/myservice
#class main
user root
group root
#oneshot
Run Code Online (Sandbox Code Playgroud)
我做了拆包和重新打包的工作。
但是,当进行更改时,屏幕会继续打印:
init warning: Service myservice needs a SELinux domain defined. Please fix.
type=1400 ... avc:denied ... scontext ... tcontext ... #some annoying warning messages like this
Run Code Online (Sandbox Code Playgroud)
SELinux 对我来说似乎是一个巨大的项目。我只是想避免这种情况。我尝试了两种方法:
1. setenv kernelargs 'console=ttyS0,115200n8 rootdelay=1 selinux=0' and saveenv
2. set enforce 0
Run Code Online (Sandbox Code Playgroud)
对于方法1,printenv给出结果:
kernelargs=console=ttyS0,115200n8 rootdelay=1 selinux=0
Run Code Online (Sandbox Code Playgroud)
所以你看,已经发生了变化。但是警告消息在重新启动后继续打印。
对于方法 2,它说:
Could not set enforce status. Permission denied.
Run Code Online (Sandbox Code Playgroud)
所以现在我陷入困境不知道去哪里。我的问题: …
对于我的非root设备(我不允许root,所以我需要找到另一种方法),如果我这样做的话
adb shell setprop MY_PROP 1
Run Code Online (Sandbox Code Playgroud)
其次是
adb shell getprop MY_PROP
Run Code Online (Sandbox Code Playgroud)
我得到一个空白.
我该如何设置房产?