2.1 타입 실행을 위한 보안 문맥
모든 동작하는 시스템 접근 제어는 객체와 주체이 결합된 속성의 접근제어의 일부 타입에 기초한다. selinux에서 접근제어 속성(대상에 대한 성질)은 보안 문맥이라고 한다. 모든 객체( 파일, interprocess communication channels, 소켓들 네트워크 호스트들,,등등 ) 과 주체( 프로세스 )는 그들끼리 결합된 하나의 보안 문맥을 가진다. 보안 문맥은 3개의 요소인 user(사용자) role(역활) type identifiers(타입 식별자 - 접근 속성이 정의되고 설정되어 있는 타입을 구별하는 이름)을 가지고 보안문맥을 보여주거나 명세하기 위한 일반 포멧은 다음과 같다.
user:role:type
이 각 요소를 위한 일련의 식별자들은 selinux 정책 언어에 의해 정의된다. 이 언어에 대해서 우리는 뒤에 자세히 배울 것이다. 지금은 단지 유효한(쓸수 있는) 보안 문맥은 반드시 하나의 유효한 사용자, 역활, 타입 식별자를 가지고 있어야 한다는 점만 이해하자.
2.2 Type Enforcement Access Control
selinux에서 모든 접근은 반드시 명시적으로 주어져야 한다. selinux에서는 user/group ID들과 상관없이 예외적으로 비접근으로 주어져 있기 때문이다.
그렇다 이말은 selinux에서 일반적인 리눅스의 root와 같은 예외적인 수펴유저가 없다는 것이다. 접근의 방법은 subject( domain ) 타입으로 부터 명세된 접근에 의해 가능하고 object 타입은 allow 규칙에 의해 사용된다.
예를 보자
allow user_t bin_t : file { read execute getattr };
이 예는 한 TE규칙의 기본적인 문법을 보여준다. 이 규칙은 두개의 식별자 source 타입(subject 또는 domain) , target 타입(object)을 가진다. 그리고
식별자 file은 정책에 의해 정의된 object class의 이름이다. permission은 file 객체 클래스의 instance를 위한 유효한 권한의 한 요소를 기반으로 포함되어 있다.
이 규칙의 변환은 다음과 같이 볼 수 있다.
domain type을 가진 프로세스는 bin_t타입을 가진?? file 객체에 대하여 read, execute 또는 속성을 얻을 수 있다.
< selinux의 권한허용은 대체로 오직 rwx의 세 타입을 가진 일반 리눅스보다 더 낱알처럼 되어있다. >
예로 본 type 시행
타입 시행에 대하여 패스워드 관리 프로그램의 예를 들어보자. 리눅스에서 패스워드 프로그램은 암호화된 패스워드가 저장된 shadow 패스워드 파일을 읽고
수정하는 것을 원한다. 패스워드 프로그램은 오직 자신의 패스워드를 바꿀 수 있는 것을 일반 사용자에게 허용하는 내부의 보안 정책을 구현하고 있다.
헥갈리는 의미들...
type enforcement : 주체에게 객체클래스의 권한이 포함된 객체를 실행 할 수 있도록 허용해 주는 것.
trans_transition : 어떠한 주체가 어떤 실행을 하였을 때 기재된 도메인(주체)으로 변환을 해주는 것.
role of rules : 어떠한 사용자에 대하여 일부 권한을 부여해 주는 것 - 설사 user_t타입이 권한에 접근을 허용했을 지라도 해당 user_r의 권한이 허용되지 않았다면 실행 불가.