디버스의 메소드/시그널에도 스맥을 적용할 수 있습니다.
스맥이 적용된 디버스 메소드/시그널에는 권한이 있는 프로세스만 접근할 수 있습니다.
브로드캐스팅하는 인터페이스라 할지라도 권한이 없으면 접근할 수 없습니다.
스맥이 최초부터 디버스를 지원하진 않았습니다.
하지만, 디버스로 주고받는 정보를 누구에게나 노출하는 것은 위험할 수 있습니다.
따라서 2012년 2월에 한 용자가 디버스에 스맥을 이식해버렸습니다.
그리고 3년이 지난 지금은 스맥의 주요 기능 중 하나가 되었죠.
스맥을 위한 manifest 파일 만드는 법은 이전 포스팅에서 설명한 바 있습니다.
"SMACK 레이블을 긋기 위한 manifest의 모든 것 - 파일편", http://storycompiler.tistory.com/49
이 manifest 파일에서 디버스를 위한 스맥권한도 지정할 수 있습니다.
{service name}.manifest 파일은 패키지가 설치될 때 함께 설치됩니다.
manifest 내용 중 DBUS와 관련된 항목이 있으면,
rpm-security-plugin에 의해서 파싱되어 manifest.{service name}.conf 파일로 추출됩니다.
manifest.{service name}.conf 파일은 디버스 설정파일로 활용되지요.
<assign> <dbus name="org.dbus.name" own="DOMAIN_NAME" bus="system"> <!-- 중략 --> </dbus> </assign>
디버스는 <assign> 태그에서 설정해주어야 합니다.
<assign> 태그는 파일/디렉토리에 스맥룰을 적용할 때도 사용하고 있습니다.
- dbus name : D-Bus의 버스명을 적어줍니다.
- own : dbus-service를 정의한 프로세스의 도메인이름
- bus : "system" 혹은 "session"
<assign> <dbus name="org.dbus.name" own="DOMAIN_NAME" bus="system"> <node name="/org/dbus/object/name"> <interface name="org.dbus.interface.name1"> <method name="methodName1"> <annotation name="org.tizen.smack" value="DOMAIN_NAME::COMPONENT_1" /> </method> <method name="methodName2"> <annotation name="org.tizen.smack" value="DOMAIN_NAME::COMPONENT_2" /> </method> </interface> <interface name="org.dbus.interface.name2"> <annotation name="org.tizen.smack" value="DOMAIN_NAME::COMPONENT_3" /> </interface> </node> </dbus> </assign>
<node> 태그에는 오브젝트 이름을 적어줍니다. <node> 안에는 다수의 <interface>를 적어넣을 수 있습니다.
<interface> 태그에는 인터페이스 이름을 적어줍니다. <interface> 안에는 다수의 <method>를 적을 수 있습니다.
<method> 태그에는 메소드의 이름을 적어줍니다. <method> 내에는 <annotation> 태그가 하나 들어갑니다.
<annotation>에는 메소드에 접근하기 위한 스맥권한을 명시합니다.
annotation name은 스맥을 위한 키이름을 적어야 합니다.
키이름은 플랫폼마다 다를 수 있습니다.
여기서는 타이젠 플랫폼에서 사용하는 org.tizen.smack을 사용하겠습니다.
value에는 스맥레이블을 적으면 됩니다.
<assign> <dbus name="org.dbus.name" own="DOMAIN_NAME" bus="system"> <node name="/org/dbus/object/name"> <interface name="org.dbus.interface.name> <annotation name="org.tizen.smack" value="DOMAIN_NAME::COMPONENT" /> </interface> </node> </dbus> </assign>
위의 예에서는 interface에 속한 모든 method / signal에 공통의 스맥레이블을 적용할 수 있습니다.
<interface> 태그 안에 <method> 대신 <annotation> 태그를 입력했습니다.
그러면 interface에 속한 모든 method에 annotation에서 지정한 스맥레이블이 적용됩니다.
타이젠 플랫폼에서 실제로 사용하고 있는 manifest를 보시죠.
"git://review.tizen.org/framework/system/crash-worker" / tizen_2.3 브랜치,
packaging/crash-worker.manifest 파일에서 디버스 항목을 추려보았습니다.
<assign>
<dbus name="org.tizen.system.crash" own="crash-worker" bus="system">
<node name="/Org/Tizen/System/Crash/Crash">
<interface name="org.tizen.system.crash.Crash">
<!-- dbus smack label "crash-worker::crashctl" -->
<method name="dump_log">
<annotation name="com.tizen.smack" value="crash-worker::crashctl" />
</method>
<method name="delete_dump">
<annotation name="com.tizen.smack" value="crash-worker::crashctl" />
</method>
</interface>
</node>
</dbus>
</assign>
위의 예제에서는 "dump_log"와 "delete_dump" 두 개의 메소드에,
"crash-worker::crashctl" 스맥레이블을 부여했습니다.
다른 메소드도 존재하지만 굳이 저 두 개의 메소드에만 스맥레이블을 부여하기 위하여 사용한 것으로 보입니다.
이것으로 manifest에 대한 설명을 정리하도록 하겠습니다.
그럼 오늘도 좋은 하루 보내세요~
끝_
* SMACK에 대한 이야기를 쌓아본다
http://storycompiler.tistory.com/51
* References
https://wiki.tizen.org/wiki/Security/Application_installation_and_Manifest
https://wiki.tizen.org/wiki/Security/Tizen_2.X_dbus
'IT' 카테고리의 다른 글
[Ubuntu/Linux] 우분투 터미널을 위한 최적화된 색상 (4) | 2015.06.19 |
---|---|
[Ubuntu/Linux] vim에서 edc, embryo, eo 가독성 높이기 (0) | 2015.06.18 |
[Ubuntu/Linux] vimrc의 모든 것 (1) | 2015.06.17 |
[SMACK] 스맥에서 onlycap으로 root 권한 축소하기 (0) | 2015.06.15 |
[SMACK] 스맥에 대한 이야기를 쌓아본다 (0) | 2015.06.14 |
[SMACK] 스맥 레이블을 긋기 위한 manifest의 모든 것 - 파일편 (1) | 2015.06.13 |
[SMACK] 스맥체크의 7가지 단계 (0) | 2015.06.12 |
[EFL] EFL 윈도우를 가속하여 보자 (2) | 2015.06.12 |
[Drone] 드론 날리면 범죄자? (0) | 2015.06.11 |
[SMACK] 쉘의 /proc/self/attr/current로 스맥권한 조종하기 (0) | 2015.06.11 |