Android: 启动init.rc 中service的权限问题【转】

转自: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 }
};

时间: 2024-10-28 06:05:06

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

ndroid init rc- init.rc中service 各个参数及每个参数的意义

问题描述 init.rc中service 各个参数及每个参数的意义 android init.rc中service的各个参数及每个参数的意义,有人知道是什么吗?网上查了都是讲init.rc的语法: service [ ]* 这样介绍,可是argument有什么选项以及选项的参数分别是什么意思没有讲,麻烦各位帮帮忙.比如zygote这个服务: service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start

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

转自:http://blog.csdn.net/yimiyangguang1314/article/details/6268177 init.rc由许多的Action和Service组成.每一个语句占据一行,并且各个关键字被空格分开. 由 # (前面允许有空格)开始的行都是注释行(comment) 一个actions 或 services 的开始隐含声明了一个新的段,所有commands 或 options 属于最近的声明.在第一个段之前的 commands 或 options 都会被忽略 每一

android framework init.rc的理解问题

问题描述 android framework init.rc的理解问题 5C 网上看到下面的话:{Actions(动作)表示一系列的命令,通常在Triggers(触发条件)中调用,动作和触发条件的形式为: on < triger> 动作的使用示例如下: on init export PATH /sbin:/system/sbin:/system/bin:/system/xbin mkdir /systeminit表示一个触发条件,这个触发事件发生后,进行设置环境变量和建立目录的操作称为一个&q

Android init.rc文件简单介绍_Android

Android init.rc文件简单介绍 init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(Android Init Language,这里简称为AIL)的脚本写成的文件. 该文件在ROM中是只读的,即使有了root权限,可以修改该文件也没有.因为我们在根目录看到的文件只是内存文件的镜像.也就是说,android启动后,会将init.rc文件装载到内存.而修改

Android init.rc文件格式解析

/***************************************************************************** * Android init.rc文件格式解析 * 声明: * 当我们需要对Android进行一些module移植的时候,往往会涉及到init.rc文件的 * 修改,譬如权限.运行service程序等等,于是理解文件格式就成了需求. * * 2015-12-31 深圳 南山平山村 曾剑锋 **************************

Android init.rc文件简单介绍

Android init.rc文件简单介绍 init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(Android Init Language,这里简称为AIL)的脚本写成的文件. 该文件在ROM中是只读的,即使有了root权限,可以修改该文件也没有.因为我们在根目录看到的文件只是内存文件的镜像.也就是说,android启动后,会将init.rc文件装载到内存.而修改

Android的init过程详解(一)

Android的init过程(二):初始化语言(init.rc)解析 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10      本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现.      Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedor

Android的init过程详解(一)init的初始化

本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现. Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedora Linux类似.只是Android在应用层专门为移动设备添加了一些特有的支持.既然An

Android启动过程的分析

本文讲的是Android启动过程的分析, 大多数智能手机用户使用的Android操作系统的功能和操作过程都比较复杂. 对于Android操作系统的初学者来说,引导过程,只不过是终端用户的一些花哨的图像和动画.但当你阅读完这篇文章后,你可能会打破原来对引导过程的狭隘思维. 基本核心过程 引导ROM >引导加载程序 >内核 > init过程> Zygote > Dalvik V M >系统服务器 >管理器 该过程是Android启动的核心过程,下面让我来详细介绍每一步