为了能够清楚的理解进程的上下文,我们来做一个试验,
通过在rc文件中进行注册启动一个进程,即让init进程来fork出一个进程。
以/system/bin/service程序为例,我们在里面增加一个长时间的sleep,以便于我们观察。
增加service.te
#service.te
typemTestService, domain, domain_deprecated, mlstrustedsubject;
typemTestService_exec, exec_type, file_type;
这里是关键操作,进行domain的转换
init_daemon_domain(mTestService)
init_daemon_domain(mTestService)
也可以使用
domain_auto_trans(init,mTestService _exec, mTestService)
domain_auto_trans可以设置3个参数,能力更强,如
domain_auto_trans(init, vold_exec, vold)
在rc文件中增加
servicetest /system/bin/service
class main
user system
group system
oneshot
file_contexts中增加
/system/bin/service u:object_r:mTestService_exec:s0
$ ps-Z|grep service
u:r:mTestService:s0 system 507 1 20944 2296 hrtimer_na 0000000000 S /system/bin/service
通过这样的例子,我们就可以理解进程的上下文是怎么设置的了。
另外,如果我们仅仅在rc中进行服务的启动设置,而不设置进程的context,如
typemTestService, domain, domain_deprecated, mlstrustedsubject;
typemTestService_exec, exec_type, file_type;
那么,服务会启动失败,在kernel log中可以看到