【发布时间】:2014-11-10 14:51:57
【问题描述】:
我一直在研究 SEAndroid,并且一直试图了解如何给出进程域。
到目前为止,我得到的是在 init.rc 文件中,在一些服务声明下,有一个名为 seclabel 的令牌:
service adbd /sbin/adbd --root_seclabel=u:r:su:s0
class core
socket adbd stream 660 system system
disabled
seclabel u:r:adbd:s0
稍后在 init.c 中由 setexeccon 设置为写入的上下文:
if (svc->seclabel) {
if (is_selinux_enabled() > 0 && setexeccon(svc->seclabel) < 0) {
ERROR("cannot setexeccon('%s'): %s\n", svc->seclabel, strerror(errno));
_exit(127);
}
}
在上面的示例中,域将是 adbd。
但是我没有找到当服务声明中没有 seclabel 令牌时会发生什么。 init.c 中发生的事情是它不会调用 setexeccon,意思是……保留父域?
致电:
ps -Z
在显示所有进程及其域的 adb shell 中,以其他方式显示。
For example, the servicemanager in init.rc:
class core
user system
group system
critical
onrestart restart healthd
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
但调用 ps -Z 显示:
u:r:servicemanager:s0 system 53 1 /system/bin/servicemanager
怎么了?!
【问题讨论】:
标签: android android-source selinux