11.2. 상위 세 가지 문제 원인


다음 섹션에서는 문제 레이블 지정, 서비스용 부울 및 포트 구성, SELinux 규칙의 세 가지 원인에 대해 설명합니다.

11.2.1. 문제 레이블 지정

SELinux를 실행하는 시스템에서는 모든 프로세스와 파일에 보안 관련 정보가 포함된 레이블이 지정됩니다. 이 정보를 SELinux 컨텍스트라고 합니다. 이러한 레이블이 잘못되면 액세스가 거부될 수 있습니다. 애플리케이션이 잘못 레이블된 경우 잘못된 레이블이 프로세스에 할당될 수 있습니다. 이로 인해 SELinux가 액세스를 거부할 수 있으며 프로세스가 레이블이 잘못 지정된 파일이 생성될 수 있습니다.
레이블 지정 문제의 일반적인 원인은 비표준 디렉터리가 서비스에 사용되는 경우입니다. 예를 들어, 웹 사이트에 /var/www/html/ 을 사용하는 대신 관리자가 /srv/myweb/ 을 사용하려고 합니다. Red Hat Enterprise Linux에서 /srv 디렉터리는 var_t 유형으로 레이블이 지정됩니다. /srv 에서 생성된 파일 및 디렉터리는 이 유형을 상속합니다. 또한 최상위 디렉터리(예: /myserver)에서 새로 생성된 오브젝트는 default_t 유형으로 레이블을 지정할 수 있습니다. SELinux는 Apache HTTP Server(httpd)가 이러한 유형에 모두 액세스하지 못하도록 합니다. 액세스를 허용하려면 SELinux에서 /srv/myweb/ 의 파일에 httpd 에 액세스할 수 있는지 알아야 합니다.
~]# semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
Copy to Clipboard Toggle word wrap
semanage 명령은 /srv/myweb/ 디렉터리(및 그 아래의 모든 파일 및 디렉터리)에 대한 컨텍스트를 SELinux file-context 구성에 추가합니다.[8]. semanage 유틸리티는 컨텍스트를 변경하지 않습니다. root 로 restorecon 유틸리티를 실행하여 변경 사항을 적용합니다.
~]# restorecon -R -v /srv/myweb
Copy to Clipboard Toggle word wrap
파일 컨텍스트 구성에 컨텍스트를 추가하는 방법에 대한 자세한 내용은 4.7.2절. “영구적인 변경 사항: semanage fcontext” 을 참조하십시오.

11.2.1.1. 올바른 문맥이란 무엇입니까?

