BookName : Selinux by Example -
5.2.2 Types and Attributes (Page 93 ~ 97 )
아마도 상상될 것이다. 그 많고 복잡한 정책은 시스템상의 모든 다른 리소스을 나타내는 아마도 수백개 또는 수천개의 타입일 것이라는 것을...
예를 들어 페도라 4에서 쓰는 정책은 800개보다 적게 쓰고 있다. ... ...
속성은 2가지 방법으로 쓰인다. 하나는 타입의 특징 또는 특성으로써 또 하나는 타입의 한 그룹으로써...
가령 우리가 backup application에 모든 파일에 대한 읽기 권한을 주고 싶다고 하자. 우리는 먼저 backup application (backup_t)의 도메인 타입을 먼저
생성한다. 그리고 그 타입에게 어떤 파일과 결합된 모든 타입에 접근할 수 있는 권한을 준다.( 파일과 연결된 다른 타입에게 접근할 수 있는 권한 )
예)
type backup_t;
# 파일 객체를 쓰는 다른 모든 타입에 접근하는 읽기 권한을 주는 룰을 추가한다.
allow backup_t httpd_user_content_t : file read;
allow backup_t shadow_t : file read;
여기서우리는 backup_t 도메인 타입에게 두 파일 타입들에게 접근하도록 해주었다. 우리는 httpd_user_content_t ?? 와
/etc/shadow 파일의 타입으로 예상되는 shadow_t 타입을 가진 것으로 볼 수 있다. 두개는 backup application 이 반드시 읽는 디스크 파일이다.
이렇게 우리는 수 많은 타입에게 수 많은 권한을 줄 수 있으며 우리는 backup_t에게 접근을 허용한 규칙들을 기억 할 수 있다.
하지만 이것은 지루하고 에러나기 쉬운 처리방법이다. 속성들은 '그룹접근'으로 쉽게 명세해 준다. 속성 선언으로 우리는 모든 파일 타입과 속성접근
을 줄 수 있을 것이고 이것은 하나하나 타입을 결합하는 것보다는 좋을 것이다. 왜냐하면 그렇게 되면 backup_t는 하나의 규칙으로 접근허용을 줄 수 있
기 때문이다. 아래의 속성 선언을 보자.
attribute file_type;
이 상태는 file_type라고 하는 한 속성을 선언한 것이다. 타입과 속성들은 같은 이름 공간을 가지고 그래서 타입과 속성은 같은 이름을 가질 수 없다.
아래의 규칙으로 우리는 file_type와 모든 관계된 타입들이 서로 연결되어 있다는 것을 추측 할 수 있으며 그것을 우리는 backup_t에 읽기접근을 허용하는
문장을 하나로 나타낼 수 있다.
allow backup_t file_type : file read;
수백개의 접근허용 규칙을 주는 것을 우리는 한 문장으로 나타내었다. 이 정책이 컴파일 할때 이 한문장의 규칙은 자동으로 수백개의 파일타입들을 접근제어하기 위한 규칙으로 확장된다. 더 중요한 것은 우리가 파일을 위한 새로운 타입을 정의 할때이다. 우리는 file_type 속성과 backup_t 도메인 타입의 결합으로 새로운 읽기 접근에 대한 정책을 만들 수 있을 것이다.( 재사용성)
5.2.3 타입과 속성의 결합
앞에서 우리는 어떻게 타입과 속성을 정의하는 지 배웠다 하지만 이 두개가 서로 결합하는 지에 대해서는 알지 못한다. 타입은 거의 보통 타입을 선언할 때
속성과 함께 결합된다., 예를 들어 우리는 file_type의 속성과 httpd_user_content_t와의 결합을 보자.
type httpd_user_content_t file_type;
...
...
타입들은 하나의 속성만을 가지지는 않는다. 일반적으로 타입은 몇개의 속성과 결합된 형태를 지닌다. 예를 들어 우리는 모든 웹서버를 통해 모든 파일을 이용 할수 있도록 하기 위해 httpdcontnet속성을 만든다. 타입은 file_type 속성과 함께 httpdcontent속성을 같이 가지게 된다. 다음 예를 보자.
type httpd_user_content_t, file_type, httpdcontent;
type shadow_t, file_type;
allow backup_t file_type : file read;
allow httpd_t httpdcontent : file read;
우리는 지금 httpd_user_content_t타입에 속성을 추가했다. 그리고 shadow_t타입의 좀더 특권적인 선언을 통해 우리는 오직 file_type속성만 가지도록 했다. 왜냐하면 웹서버에 shadow 패스워드 파일을 보이게 한다는 것은 좋은 생각으로 보이지 않기 때문이다. ( <- 두번째 타입선언에서 httpdcontent속성은 없는 이유 )
또한 두개의 allow한 규칙을 가지고있는데 웹서버와 backup program에 그들이 필요로 하는 속성과 결합된 형태로 존재한다. 결과적으로 웹서버(httpd_t)는 httpdcontent의 속성으로 모든 파일을 읽을 수 있고 그러나 shadow_t와 같은
다른 파일은 읽지 못한다. 반면에 backup application( backup_t )은 file_type 속성을 가진 모든 파일을 읽을 수 있다.
게다가 typeattribute를 통하여 기존의 type과 결합할 속성들을 결합할 수 있다. 예를 보자
type httpd_user_contnet_t;
typeattribute httpd_user_content_t file_type, httpdcontent;
# 한문장으로 나타내면
type httpd_user_content_t, file_type, httpdcontent;
# 저기 위에 앞의 선언과 동일