4.14. 파일 이름 전환
파일 이름 전환 기능을 사용하면 정책 작성자가 정책 전환 규칙을 작성할 때 파일 이름을 지정할 수 있습니다. 다음을 나타내는 규칙을 작성할 수 있습니다.
A_t라는 프로세스가 B_t
레이블이 지정된 디렉터리에 지정된 개체 클래스를 생성하고 지정된 오브젝트 클래스의 이름이 objectname
인 경우 레이블 C_t
가 됩니다. 이 메커니즘은 시스템의 프로세스에 대해 보다 세밀한 제어를 제공합니다.
파일 이름 전환이 없으면 다음과 같은 세 가지 방법으로 개체에 레이블을 지정할 수 있습니다.
- 기본적으로 오브젝트는 상위 디렉터리에서 레이블을 상속합니다. 예를 들어 사용자가 etc_t 레이블이 지정된 디렉터리에 파일을 만드는 경우 파일에
etc_t
- 정책 작성자는 다음을 명시하는 정책에 규칙을 작성할 수 있습니다.
A_t 유형의 프로세스가
새B_t
라는 레이블이 지정된 디렉터리에 지정된 오브젝트 클래스를 생성하면 오브젝트에C_t
레이블이 부여됩니다. 단일 프로그램에서 각 오브젝트에 별도의 레이블이 필요한 동일한 디렉토리에 여러 오브젝트를 생성하는 경우 이 방법이 문제가 됩니다. 또한 생성된 오브젝트의 이름은 지정되지 않으므로 이러한 규칙은 부분적인 제어만 제공합니다. - 특정 애플리케이션에는 이러한 애플리케이션이 특정 경로의 레이블이 무엇인지 시스템에 질문할 수 있는 SELinux 인식 기능이 있습니다. 그런 다음 이러한 애플리케이션은 커널을 요청하여 필수 레이블이 있는 오브젝트를 생성합니다. SELinux 인식 기능이 있는 애플리케이션의 예로 rpm 패키지 관리자, restorecon 유틸리티 또는 udev 장치 관리자가 있습니다. 그러나 SELinux 인식을 통해 파일 또는 디렉토리를 생성하는 모든 애플리케이션에 지시할 수 없습니다. 종종 생성 후 올바른 레이블을 사용하여 오브젝트의 레이블을 다시 지정해야 합니다. 그렇지 않으면 제한된 도메인에서 오브젝트 사용을 시도하면 AVC 메시지가 반환됩니다.
파일 이름 전환 기능은 잘못된 레이블 지정과 관련된 문제를 줄이고 시스템의 보안을 강화합니다. 정책 작성자는 특정 애플리케이션에서 지정된 디렉터리에 지정된 이름으로 파일만 생성할 수 있도록 올바르게 표시될 수 있습니다. 규칙은 파일 경로가 아닌 파일 이름을 고려합니다. 파일 경로의 기본 이름입니다. 파일 이름 전환은
strcmp()
함수에 의해 수행된 정확한 일치를 사용합니다. 정규 표현식 또는 와일드카드 문자 사용은 고려되지 않습니다.
참고
파일 경로는 커널에서 다를 수 있으며 파일 이름 전환은 레이블을 결정하는 데 경로를 사용하지 않습니다. 결과적으로 이 기능은 초기 파일 생성에만 영향을 미치며 이미 생성된 오브젝트의 잘못된 레이블을 수정하지 않습니다.
예 4.2. 파일 이름 전환으로 작성된 정책 규칙의 예
아래 예제에서는 파일 이름 전환이 있는 정책 규칙을 보여줍니다.
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, ".ssh")
이 규칙에는
unconfined_t 유형의 프로세스가 admin_
home_t라는 레이블이 지정된 디렉터리에 ~/.ssh/
디렉터리가 생성되면 ~/.
ssh/
디렉터리에 ssh_home_t
레이블이 지정됩니다.
파일 이름 전환으로 작성된 정책 규칙의 유사한 예는 다음과 같습니다.
filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, "public_html") filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, "missfont.log") filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, "nvidia0") filetrans_pattern(puppet_t, etc_t, krb5_conf_t, file, "krb5.conf")
참고
파일 이름 전환 기능은 주로 정책 작성자에 영향을 미치지만, 사용자는 포함된 디렉터리의 기본 레이블로 거의 항상 파일 오브젝트가 생성되지 않고 정책에 지정된 것과 다른 레이블이 있는 것을 알 수 있습니다.