2014-11-10 1 views
2

SEAndroid를 살펴 봤습니다. 프로세스 도메인이 어떻게 제공되는지 이해하려고 노력해 왔습니다.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); 
    } 
} 

위의 예에서 도메인은 적합합니다.

하지만 서비스 선언에 seclabel 토큰이 없으면 어떻게되는지 알 수 없습니다. init.c에서 일어나는 일은 setexeccon을 호출하지 않는다는 것입니다. 부모 도메인을 유지 하시겠습니까?

호출을 : ADB 쉘에서

ps -Z 

, 모든 프로세스와 도메인을 보여주고, 그렇지 않으면 보여줍니다.

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 

하지만 추신 -Z에 전화를 보여줍니다 :

u:r:servicemanager:s0   system 53 1  /system/bin/servicemanager 

일 뭐죠?!

답변

4

좋아, 코드를보고 결국 대답을 얻었다!

파일 : 이것은 어떤 입력에 따라 각각의 프로세스에 대한 보안 설정 (출력)를 정의

isSystemServer=true domain=system_server 
user=system domain=system_app type=system_app_data_file 
user=bluetooth domain=bluetooth type=bluetooth_data_file 
user=nfc domain=nfc type=nfc_data_file 
user=radio domain=radio type=radio_data_file 
user=shared_relro domain=shared_relro 
user=shell domain=shell type=shell_data_file 
user=_isolated domain=isolated_app levelFrom=user 
user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user 
user=_app domain=untrusted_app type=app_data_file levelFrom=user 

/외부/sepolicy/안드로이드 화상의 루트 파일 시스템에 발견 seapp_contexts은 다음 내용을 포함 .

시스템 서버가 그 도메인이

system_server 또는 마지막 줄에있을 것입니다 자사의 경우 :

_app 키워드 스탠드 우리는 첫 번째 줄이 예에서 볼 수 규칙이 연결되어 있지 않은 모든 앱에 대해 따라서 기본적으로 응용 프로그램 도메인은 untrusted_app이고 파일은 app_data_file이됩니다.

파일의 구문에 대한 자세한 설명서는 파일 내에 있습니다.