转自:http://www.linuxidc.com/Linux/2011-04/35014.htm

通过property_set("ctl.start", service_xx);

来启动init.rc中的service是一个很方便方法来调用某个可执行程序或某个脚本程序

service service_xx  /system/bin/xx

disabled

oneshot

但在非AID_ROOT、AID_SYSTEM 用户的进程中调用ctl.start ctl.stop会碰到权限问题:

system/core/init/property_service.c

/*  
 * White list of UID that are allowed to start/stop services.  
 * Currently there are no user apps that require.  
 */  
struct {   
    const char *service;   
    unsigned int uid;   
    unsigned int gid;   
} control_perms[] = {   
    { "dumpstate",AID_SHELL, AID_LOG },   
     {NULL, 0, 0 }   
};   
  
/*  
 * Checks permissions for starting/stoping system services.  
 * AID_SYSTEM and AID_ROOT are always allowed.  
 *  
 * Returns 1 if uid allowed, 0 otherwise.  
 */  
static int check_control_perms(const char *name, int uid, int gid) {   
    int i;   
    if (uid == AID_SYSTEM || uid == AID_ROOT)   
        return 1;   
  
    /* Search the ACL */  
    for (i = 0; control_perms[i].service; i++) {   
        if (strcmp(control_perms[i].service, name) == 0) {   
            if ((uid && control_perms[i].uid == uid) ||   
                (gid && control_perms[i].gid == gid)) {   
                return 1;   
            }   
        }   
    }   
    return 0;   
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zmyde2010/archive/2011/04/09/6312615.aspx

只有uid == AID_SYSTEM || uid == AID_ROOT

或符合 control_perms[] = {
    { "dumpstate",AID_SHELL, AID_LOG },
     {NULL, 0, 0 }
}; 的uid进程才有权限star/stop services

因此,如果我们碰到了权限问题,根据log提示,在/system/core/include/private/Android_filesystem_config.h

中查到进程定义,添加到control_perms[]列表

比如,uid ==AID_WIFI的某个程序需要权限启动service_xx

control_perms[] = {
    { "dumpstate",AID_SHELL, AID_LOG },

+  { "service_xx ",AID_WIFI, AID_WIFI},
     {NULL, 0, 0 }
};

Android: 启动init.rc 中service的权限问题【转】的更多相关文章

  1. Android 重定向 init.rc中服务的输出

    在init.rc中运行的服务,由于系统启动的时候将标准输出重定向到了/dev/null, 所以服务中的打印信息都不可见. 但调试时可能需要看到其中的打印信息,因此就有了logwrapper这个工具:l ...

  2. Android如何配置init.rc中的开机启动进程(service)【转】

    本文转载自:http://blog.csdn.net/qq_28899635/article/details/56289063 开篇:为什么写这篇文章 先说下我自己的情况,我是个普通的大四学生,之前在 ...

  3. init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件

    Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...

  4. Android使用init.rc触发脚本实现隐藏内置应用

    [实现逻辑] 通过在property_service.c中设置标志位,在设置中实现接口改变标志位, 使用init.rc中声明的服务来侦听标志位的变化,显式启动声明的服务,执行对应的脚本,把应用后缀从a ...

  5. Android 的 init.rc 文件简介【转】

    转自:http://blog.csdn.net/yimiyangguang1314/article/details/6268177 init.rc由许多的Action和Service组成.每一个语句占 ...

  6. Android5.1 在init.rc 中添加自己的服务【转】

    本文转载自:http://blog.csdn.net/VOlsenBerg/article/details/71085610 我有一个需求就是在Android系统开机的时候把一个配置文件放到Andro ...

  7. Android修改init.rc和init.xx.rc文件【转】

    本文转载自:https://blog.csdn.net/u013686019/article/details/47981249 一.文件简介 init.rc:Android在启动过程中读取的启动脚本文 ...

  8. Android 启动后台运行程序(Service)

    Android开发中,当需要创建在后台运行的程序的时候,就要使用到Service.Service 可以分为有无限生命和有限生命两种.特别需要注意的是Service跟Activities是不同的(简单来 ...

  9. Android init.rc解析【转】

    转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. ...

随机推荐

  1. angularjs源码分析之:angularjs执行流程

    angularjs用了快一个月了,最难的不是代码本身,而是学会怎么用angular的思路思考问题.其中涉及到很多概念,比如:directive,controller,service,compile,l ...

  2. timersmanager 解析

    最近在看crtmp源代码,看到timersmanager 模块时感觉很难理解,花了不少时间反复思考该模块 的逻辑,现在思考的结果记录下来,方便以后查阅. 构造函数中将处理时间方法传进来,将_lastT ...

  3. PowerDesigner使用技巧

    1.PowerDesigner 批量修改索引或主键对应的表空间 http://blog.sina.com.cn/s/blog_701218960100l0h4.html   2.去掉Oracle生成的 ...

  4. ngcordova 监控网络制式改变

    ngcordova 监控网络制式改变 keywords cordova,phonegap,ionic,network,网络制式 API参考 http://ngcordova.com/docs/plug ...

  5. 【BZOJ】【1069】【SCOI2007】最大土地面积

    计算几何/旋转卡壳 从已知点中选出四个使得选出的四边形面积最大,很明显我们应该在凸包上搞. 我一开始的思路是:枚举 i ,找到 i 的对锺点cur1,这两个点将凸包分成了两半,我们在左半中枚举一个 j ...

  6. Leetcode#99 Recover Binary Search Tree

    原题地址 中序遍历二叉搜索树,正常情况下所有元素都应该按递增排列,如果有元素被交换,则会出现前面元素大于后面的情况,称作反序.由于交换了两个节点,所以通常会有两处反序,但如果是两个相邻节点发生了交换, ...

  7. phonegap上传以及下载图片

    在phonegap中,有时我们需要从服务器下载图片以及上传图片,这个时候可以用到官方提供的一个插件:FileTransfer 首先通过命令添加插件: cordova plugin add org.ap ...

  8. python开发中常用的框架

    以下是15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Django 应该是最出名的 ...

  9. Webpack教程二

    Webpack教程一 开发技巧 启用source-map 现在的代码是合并以后的代码,不利于排错和定位,只需要在config中添加 ... devtool: 'eval-source-map', .. ...

  10. BZOJ 2424: [HAOI2010]订货 费用流

    2424: [HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月 ...