5.4 Type Rules
Type Rules 은 실행중에 객체들의 생성이나 relabel을 위한 명세를 한다. 우리는 이미 Chapter 2에서 예로써 보았다. type_transition 규칙을 이용한 domain transition을...
Type Rules 에는 아래와 같이 두 종류로써 정의 된다.
type_transition : domain transition과 객체 생성을 위한 label을 수행하기 위한 명세
type_change : SElinux-aware application에 의해 실행되어지는 relabel을 위한 명세
Common Type Rule Syntax
다음은 하나의 source,target, 그리고 default type , 하나의 객체 클래스를 가진 타입 규칙의 간단한 형태이다.
type_transition user_t passwd_exec_t : process passwd_t;
이 규칙은 chapter 2(다음 섹션에 제시)에서 보았던 것이다. 다시 해석하자면 user_t 타입의 프로세스가 passwd_exec_t타입의 한 파일을 실행할때 이 프로세스 타입은 별도로 요청하지 않는다면 defalut인 passwd_t로 변화를 시도할 것이다.
( 쟌이 생각 : 쉽게 말해서 만약 로그인을 한다면 로그인전의 권한들을 가진 type을 이용하여 로그인을 하면 로그인자가 가질 수 있는 타입으로 바뀐다는 것 )
target 타입은 정해진 객체 클래스가 process일때 file 객체 클래스와 결합된다. 그리고 정해진 객체 클래스(process)는 소스타입과 default타입(passwd_t)과 결합된다. ??
AV rules와 마찬가지로 type rules에서도 여러개의 타입을 묶어서 처리 할 수 있다.
type_transition { user_t sysadm_t } passwd_exec_t : process passwd_t;
이 type_transition 규칙은 두개의 타입인 user_t와 sysamd_t를 소스리스트로 가지고 있다. AV rules처럼 이 규칙은 두개의 규칙으로 확장 가능하다.
type_transition user_t passwd_exec_t : process passwd_t;
type_transition sysadm_t passwd_exec_t : process passwd_t;
속성의 사용또한 AV rules처럼 사용할 수 있다.
소스필드나 타겟필드와는 다르게 default type에서는 두새의 멀티 타입을 사용할 수 없다. 만약 두개 이상으로 사용 된다면 이 규칙은 애매해지고
커널이 두 타입중에 어느 것을 사용할지를 결정하기가 불가능 해질 것이다.
하나의 default 타입을 위한 이 제한은 또한 두개의 동등한 default타입로써 같은 소스타입, 타겟타입과 객체 클래스를 가지지 못한다는 뜻이 된다.
예를 보자
type_transition user_t passwd_exec_t : process passwd_t;
type_transition user_t passwd_exec_t : process user_passwd_t;
두 정책이 현재의 정책에 있을려 한다면 이 정책 컴파일러는 에러를 낸 것이다. 만약 두 정책에서 passwd_t 와 user_passwd_t 이 현재 존재한다면 default 타입으로 무었을 사용 할 것인가??
Chapter 2의 type_transition 부분 p28 ( 2.2.5 Default Domain Transition : type_transistion statement )
default에 의해 일어나는 domain 변환을 지원 (우리는 주로 패스워드 프로그램의 경우서 이 것을 원한다.) 하는 것에
대하여 새로운 규칙인 type transition rule ( type_transition )의 소개를 필요한다. default 변환은 만약 따른 명세적인 변환 요청이 없을 때 시도 되어져야 한다.
type_transition user_t passwd_exec_t : process passwd_t;
이 규칙의 문맥은 allow규칙의 문맥과 다르다. source와 target 타입들, process 클래스 객체는 유효하지만 permission
대신에 default type( passwd_t )이 사용되었다.
type_transition 규칙은 execve() 시스템콜의 default에 의해 나타난다. 만약 호출한 프로세스의 domain타입이 user_t
그리고 실행가능한 파일의 타입이 passwd_exec_t ( figure 2-5 참조 )이면 새로운 domain인 passwd_t로의 변환이 시도된다.
type_transition 규칙은 정책 작성자로 하여금 유저의 명시적 입력없이 초기화된 default domain를 이용해 권한(권한이 부여된 default 타입) 변환을 가능하게 한다.
예를 들어 joe는 접근제어나 타입들에 대한 어떤 것은 알고 싶지 않고 단지 패스워드를 바꾸고 싶을 때 그 시스템
과 정책디자이너는 type_transition 규칙을 사용하여 유저에게 쉽게 변환 할 수 있도록 해줄 수 있는 것이다. 만약
이 것이 없다면 사용자가 자신의 패스워드를 바꾸기 위해 selinux상에서의 타입과 접근제어를 자기가 작성하거나
수정해야 할 것이다.
5.4.2 Type Change Rules
우리는 Selinux를 가진 어플리케이션에 의해 실행되어진 Relabeling을 위한 default types을 명세한 type_change 규칙을 이용할 수 있다. type_transition 규칙과 동일하게 type_change규칙은 default에 대한 명세를 하지만 접근을 허용하진 않는다. 하지만 type_transition과 달리 type_change의 효과는 커널안에서는 필요한 권한을 주지 않지 않고
userspace 어플리케이션에 의존적이다는 것이다. login, sshd와 같이 정책에 기초한 relabel 객체들처럼 말이다.
예를 보자
type_change sysadm_t tty_device_t : chr_file sysadm_tty_device_t;
위의 규칙은 sysadm_t 타입을 대신하여 tty_device_t 타입의 character file 을 relabeling 할 때 sysadm_tty_device_t
타입을 사용해야 한다는 뜻이다.
위의 규칙은 type_change규칙중 유저 로그인에서의 마지막 종점을 relabeling하는 가장 일반적인 쓰인 것의 한 예이다.
login 프로그램은 SELinux 모듈에서 커널 인터페이스를 경유하여 정책에 질문한다. sysadm_t타입을 거치고
tty_device_t, 그리고 바뀌어 relabel을 위해 쓰이는 타입으로써 sysyadm_tty_device_t 타입을 받는다.
이 메카니즘은 로그인 프로세스에게 새로운 로그인 세션동안 유저를 대신하여 tty device를 label할 수 있게 한다.??
어플리케이션에서의 hard-coded 대신에 정책에서의 캡슐화된 타입의 명세를 남겨두게 된다.??
우리는 아마도 이것을 잘 쓰지는 않는다. 만약 type_change규칙을 쓴다면 대게 core operating systes services에 의해
쓰일 것이다.
Type_member rules
정책 커파일러는 또한 3번째 규칙인 type_member를 지원한다. 최근 이 규칙은 아직 의미없는 규칙이며 효과적이지도
않다. 하지만 우리는 여기서 이것을 언급한다. 왜냐하면 이규칙에 대한 필요성을 위한 작업이 계속 되고 있기 때문이다.
type_member 규칙은 장래에 polyinstantiated object( 여러 형상화된 객체들 )의 멤버들를 위한 타입을 명세를 지원 할 것이다.
이 규칙은 아마도 뜻깊은 규칙이 될 것이다. 이 규칙의 문법은 앞의 두 규칙의 문법과 동일하다.