Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

13.2. 유형

고급 프로세스 격리를 제공하기 위해 SELinux 대상 정책에 사용되는 기본 권한 제어 방법은 Type Enforcement입니다. 모든 파일과 프로세스는 유형으로 레이블이 지정됩니다. type은 프로세스의 SELinux 도메인과 파일의 SELinux 유형을 정의합니다. SELinux 정책 규칙은 유형에 액세스하는 도메인이든 다른 도메인에 액세스하는 도메인이든 관계없이 유형이 서로 액세스하는 방법을 정의합니다. 액세스는 허용하는 특정 SELinux 정책 규칙이 있는 경우에만 허용됩니다.
다음 예제에서는 /var/www/html/ 디렉터리에 새 파일을 만들고, 해당 상위 디렉터리(/var/www/html/)에서 httpd_sys_content_t 유형을 상속하는 파일을 보여줍니다.
  1. /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 유형으로 레이블이 지정되었음을 표시합니다.
  2. touch 유틸리티를 루트로 사용하여 새 파일을 생성합니다.
    ~]# touch /var/www/html/file1
  3. 다음 명령을 입력하여 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가 실행되는 httpd_t 도메인에서 실행 중인 프로세스 유형을 읽고 쓸 수 있는 유형을 정의합니다. 따라서 프로세스가 다른 프로세스에서 사용할 파일에 액세스하는 것을 방지할 수 있습니다.
예를 들어 httpd는 httpd _sys_content_t 유형(Apache HTTP Server용으로 의도됨)으로 레이블이 지정된 파일에 액세스할 수 있지만 기본적으로 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_t로 레이블이 지정된 스크립트는 httpd_ sys_script_t 도메인에서 httpd _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액세스할 수 있도록 해당 파일과 디렉터리에 레이블을 지정하는 방법을 보여줍니다.
  1. mkdir 유틸리티를 root로 사용하여 httpd 에서 사용할 파일을 저장할 최상위 디렉토리 구조를 만듭니다.
    ~]# mkdir -p /my/website
  2. file-context 구성의 패턴과 일치하지 않는 파일과 디렉터리에 default_t 유형으로 레이블이 지정될 수 있습니다. 이 유형은 제한된 서비스에 액세스할 수 없습니다.
    ~]$ ls -dZ /my
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /my
    
  3. 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 명령(정책core utils -python 패키지에서 제공)을 사용하여 재레이블 및 restorecon 명령 후에도 지속되는 레이블을 변경합니다. 이 명령은 파일 컨텍스트 구성에 변경 사항을 추가합니다. 그런 다음 file-context 구성을 읽는 restorecon 을 실행하여 레이블 변경 사항을 적용합니다. 다음 예제에서는 httpd에서 사용할 새 디렉토리와 index.html 파일을 생성하고 httpd액세스할 수 있도록 해당 디렉터리와 파일의 레이블을 영구적으로 변경하는 방법을 보여줍니다.
  1. mkdir 유틸리티를 root로 사용하여 httpd 에서 사용할 파일을 저장할 최상위 디렉토리 구조를 만듭니다.
    ~]# mkdir -p /my/website
  2. root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.
    ~]# semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"
    "/my(/.*)?" 표현식은 레이블 변경 사항이 my/ 디렉토리 및 그 아래의 모든 파일과 디렉터리에 적용됨을 의미합니다.
  3. touch 유틸리티를 root로 사용하여 새 파일을 생성합니다.
    ~]# touch /my/website/index.html
  4. 다음 명령을 root로 입력하여 레이블 변경 사항을 적용합니다(restorecon 은 file-context 구성 읽기, 2 단계에서 semanage 명령으로 수정됨):
    ~]# 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” 을 참조하십시오.