matchpathcon 유틸리티는 파일 경로의 컨텍스트를 확인하고 해당 경로의 기본 레이블과 비교합니다. 다음 예제에서는 잘못 레이블이 지정된 파일이 포함된 디렉터리에서 matchpathcon 을 사용하는 방법을 보여줍니다.
~]$ matchpathcon -V /var/www/html/*
/var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
Copy to Clipboard Toggle word wrap
이 예에서 index.htmlpage1.html 파일은 user_home_t 유형으로 레이블이 지정됩니다. 이 유형은 사용자 홈 디렉토리의 파일에 사용됩니다. mv 명령을 사용하여 홈 디렉토리에서 파일을 이동하면 파일이 user_home_t 유형으로 레이블이 지정될 수 있습니다. 이 유형은 홈 디렉토리 외부에 없어야 합니다. restorecon 유틸리티를 사용하여 이러한 파일을 올바른 형식으로 복원합니다.
~]# restorecon -v /var/www/html/index.html 
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
Copy to Clipboard Toggle word wrap
디렉터리 아래의 모든 파일의 컨텍스트를 복원하려면 -R 옵션을 사용합니다.
~]# restorecon -R -v /var/www/html/
restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
Copy to Clipboard Toggle word wrap
matchpathcon 의 자세한 예제는 4.10.3절. “기본 SELinux 컨텍스트 확인” 을 참조하십시오.

11.2.2. 제한된 서비스 실행 방법은 무엇입니까?

서비스는 다양한 방법으로 실행할 수 있습니다. 이를 위해 서비스를 실행하는 방법을 지정해야 합니다. 이 작업은 SELinux 정책 작성에 대한 지식 없이 런타임 시 SELinux 정책 부분을 변경할 수 있는 부울을 통해 수행할 수 있습니다. 이렇게 하면 SELinux 정책을 다시 로드하거나 다시 컴파일하지 않고도 NFS 볼륨에 서비스 액세스 허용 등의 변경 사항을 허용합니다. 또한 기본이 아닌 포트 번호에서 서비스를 실행하려면 semanage 명령을 사용하여 업데이트하는 정책 구성이 필요합니다.
예를 들어 Apache HTTP Server가 MariaDB와 통신하도록 허용하려면 httpd_can_network_connect_db 부울을 활성화합니다.
~]# setsebool -P httpd_can_network_connect_db on
Copy to Clipboard Toggle word wrap
특정 서비스에 대한 액세스가 거부되면 getseboolgrep 유틸리티를 사용하여 액세스를 허용하는 부울을 사용할 수 있는지 확인합니다. 예를 들어 getsebool -a | grep ftp 명령을 사용하여 FTP 관련 부울을 검색합니다.
~]$ getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_nfs --> off

ftpd_connect_db --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
Copy to Clipboard Toggle word wrap
부울 목록과 사용 중인지 여부를 확인하려면 getsebool -a 명령을 실행합니다. 부울 목록의 경우 각 항목이 무엇인지, 실행 중인지에 대한 설명과 semanage boolean -l 명령을 root로 실행합니다. 부울 나열 및 구성에 대한 자세한 내용은 4.6절. “부울” 을 참조하십시오.

포트 번호

정책 구성에 따라 서비스는 특정 포트 번호에서만 실행되도록 허용할 수 있습니다. 정책 변경 없이 서비스가 실행되는 포트를 변경하려고 하면 서비스가 시작되지 않을 수 있습니다. 예를 들어 semanage port -l | grep http 명령을 root로 실행하여 http 관련 포트를 나열합니다.
~]# semanage port -l | grep http
http_cache_port_t              tcp      3128, 8080, 8118
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
Copy to Clipboard Toggle word wrap
http_port_t 포트 유형은 포트 Apache HTTP Server가 수신할 수 있는 포트를 정의합니다. 이 경우 TCP 포트 80, 443, 488, 8008, 8009 및 8443입니다. 관리자가 httpd 가 포트 9876(Listen 9876)에서 수신 대기하도록 httpd.conf 를 구성하지만 이를 반영하도록 정책이 업데이트되지 않으면 다음 명령이 실패합니다.
~]# systemctl start httpd.service
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
Copy to Clipboard Toggle word wrap
~]# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: failed (Result: exit-code) since Thu 2013-08-15 09:57:05 CEST; 59s ago
  Process: 16874 ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop (code=exited, status=0/SUCCESS)
  Process: 16870 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Copy to Clipboard Toggle word wrap
다음과 유사한 SELinux 거부 메시지는 /var/log/audit/audit.log 에 기록됩니다.
type=AVC msg=audit(1225948455.061:294): avc:  denied  { name_bind } for  pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
Copy to Clipboard Toggle word wrap
httpdhttp_port_t 포트 유형에 대해 나열되지 않은 포트에서 수신 대기하도록 허용하려면 semanage port 명령을 입력하여 정책 구성에 포트를 추가합니다.[9]:
~]# semanage port -a -t http_port_t -p tcp 9876
Copy to Clipboard Toggle word wrap
a 옵션은 새 레코드를 추가하고, -t 옵션은 유형을 정의하고, -p 옵션은 프로토콜을 정의합니다. 마지막 인수는 추가할 포트 번호입니다.

11.2.3. 진화하는 규칙 및 깨진 애플리케이션

애플리케이션이 손상되어 SELinux에서 액세스를 거부할 수 있습니다. 또한 SELinux 규칙이 진화하고 있습니다. SELinux는 특정 방식으로 애플리케이션이 실행되고 있지 않을 수 있으므로 애플리케이션이 예상대로 작동하는 경우에도 액세스를 거부할 수 있습니다. 예를 들어, PostgreSQL의 새 버전이 릴리스되면 현재 정책이 이전에 표시되지 않은 작업을 수행하여 액세스가 허용되어야 하는 경우에도 액세스가 거부될 수 있습니다.
이러한 경우 액세스가 거부된 후 audit2allow 유틸리티를 사용하여 액세스를 허용하는 사용자 지정 정책 모듈을 생성합니다. audit2allow 사용에 대한 자세한 내용은 11.3.8절. “액세스 허용: audit2allow” 을 참조하십시오.


[8] /etc/selinux/targeted/contexts/files/ 의 파일은 파일 및 디렉터리에 대한 컨텍스트를 정의합니다. 이 디렉터리의 파일은 restoreconsetfiles 유틸리티에서 읽고 파일과 디렉터리를 기본 컨텍스트로 복원합니다.
[9] semanage port -a 명령은 /etc/selinux/targeted/modules/active/ports.local 파일에 항목을 추가합니다. 기본적으로 이 파일은 root만 볼 수 있습니다.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동