13.2. 유형
고급 프로세스 격리를 제공하기 위해 SELinux 대상 정책에 사용되는 기본 권한 제어 방법은 Type Enforcement입니다. 모든 파일과 프로세스는 유형으로 레이블이 지정됩니다. type은 프로세스의 SELinux 도메인과 파일의 SELinux 유형을 정의합니다. SELinux 정책 규칙은 유형에 액세스하는 도메인이든 다른 도메인에 액세스하는 도메인이든 관계없이 유형이 서로 액세스하는 방법을 정의합니다. 액세스는 허용하는 특정 SELinux 정책 규칙이 있는 경우에만 허용됩니다.
다음 예제에서는
/var/www/html/
디렉터리에 새 파일을 생성하고 상위 디렉터리(/var/www/html/
)에서 httpd_sys_content_t
유형을 상속하는 파일을 보여줍니다.
- 다음 명령을 입력하여
/var/www/html/
:의 SELinux 컨텍스트를 확인합니다.~]$ ls -dZ /var/www/html drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
이는/var/www/html/
이httpd_sys_content_t
유형으로 레이블이 지정됩니다. touch
유틸리티를 root로 사용하여 새 파일을 생성합니다.~]# touch /var/www/html/file1
- 다음 명령을 입력하여 SELinux 컨텍스트를 확인합니다.
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
ls -Z 명령은
httpd_sys_content_t
유형으로 레이블이 지정된 file1
을 표시합니다. SELinux는 httpd
가 이 유형으로 레이블이 지정된 파일을 읽을 수 있도록 허용하지만 Linux 권한이 쓰기 액세스를 허용하는 경우에도 해당 파일에 쓸 수 없습니다. SELinux 정책은 httpd_t
도메인에서 실행되는 프로세스 유형을 정의합니다( httpd
가 실행되는 위치)는 읽고 쓸 수 있습니다. 따라서 프로세스가 다른 프로세스에서 사용할 파일에 액세스하는 것을 방지할 수 있습니다.
예를 들어
httpd
는 httpd_sys_content_t
유형으로 레이블이 지정된 파일에 액세스할 수 있지만 기본적으로 samba_share_t
유형으로 레이블이 지정된 파일에 액세스할 수 없습니다( Samba로 권장됨). 또한 사용자 홈 디렉터리의 파일은 user_home_t
유형으로 레이블이 지정됩니다. 기본적으로 httpd
가 사용자 홈 디렉터리의 파일을 읽거나 쓰는 것을 방지합니다.
다음은
httpd
와 함께 사용되는 몇 가지 유형을 나열합니다. 다양한 유형을 사용하여 유연한 액세스를 구성할 수 있습니다.
httpd_sys_content_t
- 정적 웹 사이트에서 사용하는
.html
파일과 같은 정적 웹 콘텐츠에 이 유형을 사용합니다. 이 유형으로 레이블이 지정된 파일은httpd
및httpd
에서 실행하는 스크립트에 액세스할 수 있습니다(읽기 전용). 기본적으로 이 유형으로 레이블이 지정된 파일과 디렉터리는httpd
또는 기타 프로세스에서 작성하거나 수정할 수 없습니다. 기본적으로 에서 생성되거나/var/www/html/
디렉터리에 복사된 파일은httpd_sys_content_t
유형으로 레이블이 지정됩니다. httpd_sys_script_exec_t
httpd
를 실행할 스크립트에 이 유형을 사용합니다. 이 유형은 일반적으로/var/www/cgi-bin/
디렉터리의 CGI(Common Gateway Interface) 스크립트에 사용됩니다. 기본적으로 SELinux 정책은httpd
가 CGI 스크립트를 실행하지 못하도록 합니다. 이를 허용하려면httpd_sys_script_exec_t
유형으로 스크립트에 레이블을 지정하고httpd_enable_cgi
부울을 활성화합니다.httpd
_sys_script_exec_thttpd_sys_script_t
도메인에서 실행됩니다.httpd_sys_script_t
도메인은postgresql_t
및mysqld_t
와 같은 다른 시스템 도메인에 액세스할 수 있습니다.httpd_sys_rw_content_t
- 이 유형으로 레이블이 지정된 파일은
httpd_sys_script_exec_t
유형으로 레이블이 지정된 스크립트에서 작성할 수 있지만 다른 유형으로 레이블이 지정된 스크립트에서 수정할 수 없습니다.httpd_sys_rw_content_t
유형을 사용하여httpd_sys_script_exec_t
유형으로 레이블이 지정된 스크립트에서 읽고 쓸 파일에 레이블을 지정해야 합니다. httpd_sys_ra_content_t
- 이 유형으로 레이블이 지정된 파일은
httpd_sys_script_exec_t
유형으로 레이블이 지정된 스크립트에서 추가할 수 있지만 다른 유형으로 레이블이 지정된 스크립트에서 수정할 수 없습니다.httpd_sys_ra_content_t
유형을 사용하여httpd_sys_script_exec_t
유형으로 레이블이 지정된 스크립트에서 읽고 추가할 파일에 레이블을 지정해야 합니다. httpd_unconfined_script_exec_t
- 이 유형으로 레이블이 지정된 스크립트는 SELinux 보호 없이 실행됩니다. 다른 모든 옵션을 모두 고갈시킨 후 복잡한 스크립트에만 이 유형을 사용합니다.
httpd
또는 전체 시스템에 대해 SELinux 보호를 비활성화하는 대신 이 유형을 사용하는 것이 좋습니다.
참고
httpd에 사용 가능한 유형을 추가하려면 다음 명령을 입력합니다.
~]$ grep httpd /etc/selinux/targeted/contexts/files/file_contexts
절차 13.1. SELinux 컨텍스트 변경
파일 및 디렉토리의 유형은 chcon 명령을 사용하여 변경할 수 있습니다. chcon 을 사용하여 변경한 내용은 파일 시스템의 레이블을 다시 지정하거나 restorecon 명령으로 유지되지 않습니다. SELinux 정책은 사용자가 지정된 파일에 대한 SELinux 컨텍스트를 수정할 수 있는지 여부를 제어합니다. 다음 예제에서는
httpd
에서 사용할 새 디렉터리와 index.html
파일을 생성하고 해당 파일과 디렉터리에 레이블을 지정하여 httpd
액세스를 허용하는 방법을 보여줍니다.
- root
로
Cryostat 유틸리티를 사용하여httpd
에서 사용할 파일을 저장할 최상위 디렉터리 구조를 만듭니다.~]# mkdir -p /my/website
- file-context 구성의 패턴과 일치하지 않는 파일 및 디렉터리는
default_t
유형으로 레이블을 지정할 수 있습니다. 이 유형은 제한된 서비스에 액세스할 수 없습니다.~]$ ls -dZ /my drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /my
- root로 다음 명령을 입력하여
my/
디렉토리 및 하위 디렉터리의 유형을httpd
에 액세스할 수 있는 유형으로 변경합니다. 이제/my/website/
에서 생성된 파일은default_t
유형이 아닌httpd_sys_content_t
유형을 상속하므로 httpd에 액세스할 수 있습니다.~]# chcon -R -t httpd_sys_content_t /my/ ~]# touch /my/website/index.html ~]# ls -Z /my/website/index.html -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /my/website/index.html
chcon 에 대한 자세한 내용은 4.7.1절. “임시 변경 사항: chcon” 을 참조하십시오.
semanage fcontext 명령( policycoreutils-python 패키지에서 제공하는semanage )을 사용하여 레이블 재레이블 및 restorecon 명령 후에도 레이블을 변경합니다. 이 명령은 파일 컨텍스트 구성에 변경 사항을 추가합니다. 그런 다음 file-context 구성을 읽는 restorecon 을 실행하여 레이블 변경을 적용합니다. 다음 예제에서는
httpd
에서 사용할 새 디렉터리와 index.html
파일을 생성하고 해당 디렉터리와 파일의 레이블을 지속적으로 변경하여 httpd
액세스를 허용하는 방법을 보여줍니다.
- root
로
Cryostat 유틸리티를 사용하여httpd
에서 사용할 파일을 저장할 최상위 디렉터리 구조를 만듭니다.~]# mkdir -p /my/website
- root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.
~]# semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"
"/my(/.*)?"
표현식은 레이블 변경이my/
디렉토리와 그 아래의 모든 파일과 디렉터리에 적용됨을 의미합니다. touch
유틸리티를 root로 사용하여 새 파일을 생성합니다.~]# touch /my/website/index.html
- root로 다음 명령을 입력하여 레이블 변경 사항을 적용합니다.restorecon 은 2단계에서 semanage 명령으로 수정된 file-context 구성을 읽습니다.
~]# restorecon -R -v /my/ restorecon reset /my context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
semanage에 대한 자세한 내용은 4.7.2절. “영구적인 변경 사항: semanage fcontext” 을 참조하십시오.