5.3. 분석된 SELinux 거부 수정
대부분의 경우 sealert
툴에서 제공하는 제안 사항은 SELinux 정책과 관련된 문제를 해결하는 방법에 대한 올바른 지침을 제공합니다. sealert
를 사용하여 SELinux 거부를 분석하는 방법에 대한 정보는 SELinux 거부 분석에서 참조하십시오.
툴에서 구성 변경에 audit2allow
툴 사용을 제안하는 경우 주의하십시오. SELinux 거부가 표시될 때 audit2allow
를 사용하여 첫 번째 옵션으로 로컬 정책 모듈을 생성하지 않아야 합니다. 문제 해결은 레이블 지정 문제가 있는지 확인하는 것으로 시작해야 합니다. 두 번째 가장 큰 경우는 프로세스 구성을 변경했으며 SELinux에 대해 알리는 것을 잊어버렸습니다.
레이블 지정 문제
레이블 지정 문제의 일반적인 원인은 비표준 디렉터리가 서비스에 사용되는 경우입니다. 예를 들어, 웹 사이트에 /var/www/html/
을 사용하는 대신 관리자가 /srv/myweb/
을 사용할 수 있습니다. Red Hat Enterprise Linux에서 /srv
디렉터리는 var_t
유형으로 레이블이 지정됩니다. /srv
에서 생성된 파일 및 디렉터리는 이 유형을 상속합니다. 또한 최상위 디렉토리에서 새로 생성된 오브젝트(예: /myserver
)는 default_t
유형으로 레이블을 지정할 수 있습니다. SELinux는 Apache HTTP Server(httpd
)가 이러한 유형에 모두 액세스하지 못하도록 합니다. 액세스를 허용하려면 SELinux에서 httpd
:를 통해 /srv/myweb/
의 파일에 액세스할 수 있는지 알아야 합니다.
semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
# semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
이 semanage
명령은 /srv/myweb/
디렉터리 및 그 아래의 모든 파일 및 디렉터리에 대한 컨텍스트를 SELinux file-context 구성에 추가합니다. semanage
유틸리티는 컨텍스트를 변경하지 않습니다. root로 restorecon
유틸리티를 사용하여 변경 사항을 적용합니다.
restorecon -R -v /srv/myweb
# restorecon -R -v /srv/myweb
잘못된 컨텍스트
matchpathcon
유틸리티는 파일 경로의 컨텍스트를 확인하고 해당 경로의 기본 레이블과 비교합니다. 다음 예제는 잘못 레이블이 지정된 파일이 포함된 디렉터리에서 matchpathcon
을 사용하는 방법을 보여줍니다.
matchpathcon -V /var/www/html/*
$ 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
이 예에서 index.html
및 page1.html
파일은 user_home_t
유형으로 레이블이 지정됩니다. 이 유형은 사용자 홈 디렉터리의 파일에 사용됩니다. mv
명령을 사용하여 홈 디렉토리에서 파일을 이동하면 파일이 user_home_t
유형으로 레이블이 지정될 수 있습니다. 이 유형은 홈 디렉터리 외부에 존재하지 않아야 합니다. restorecon
유틸리티를 사용하여 이러한 파일을 올바른 형식으로 복원합니다.
restorecon -v /var/www/html/index.html
# 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
디렉터리에 있는 모든 파일의 컨텍스트를 복원하려면 -R
옵션을 사용합니다.
restorecon -R -v /var/www/html/
# 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
비표준 방식으로 구성된 제한된 애플리케이션
서비스는 다양한 방식으로 실행될 수 있습니다. 이를 위해서는 서비스 실행 방법을 지정해야 합니다. SELinux 부울을 통해 SELinux 정책의 일부를 런타임 시 변경할 수 있습니다. 이렇게 하면 SELinux 정책을 다시 로드하거나 다시 컴파일하지 않고도 NFS 볼륨에 대한 서비스 액세스 허용과 같은 변경이 가능합니다. 또한 기본이 아닌 포트 번호에서 서비스를 실행하려면 semanage
명령을 사용하여 업데이트하는 정책 구성이 필요합니다.
예를 들어 Apache HTTP 서버가 MariaDB와 통신하도록 허용하려면 httpd_can_network_connect_db
부울을 활성화합니다.
setsebool -P httpd_can_network_connect_db on
# setsebool -P httpd_can_network_connect_db on
-P
옵션을 사용하면 시스템을 재부팅해도 설정이 지속됩니다.
특정 서비스에 대해 액세스가 거부되면 getsebool
및 grep
유틸리티를 사용하여 액세스를 허용하는 부울을 사용할 수 있는지 확인합니다. 예를 들어 getsebool -a | grep ftp
명령을 사용하여 FTP 관련 부울을 검색합니다.
부울 목록을 가져오고 활성화되어 있는지 확인하려면 getsebool -a
명령을 사용합니다. 의미와 같은 부울 목록을 가져오고 해당 의미가 활성화되어 있는지 확인하려면 selinux-policy-devel
패키지를 설치하고 semanage boolean -l
명령을 root로 사용합니다.
포트 번호
정책 구성에 따라 특정 포트 번호에서만 서비스를 실행할 수 있습니다. 정책을 변경하지 않고 서비스가 실행되는 포트를 변경하면 서비스가 시작되지 않을 수 있습니다. 예를 들어 semanage port -l | grep http
명령을 root로 실행하여 http
관련 포트를 나열합니다.
http_port_t
포트 유형은 포트 Apache HTTP Server가 수신할 수 있는 포트를 정의합니다. 이 경우 TCP 포트 80, 443, 488, 8008, 8009 및 8443입니다. 관리자가 httpd
가 포트 9876(Listen 9876
)에서 수신 대기하도록 httpd.conf
를 구성하지만 이를 반영하도록 정책이 업데이트되지 않으면 다음 명령이 실패합니다.
다음과 유사한 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
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
httpd
가 http_port_t
포트 유형에 대해 나열되지 않은 포트에서 수신 대기하도록 하려면 semanage port
명령을 사용하여 다른 레이블을 포트에 할당합니다.
semanage port -a -t http_port_t -p tcp 9876
# semanage port -a -t http_port_t -p tcp 9876
a
옵션은 새 레코드를 추가합니다. -t
옵션은 유형을 정의하고 -p
옵션은 프로토콜을 정의합니다. 마지막 인수는 추가할 포트 번호입니다.
주요 사례, 개발 또는 손상된 애플리케이션, 시스템 손상
애플리케이션에는 SELinux가 액세스를 거부하도록 하는 버그가 포함될 수 있습니다. 또한 SELinux 규칙은 진화합니다. SELinux는 특정 방식으로 실행되는 애플리케이션을 보지 못할 수 있으므로 애플리케이션이 예상대로 작동하고 있어도 액세스를 거부할 수 있습니다. 예를 들어 PostgreSQL의 새 버전이 릴리스되면 현재 정책이 고려하지 않는 작업을 수행할 수 있으므로 액세스가 허용되어야 하는 경우에도 액세스가 거부됩니다.
이러한 경우 액세스가 거부된 후 audit2allow
유틸리티를 사용하여 액세스를 허용하는 사용자 지정 정책 모듈을 생성합니다. Red Hat 고객 포털에서 지원 케이스를 제출하여 SELinux 정책에서 누락된 규칙을 보고할 수 있습니다. selinux-policy
구성 요소를 언급하고 케이스에 audit2allow -w -a
및 audit2allow -a
명령의 출력을 포함합니다.
애플리케이션에서 주요 보안 권한을 요청하면 애플리케이션이 손상되는 신호일 수 있습니다. 침입 탐지 도구를 사용하여 이러한 의심 스러운 동작을 검사합니다.
Red Hat 고객 포털 의 솔루션 엔진은 사용자가 보유하고 있는 동일하거나 매우 유사한 문제에 대한 가능한 솔루션이 포함된 문서 형태로 지침을 제공할 수도 있습니다. 관련 제품 및 버전을 선택하고 SELinux 관련 키워드(예: selinux 또는 avc )를 차단된 서비스 또는 애플리케이션의 이름과 함께 사용합니다(예: selinux samba
).