• android HAL 执行权限写法


    一、编写策略文件

             配置产品权限的文件一般放在 /device//sepolicy/ 或 /device//common/sepolicy/ 目录下(也不排除是其它路径的可能性,但肯定是在 device/ 目录下的某个 sepolicy/ 子目录)。在这个目录下,再为不同的部件分别创建相应的子目录,并在这个子目录中新建 *.te 文件和 *_contexts 文件,以添加必要的权限。

    例如:/device/qisi/sepolicy/vendor
    ├── attributes
    ├── file_contexts
    ├── hal_gnss_qisi.te
    ├── hal_qisiaudiocontrol_default.te
    ├── hwservice_contexts
    ├── hwservice.te
    └── system_server.te

    说明下各文件的内容和作用:

    • file_contexts:
        file_contexts 文件名是由 SELinux 框架固定的。我们在 file_contexts 中将 hal_qisiaudiocontrol_default 的可执行文件定义为安全对象。

      /dev/node u:object_r:xxx_device:s0  //给设备节点打上标签                                                                                                            /(vendor|system/vendor)/bin/hw/vendor\.qisi\.automotive\.audiocontrol@2\.1-service u:object_r:qisi_audiocontrol_default_exec:s0                //给HIDL的可执行程序打上标签
      • hwservice_contexts:
           hwservice_contexts文件名由 SELinux 框架固定的。我们在这个文件中将新增的接口定义为一个安全对象,作用和 file_contexts 类似。(如果使用 vndbinder,则应编写 vndservice_contexts
          从 Android 8.0 开始,SELinux 也一分为二成为了 system 部分和 vendor 部分。其中 vendor 部分又因为不同部件使用的 binder 节点不同,从原先唯一的的 service_contexts 中剥离出了 hwservice_contexts 和 vndservice_contexts 两个文件。当使用 /dev/hwbinder 时手动创建前者并在文件中添加定义,当使用 /dev/vndbinder 时创建后者并同样在文件中添加定        义。                                                                                                                                                           

        //给HIDL的服务打上标签                                                                                                            vendor.qisi.automotive.audiocontrol::IAudioControl u:object_r:qisi_audiocontrol_hwservice:s0                                                                                   //u:同样是user之意,它代表创建这个文件的SELinux user。

        1. object_r:文件是死的东西,它没法扮演角色,所以在SELinux中,死的东西都用object_r来表示它的role。
          rootfs:死的东西的Type,和进程的Domain其实是一个意思。它表示root目录对应的Type是rootfs。
          s0:MLS的级别。     

    • hwservice.te:
        hwservice.te文件名依然是固定的。在这个文件中为 demoService 定义了专属的 hwservice 类型,在添加 “注册服务” 权限时会用到。(如果使用 vndbinder,则应编写 vndservice.te

      1. # define qisi_audiocontrol_hwservice as hwservice_manager, so it can be added as a hwservice

      2. type qisi_audiocontrol_hwservice, hwservice_manager_type, protected_hwservice;

        1. qisi_audiocontrol_hwservice.te:
            qisi_audiocontrol_hwservice.te 文件。 这个文件通常以需要添加权限的对象为名。在这个文件中,我们为 qisi_audiocontrol_hwservice 定义了一个专属的安全域,赋予可 qisi_audiocontrol_hwservice 的执行文件以需要的文件属性,并且为 qisi_audiocontrol_hwservice 域添加和 Binder 操作相关的必要权限,比如 “注册为服务”、“允许 hwbinder 调用” 等。
            不同的 HAL 进程或本地服务要操作的文件不同,其实现的作用也不同,所以这个文件里的内容差异也很大。依照最小权限规则,根据自己的实际需要添加权限即可。

           //定义一个新的domain(域),叫做qisi_audiocontrol_default
          type qisi_audiocontrol_default, domain;                                                                   
           //设置定义的域qisi_audiocontrol_default,作为qisi_audiocontrol的server域                                   hal_server_domain(qisi_audiocontrol_default, qisi_audiocontrol)   
                                                                                                                                                          # may be started by init   
          type qisi_audiocontrol_default_exec, exec_type, vendor_file_type, file_type;                                                                                                                             
          init_daemon_domain(qisi_audiocontrol_default)                                                                                                                                                          //qisi_audiocontrol_client和qisi_audiocontrol_server可进程通信          
          binder_call(qisi_audiocontrol_client, qisi_audiocontrol_server)   
          binder_call(qisi_audiocontrol_server, qisi_audiocontrol_client)                                                                                                                                                                                                                                           /*binder_use(domain)//允许domain域中的进程使用binder通信 
          binder_call(clientdomain, serverdomain) //允许clientdomain和serverdomain域中的进程通信     
          binder_service(domain) 标志domain为service端                */
                                                                         
          add_hwservice(qisi_audiocontrol_server, qisi_audiocontrol_hwservice)                                                                                       
          allow qisi_audiocontrol_client qisi_audiocontrol_hwservice:hwservice_manager find;                                 
          get_prop(qisi_audiocontrol, hwservicemanager_prop)                                                                                              
          allow qisi_audiocontrol_default mnt_vendor_file:dir rw_dir_perms;                                                                                                                   
          hal_client_domain(qisi_audiocontrol_default, hal_vehicle)                                                                                                                                                                                                                                                                     //允许(源)carservice_app对(目标)qisi_audiocontrol_hwservice有查找权限
          allow carservice_app qisi_audiocontrol_hwservice:hwservice_manager find;                                                                                                                                                                                        
          allow carservice_app qisi_audiocontrol_default:binder { call transfer };
          allow qisi_audiocontrol_default carservice_app:binder { call transfer };


    二、应用策略文件

             为了使新增的安全规则生效,需要将刚刚创建的目录添加到 Makefile 中,这样一来编译镜像时就可以扫描到了。我们一般把这个改动添加到 /device////BoardConfig.mk

             完全编译后,烧写镜像到设备上。待设备启动后,执行命令 ps -A | grep -i demo ,终于可以看到我们的 qisi_audiocontrol_default HAL 进程已经随系统启动成功。
      如果在系统刚启动时执行命令 logcat | grep -i demo,还可以看到 qisi_audiocontrol_default HAL 注册为 Binder 服务的日志打印:

  • 相关阅读:
    .Net下的Http请求调用(Post与Get)
    【Linux】2022 安装jdk教程,超级详细
    调整亮度、对比度、饱和度和色相
    生成 小程序 URL Scheme
    [git] 根据master更新本地分支
    Vue入门
    Arch/ Manjaro 个人常用命令行
    阿里云张新涛:支持沉浸式体验应用快速落地,阿里云云XR平台发布
    643. 子数组最大平均数I(滑动窗口)
    axios七大特性
  • 原文地址:https://blog.csdn.net/wangbuji/article/details/126230936