SELinux는 security server가 사용하는 모든 프로세스(또는 subject)와 object를 연관짓기 위해 security context를 필요로 한다. security server는 어떠한 접근이 policy에 의해 허가되는지 금지되는지 판단하기 위해 security context를 사용한다.
또한 security context는 "security label"또는 간단히 라벨이라고 알려져 있는데, 이 label이란 용어는 context에 따라서 많은 라벨의 타입이 있어서 조금 혼란스러울 수도 있다(다른 context임?)
SELinux에서 security context는 SELinux user와 역할(role), type 식별자, 그리고 MCS/MLS security level을 다음과 같이 정의하는 가변길이 문자열이다.
user:role:type[:level]
user |
SELinux의 user 식별자이다. 이것은 SELinux user의 사용이 허락되는 1개 이상의 role과 연관되어질 수 있다. |
role |
SELinux의 role. 이것은 SELinux user의 사용이 허락되는 1개 이상의 type과 연관되어질 수 있다. |
type |
type이 process와 연관되면, type은 SELinux user(subject)가 어떤 process(혹은 domain)에 접근할 수 있는지 정의할 수 있다. |
level |
이것은 옵션이다. range라고 알려져있으며, 오직 MCS 또는 MLS가 지원되는 policy에서만 나타난다. level은 아래와 같이 구성된다. 민감함의 level과 0이상의 category를 가지는 간단한 security level (e.g. s0, s1:c0, s7:c10.c15). '-'로 구분되는 두 가지 level로 이루어진 range (e.g. s0 - s15:c0.c1023). 이 구성요소들은 Security Level 섹션에서 논의된다. |
아래를 주목하자:
- subject에 관한 접근 허가의 결정은 security context의 모든 구성요소를 이용한다.
- object에 관한 접근 허가의 결정은 security context의 모든 구성요소를 이용한다. 하지만
a) user는 system_u라고 불리는 특별한 user에 설정되거나 생성하는 process의 SELinux user id에 설정된다. (로깅을위한 목적으로 사용되는 것 외에 어떠한 실제 목적이 없다?)
b) 규칙(role)은 security 결정하고 관련이 없다. 그리고 규칙(role)은 항상 object_r의 특별한 SELinux 내부 규칙에 설정된다.;;;??
따라서 object에 있어선, type(그리고 MLS에서 level)이 오직 유일하게 접근 결정과 관련있는 security field이다.
system_u와 object_r의 예는 라벨링을 한 후, ls -Z 명령어를 치명 다양한 디렉토리의 file system에서 볼 수 있다.
아래의 예시는 프로세스들과 디렉토리들, 그리고 파일들에 대한 security context의 예이다.(policy는 MCS, MLS을 지원하지 않는다. 따라서 level field는 없다)
Process Security Context의 예
# These are process security contexts taken from a ps -Z command
# (edited for clarity) that show four processes:
LABEL PID TTY CMD
user_u:unconfined_r:unconfined_t 2539 pts/0 bash
user_u:message_filter_r:ext_gateway_t 3134 pts/0 secure_server
user_u:message_filter_r:int_gateway_t 3138 pts/0 secure_server
user_u:unconfined_r:unconfined_t 3146 pts/0 ps
# Note the bash and ps processes are running under the
# unconfined_t domain, however the secure_server has two instances
# running under two different domains (ext_gateway_t and
# int_gateway_t). Also note that they are using the
# message_filter_r role whereas bash and ps use unconfined_r.
#
# These results were obtained by running the system in permissive
# mode (as in enforcing mode the gateway processes would not be shown).
Object Security Context의 예:
# These are the message queue directory object security contexts
# taken from an ls -Zd command (edited for clarity):
system_u:object_r:in_queue_t /user/message_queue/in_queue
system_u:object_r:out_queue_t /user/message_queue/out_queue
# Note that they are instantiated with system_u and object_r
# These are the message queue file object security contexts
# taken from an ls -Z command (edited for clarity):
/user/message_queue/in_queue:
user_u:object_r:in_file_t Message-1
user_u:object_r:in_file_t Message-2
/user/message_queue/out_queue:
user_u:object_r:out_file_t Message-10
user_u:object_r:out_file_t Message-11
# Note that they are instantiated with user_u as that was the
# SELinux user id of the process that created the files (see the
# process example above). The role remained as object_r.
'<프로그래밍> > ___SEAndroid' 카테고리의 다른 글
SELinux 발번역 5 - Subjects (미완성) (0) | 2013.04.16 |
---|---|
SELinux 발번역 3 - Role-Based Access Control (RBAC) (미완성) (0) | 2013.04.16 |
SELinux 발번역 2 - Type Enforcement (미완성) (0) | 2013.04.10 |
SELinux 발번역 1 - SELinux 개괄 (미완성) (0) | 2013.04.08 |
SELinux 관련 읽어볼거 (0) | 2013.04.01 |