sepolicy修改后 快速验证
编译:(只针对 .te 的文件, 如果file_contexts service_contexts 这种文件好像不行)
make selinux_policy -j8 // vendor 和system 都修改了
make selinux_policy_nonsystem -j8 // 只修改 vendor相关的sepolicy
编译成功后,只需要替换如下文件 vendor_sepolicy.cil,即可快速验证
/vendor/etc/selinux/vendor_sepolicy.cil
添加native 服务后 sepolicy 配置:
file_contexts:
#这个可执行程序, 文件本身被配置成 clouddiskd_exec 的 selinux 标签
而当运行时,成为一个进程时,这个进程会被配置成 clouddiskd 的 selinux 标签
/system/bin/clouddiskdaemon u:object_r:clouddiskd_exec:s0
service_contexts :
# clouddiskd 这个进程,他里面有个服务, 也要为这个服务配置 selinux 标签
CloudDiskDaemon u:object_r:clouddiskd_service:s0
clouddiskd.te :
# clouddiskd 是给进程打标签的
# domain 是每个进程都要配置的。 coredomain代表核心进程
type clouddiskd, domain,coredomain;
# clouddiskd_exec是给文件本身打便签的 system_file_type 是指在 system 下面的bin文件type clouddiskd_exec, system_file_type, exec_type, file_type;
typeattribute clouddiskd mlstrustedsubject;# 进程上下文 必须配置这个
init_daemon_domain(clouddiskd)
# 允许 clouddiskd 这个进程能向servicemanager管理服务执行 call transfer ,因为进程clouddiskd中有个服务,需要和servicemanager沟通。
binder_call(clouddiskd, servicemanager)
#允许 clouddiskd 进程 {add find} 服务 clouddiskd_service
add_service(clouddiskd, clouddiskd_service)
# 允许系统服务 发现 native 层的 clouddiskd_service 服务
allow system_server clouddiskd_service:service_manager { find };
allow system_app clouddiskd:binder { call }; # 让系统app 能调用这个服务
# 由于这个进程没有权限访问/data/data/com.tencent.mm 私有数据,所以会报 dac_override dac_read_search 错误
allow clouddiskd self:global_capability_class_set { chown dac_override dac_read_search fowner fsetid setgid setuid sys_admin };
-rwxr-xr-x 1 root shell u:object_r:clouddiskd_exec:s0 27912 2022-04-27 19:09 /system/bin/clouddiskdaemon
u:r:clouddiskd:s0 root 773 1 2161152 3848 binder_ioctl_write_read 0 S clouddiskdaemon
添加系统服务后,sepolicy配置
service_contexts:
# CloudDiskService 是系统服务的名称,通过这个名称就能找到这个服务
CloudDiskService u:object_r:clouddisk_service:s0
service.te:
type clouddisk_service, system_api_service, system_server_service, service_manager_type;