当前位置:   article > 正文

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

android init.rc service ctrl.start

通过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;

}

只有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中服务的输出

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

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

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

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

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

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

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

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

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

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

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

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

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

Android init.rc解析【转】

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

随机推荐

html submit 登录

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/318958
推荐阅读
相关标签
  

闽ICP备14008679号