11.3. 문제 해결


다음 섹션에서는 문제를 해결하는 데 도움이 됩니다. SELinux 규칙보다 먼저 확인하는 Linux 권한 확인: SELinux의 가능한 원인은 액세스를 거부하지만 거부를 거부하지만 기록되지는 않음, 레이블링 및 부울에 대한 정보가 포함된 서비스 수동 페이지; 전체 시스템 대신 하나의 프로세스가 허용을 실행할 수 있도록 허용 도메인, 거부 메시지를 검색하고 보는 방법, 감사2allow 를 사용하여 사용자 지정 정책 모듈을 생성하는 방법.

11.3.1. Linux 권한

액세스가 거부되면 표준 Linux 권한을 확인합니다. 1장. 소개 에서 언급했듯이 대부분의 운영 체제는 DAC(임의적 액세스 제어) 시스템을 사용하여 액세스를 제어하므로 사용자가 소유한 파일의 권한을 제어할 수 있습니다. SELinux 정책 규칙은 DAC 규칙 후에 확인됩니다. DAC 규칙이 먼저 액세스를 거부하면 SELinux 정책 규칙이 사용되지 않습니다.
액세스가 거부되고 SELinux 거부가 기록되지 않은 경우 다음 명령을 사용하여 표준 Linux 권한을 확인합니다.
~]$ ls -l /var/www/html/index.html
-rw-r----- 1 root root 0 2009-05-07 11:06 index.html
이 예에서 index.html 은 root 사용자 및 그룹이 소유합니다. root 사용자에게는 읽기 및 쓰기 권한(-rw)이 있으며 root 그룹의 멤버는 읽기 권한(-r-)을 갖습니다. 다른 모든 사용자에게는 액세스 권한이 없습니다(---). 기본적으로 이러한 권한은 httpd 가 이 파일을 읽는 것을 허용하지 않습니다. 이 문제를 해결하려면 chown 명령을 사용하여 소유자와 그룹을 변경합니다. 이 명령은 root로 실행해야 합니다.
~]# chown apache:apache /var/www/html/index.html
이 명령은 httpd 가 Linux Apache 사용자로 실행되는 기본 구성을 가정합니다. httpd 를 다른 사용자로 실행하는 경우 apache:apache 를 해당 사용자로 교체합니다.
Linux 권한 관리에 대한 정보는 Fedora Documentation Project "Permissions" 초안을 참조하십시오.

11.3.2. 음소거 거부의 원인

특정 상황에서 SELinux가 액세스를 거부하면 AVC 거부 메시지가 기록되지 않을 수 있습니다. 애플리케이션 및 시스템 라이브러리 기능은 작업을 수행하는 데 필요한 것보다 더 많은 액세스 권한을 조사하는 경우가 많습니다. 무해한 애플리케이션 탐색을 위해 AVC 거부로 감사 로그를 채우지 않고 최소 권한을 유지하기 위해 정책은 dontaudit 규칙을 사용하여 권한을 허용하지 않고 AVC 거부를 음소거할 수 있습니다. 이러한 규칙은 표준 정책에서 일반적입니다. dontaudit의 단점은 SELinux가 액세스를 거부하지만 거부 메시지가 기록되지 않으므로 문제 해결이 더 어렵습니다.
dontaudit 규칙을 일시적으로 비활성화하여 모든 거부를 로깅할 수 있도록 하려면 다음 명령을 root로 입력합니다.
~]# semodule -DB
D 옵션은 dontaudit 규칙을 비활성화합니다. -B 옵션은 정책을 다시 빌드합니다. semodule -DB 를 실행한 후 권한 문제가 발생한 애플리케이션을 수행하고 애플리케이션과 관련된 SELinux 거부가 기록되고 있는지 확인합니다. dontaudit 규칙에 의해 일부 거부를 무시하고 처리해야 하므로 허용되는 거부를 결정할 때 주의하십시오. 확실하지 않거나 지침을 검색할 때 SELinux 목록(예: fedora-selinux-list )의 다른 SELinux 사용자와 개발자에게 문의하십시오.
정책을 다시 빌드하고 dontaudit 규칙을 활성화하려면 root로 다음 명령을 입력합니다.
~]# semodule -B
이렇게 하면 정책이 원래 상태로 복원됩니다. 전체 dontaudit 규칙 목록은 sesearch --dontaudit 명령을 실행합니다. 범위를 좁히면 -s domain 옵션과 grep 명령을 사용하여 검색 범위를 좁힙니다. 예를 들어 다음과 같습니다.
~]$ sesearch --dontaudit -s smbd_t | grep squid
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;
분석 거부에 대한 자세한 내용은 11.3.6절. “원시 감사 메시지”11.3.7절. “sealert 메시지” 을 참조하십시오.

11.3.3. 서비스 수동 페이지

서비스의 수동 페이지에는 지정된 상황에 사용할 파일 유형과 같은 중요한 정보와 서비스 액세스를 변경하는 부울(예: httpd 가 NFS 볼륨에 액세스)이 포함됩니다. 이 정보는 표준 도움말 페이지 또는 sepolicy manpage 유틸리티를 사용하여 모든 서비스 도메인에 대한 SELinux 정책에서 자동으로 생성될 수 있는 도움말 페이지에 있을 수 있습니다. 이러한 도움말 페이지의 이름은 service-name_selinux 형식으로 지정됩니다. 이러한 도움말 페이지는 selinux-policy-doc 패키지와 함께 제공됩니다.
예를 들어 httpd_selinux(8) 도움말 페이지에는 주어진 상황에 사용할 파일 유형과 부울을 사용하여 스크립트를 허용하고, 파일을 공유하고, 사용자 홈 디렉터리 내의 디렉터리에 액세스하는 등의 정보가 있습니다. 서비스를 위한 SELinux 정보가 포함된 기타 도움말 페이지는 다음과 같습니다.
  • Samba: samba_selinux(8) 도움말 페이지는 예를 들어 samba_enable_home_dirs 부울을 활성화하면 Samba가 사용자 홈 디렉터리를 공유할 수 있음을 설명합니다.
  • NFS: nfsd_selinux(8) 도움말 페이지는 사용자가 가능한 한 방법으로 nfsd 프로세스를 보안할 수 있는 SELinux nfsd 정책을 설명합니다.
도움말 페이지의 정보는 SELinux가 액세스를 거부하지 않도록 올바른 파일 유형과 부울을 구성하는 데 도움이 됩니다.
sepolicy manpage 에 대한 자세한 내용은 5.4절. “수동 페이지 생성: sepolicy manpage 을 참조하십시오.

11.3.4. 허용 도메인

SELinux가 허용 모드로 실행 중이면 SELinux는 액세스를 거부하지 않지만 강제 모드에서 실행 중인 경우 거부된 작업에 대해 거부된 작업에 대해 거부됩니다. 이전에는 단일 도메인 허용(프로세스: 프로세스가 도메인에서 실행됨)을 수행할 수 없었습니다. 이로 인해 전체 시스템의 문제를 해결할 수 있게 되었습니다.
허용 도메인을 사용하면 관리자가 전체 시스템 허용을 수행하는 대신 단일 프로세스(도메인)가 허용 실행되도록 구성할 수 있습니다. SELinux 검사는 허용 도메인에 대해 계속 수행됩니다. 그러나 커널은 SELinux가 액세스를 거부한 상황에서 AVC 거부를 허용합니다.
허용 도메인에는 다음과 같은 용도가 있습니다.
  • 단일 프로세스(도메인) 실행 허용(도메인)을 실행하여 전체 시스템을 허용하도록 위험을 초래하지 않고 문제를 해결하는 데 사용할 수 있습니다.
  • 이를 통해 관리자는 새 애플리케이션에 대한 정책을 만들 수 있습니다. 이전에는 최소 정책을 생성한 다음 전체 시스템을 허용 모드로 전환하여 애플리케이션을 실행할 수 있지만 SELinux 거부는 여전히 기록되었습니다. 그런 다음 audit2allow 를 사용하여 정책을 작성할 수 있습니다. 이로 인해 전체 시스템이 위험해질 수 있습니다. 허용 도메인을 사용하면 새 정책의 도메인만 전체 시스템을 위험에 빠뜨리지 않고 허용으로 표시할 수 있습니다.

11.3.4.1. 도메인 허용 만들기

도메인을 허용하도록 하려면 semanage permissive -a domain 명령을 실행합니다. 여기서 domain 은 허용적으로 만들 도메인입니다. 예를 들어 root로 다음 명령을 입력하여 httpd_t 도메인( Apache HTTP Server가 실행되는 도메인)을 허용하도록 설정합니다.
~]# semanage permissive -a httpd_t
허용으로 만든 도메인 목록을 보려면 semodule -l | grep permissive 명령을 root로 실행합니다. 예를 들어 다음과 같습니다.
~]# semodule -l | grep permissive
permissive_httpd_t    (null)
permissivedomains     (null)
더 이상 도메인을 허용하지 않으려면 semanage permissive -d domain 명령을 root로 실행합니다. 예를 들어 다음과 같습니다.
~]# semanage permissive -d httpd_t

11.3.4.2. 허용 도메인 비활성화

permissivedomains.pp 모듈에는 시스템에 제공된 모든 허용 도메인 선언이 포함되어 있습니다. 모든 허용 도메인을 비활성화하려면 root로 다음 명령을 입력합니다.
~]# semodule -d permissivedomains
참고
semodule -d 명령을 통해 정책 모듈을 비활성화하면 semodule -l 명령의 출력에 더 이상 표시되지 않습니다. 비활성화를 포함한 모든 정책 모듈을 보려면 root로 다음 명령을 입력합니다.
~]# semodule --list-modules=full

11.3.4.3. 허용 도메인에 대한 거부

SYSCALL 메시지는 허용 도메인에 따라 다릅니다. 다음은 Apache HTTP 서버의 AVC 거부 (및 관련 시스템 호출)의 예입니다.
type=AVC msg=audit(1226882736.442:86): avc:  denied  { getattr } for  pid=2427 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file

type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
기본적으로 httpd_t 도메인은 허용되지 않으므로 작업이 거부되고 SYSCALL 메시지에 success=no 가 포함됩니다. 다음은 semanage permissive -a httpd_t 명령이 httpd_t 도메인을 허용하도록 실행되었음을 제외하고 동일한 상황에 대한 AVC 거부의 예입니다.
type=AVC msg=audit(1226882925.714:136): avc:  denied  { read } for  pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file

type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
이 경우 AVC 거부가 기록되었지만 SYSCALL 메시지의 success=yes 에 표시된 대로 액세스가 거부되지 않았습니다.
허용 도메인에 대한 자세한 내용은 Dan Walsh의 "허용 도메인" 블로그 항목을 참조하십시오.

11.3.5. 거부 검색 및 보기

이 섹션에서는 setroubleshoot,setroubleshoot-server,dbusaudit 패키지가 설치되어 있고 auditd,rsyslogdsetroubleshootd 데몬이 실행 중인 것으로 가정합니다. 이러한 데몬을 시작하는 방법에 대한 자세한 내용은 4.2절. “사용된 로그 파일은 무엇입니까?” 을 참조하십시오. ausearch,aureport, sealert 와 같은 SELinux AVC 메시지를 검색하고 보는 데 사용할 수 있습니다.

ausearch

audit 패키지는 다양한 검색 기준을 기반으로 이벤트에 대한 감사 데몬 로그를 쿼리할 수 있는 ausearch 유틸리티를 제공합니다.[10] ausearch 유틸리티는 /var/log/audit/audit.log 에 액세스하므로 root 사용자로 실행해야 합니다.
검색 대상: 모든 거부
명령: ausearch -m avc,user_avc,selinux_err,user_selinux_err
검색 대상: 이에 대한 거부는 오늘
명령: ausearch -m avc -ts 오늘
검색 대상: 지난 10분 후 거부
명령: ausearch -m avc -ts recent
특정 서비스에 대한 SELinux AVC 메시지를 검색하려면 -c comm-name 옵션을 사용합니다. 여기서 comm-name 은 실행 파일 이름(예: Apache HTTP Server의 경우 httpd, Samba의 경우 smbd )을 사용합니다.
~]# ausearch -m avc -c httpd
~]# ausearch -m avc -c smbd
ausearch 명령에서는 읽기 쉽도록 --interpret (-i) 옵션을 사용하거나 스크립트 처리를 위해 --raw (-r) 옵션을 사용하는 것이 좋습니다. 추가 ausearch 옵션은 ausearch(8) 매뉴얼 페이지를 참조하십시오.

aureport

audit 패키지는 감사 시스템 로그에 대한 요약 보고서를 생성하는 aureport 유틸리티를 제공합니다. [11] aureport 유틸리티는 /var/log/audit/audit.log 에 액세스하므로 root 사용자로 실행해야 합니다. SELinux 거부 메시지 목록과 각 메시지가 발생한 빈도를 보려면 aureport -a 명령을 실행합니다. 다음은 두 개의 거부를 포함하는 출력 예입니다.
~]# aureport -a

AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
1. 05/01/2009 21:41:39 httpd unconfined_u:system_r:httpd_t:s0 195 file getattr system_u:object_r:samba_share_t:s0 denied 2
2. 05/03/2009 22:00:25 vsftpd unconfined_u:system_r:ftpd_t:s0 5 file read unconfined_u:object_r:cifs_t:s0 denied 4

sealert

setroubleshoot-server 패키지는 setroubleshoot-server 에서 번역한 거부 메시지를 읽는 sealert 유틸리티를 제공합니다.[12] 거부는 /var/log/messages 에 표시된 대로 ID가 할당됩니다. 다음은 메시지 거부의 예입니다.
setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket. For complete SELinux messages. run sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7
이 예에서 거부 ID는 8c123656-5dda-4e5d-8791-9e3bd03786b7 입니다. l 옵션은 ID를 인수로 사용합니다. sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7 명령을 실행하면 SELinux가 액세스를 거부한 이유와 액세스 허용에 대한 자세한 분석을 제공합니다.
X Window 시스템을 실행하고 setroubleshootsetroubleshoot-server 패키지가 설치되어 있고 setroubleshootd,dbusauditd 데몬이 실행 중인 경우 SELinux에서 액세스가 거부되면 경고가 표시됩니다.
AVC 거부 메시지
Show 를 클릭하면 문제를 해결할 수 있는 sealert GUI가 시작됩니다.
또는 sealert -b 명령을 실행하여 sealert GUI를 실행합니다. 모든 거부 메시지에 대한 자세한 분석을 보려면 sealert -l \* 명령을 실행합니다.

11.3.6. 원시 감사 메시지

원시 감사 메시지는 /var/log/audit/audit.log 에 기록됩니다. 다음은 Apache HTTP Server( httpd_t 도메인에서 실행)가 /var/www/html/file1 파일( samba_share_t 유형으로 레이블이 지정된)에 액세스하려고 할 때 발생한 AVC 거부 메시지(및 관련 시스템 호출)의 예입니다.
type=AVC msg=audit(1226874073.147:96): avc:  denied  { getattr } for  pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file

type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
{ getattr }
중괄호의 항목은 거부된 권한을 나타냅니다. getattr 항목은 소스 프로세스가 대상 파일의 상태 정보를 읽으려고 한다는 것을 나타냅니다. 이 작업은 파일을 읽기 전에 수행됩니다. 이 작업은 레이블이 잘못되어 액세스 중인 파일로 인해 거부됩니다. 일반적으로 표시되는 권한에는 getattr,read, write 가 포함됩니다.
comm="httpd"
프로세스를 시작한 실행 파일입니다. 실행 파일의 전체 경로는 시스템 호출의 exe= 섹션에 있습니다(이 경우 exe="/usr/sbin/httpd" ).
path="/var/www/html/file1"
프로세스가 액세스하려고 한 개체(대상)의 경로입니다.
scontext="unconfined_u:system_r:httpd_t:s0"
거부된 작업을 시도한 프로세스의 SELinux 컨텍스트입니다. 이 경우 httpd_t 도메인에서 실행 중인 Apache HTTP Server의 SELinux 컨텍스트입니다.
tcontext="unconfined_u:object_r:samba_share_t:s0"
프로세스가 액세스를 시도한 개체(대상)의 SELinux 컨텍스트입니다. 이 경우 file1 의 SELinux 컨텍스트입니다. samba_share_t 유형은 httpd_t 도메인에서 실행되는 프로세스에 액세스할 수 없습니다.
특정 상황에서 tcontext 는 예를 들어 프로세스가 사용자 ID와 같은 실행 중인 프로세스의 특성을 변경하는 시스템 서비스를 실행하려고 할 때 scontext 와 일치할 수 있습니다. 또한 프로세스가 일반 제한보다 더 많은 리소스(예: 메모리)를 사용하려고 할 때 t context 와 일치하여 해당 프로세스가 해당 제한을 중단할 수 있는지 보안 검사를 수행할 수 있습니다.
시스템 호출(SYSCALL) 메시지에서 다음 두 항목이 중요합니다.
  • success=no: 거부(AVC)가 적용되었는지 여부를 나타냅니다. success=no 는 시스템 호출이 성공하지 못했음을 나타냅니다(SELinux 거부된 액세스). success=yes 는 시스템 호출에 성공했음을 나타냅니다. 허용 도메인 또는 제한되지 않은 도메인(예: unconfined_service_tkernel_t )에서 확인할 수 있습니다.
  • exe="/usr/sbin/httpd": 프로세스를 시작한 실행 파일의 전체 경로(이 경우 exe="/usr/sbin/httpd" ).
잘못된 파일 유형은 SELinux에서 액세스를 거부하는 일반적인 원인입니다. 문제 해결을 시작하려면 소스 컨텍스트(scontext)와 대상 컨텍스트(tcontext)를 비교합니다. 프로세스(scontext)가 이러한 오브젝트(tcontext)에 액세스해야 합니까? 예를 들어 Apache HTTP Server(httpd_t)는 별도로 구성된 경우를 제외하고 httpd_sys_content_t,public_content_thttpd_selinux(8) 매뉴얼 페이지에 지정된 유형에만 액세스해야 합니다.

11.3.7. sealert 메시지

거부는 /var/log/messages 에 표시된 대로 ID가 할당됩니다. 다음은 Apache HTTP Server( httpd_t 도메인에서 실행)가 /var/www/html/file1 파일( samba_share_t 유형으로 레이블이 지정된)에 액세스하려고 할 때 발생한 AVC 거부( 메시지에로그됨)의 예입니다.
hostname setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
권장된 대로 sealert -l 32eee32b-21ca-4846-a22f-0ba050206786 명령을 실행하여 전체 메시지를 확인합니다. 이 명령은 로컬 시스템에서만 작동하며 sealert GUI와 동일한 정보를 제공합니다.
~]$ sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
SELinux is preventing httpd from getattr access on the file /var/www/html/file1.

*****  Plugin restorecon (92.2 confidence) suggests   ************************

If you want to fix the label. 
/var/www/html/file1 default label should be httpd_sys_content_t.
Then you can run restorecon.
Do
# /sbin/restorecon -v /var/www/html/file1

*****  Plugin public_content (7.83 confidence) suggests   ********************

If you want to treat file1 as public content
Then you need to change the label on file1 to public_content_t or public_content_rw_t.
Do
# semanage fcontext -a -t public_content_t '/var/www/html/file1'
# restorecon -v '/var/www/html/file1'

*****  Plugin catchall (1.41 confidence) suggests   **************************

If you believe that httpd should be allowed getattr access on the file1 file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'httpd' --raw | audit2allow -M my-httpd
# semodule -i my-httpd.pp


Additional Information:
Source Context                system_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:samba_share_t:s0
Target Objects                /var/www/html/file1 [ file ]
Source                        httpd
Source Path                   httpd
Port                          <Unknown>
Host                          hostname.redhat.com
Source RPM Packages           
Target RPM Packages           
Policy RPM                    selinux-policy-3.13.1-166.el7.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     hostname.redhat.com
Platform                      Linux hostname.redhat.com
                              3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57
                              EDT 2017 x86_64 x86_64
Alert Count                   2
First Seen                    2017-07-20 02:52:11 EDT
Last Seen                     2017-07-20 02:52:11 EDT
Local ID                      32eee32b-21ca-4846-a22f-0ba050206786

Raw Audit Messages
type=AVC msg=audit(1500533531.140:295): avc:  denied  { getattr } for  pid=24934 comm="httpd" path="/var/www/html/file1" dev="vda1" ino=31457414 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file


Hash: httpd,httpd_t,samba_share_t,file,getattr
요약
거부된 작업에 대한 간략한 요약. 이는 /var/log/messages 의 거부와 동일합니다. 이 예에서 httpd 프로세스는 samba_share_t 유형으로 레이블이 지정된 파일(file1)에 대한 액세스가 거부되었습니다.
자세한 설명
보다 자세한 설명. 이 예에서 file1samba_share_t 유형으로 레이블이 지정됩니다. 이 유형은 Samba를 사용하여 내보내려는 파일 및 디렉터리에 사용됩니다. 설명은 이러한 액세스가 필요한 경우 Apache HTTP Server 및 Samba에서 액세스할 수 있는 유형으로 유형을 변경하는 것을 제안합니다.
액세스 허용
액세스를 허용하는 방법에 대한 제안 사항. 이는 파일의 레이블을 다시 지정하거나 부울을 활성화하거나 로컬 정책 모듈을 만드는 것일 수 있습니다. 이 경우 제안은 Apache HTTP 서버와 Samba 모두에서 액세스할 수 있는 유형을 사용하여 파일에 레이블을 지정하는 것입니다.
명령 수정
액세스를 허용하고 거부를 해결하기 위해 제안된 명령. 이 예제에서는 Apache HTTP Server 및 Samba가 액세스할 수 있는 file1 유형을 public_content_t 로 변경하는 명령을 제공합니다.
추가 정보
정책 패키지 이름 및 버전(selinux-policy-3.13.1-166.el7.noarch)과 같은 버그 보고서에 유용한 정보는 거부가 발생한 이유를 해결하는 데 도움이 되지 않을 수 있습니다.
원시 감사 메시지
거부와 관련된 /var/log/audit/audit.log 의 원시 감사 메시지입니다. AVC 거부의 각 항목에 대한 자세한 내용은 11.3.6절. “원시 감사 메시지” 을 참조하십시오.

11.3.8. 액세스 허용: audit2allow

주의
production의 이 섹션에서는 예제를 사용하지 마십시오. audit2allow 유틸리티 사용을 시연하는 데만 사용됩니다.
audit2allow 유틸리티는 거부된 작업의 로그에서 정보를 수집한 다음 SELinux 정책 허용 규칙을 생성합니다.[13] 11.3.7절. “sealert 메시지” 에 따라 거부 메시지를 분석한 후 레이블 변경 또는 부울이 액세스할 수 없는 경우 audit2allow 를 사용하여 로컬 정책 모듈을 생성합니다. SELinux에서 액세스를 거부하는 경우 audit2allow 를 실행하면 이전에 거부된 액세스를 허용하는 Type Enforcement 규칙이 생성됩니다.
SELinux 거부가 표시될 때 audit2allow 를 사용하여 첫 번째 옵션으로 로컬 정책 모듈을 생성하지 않아야 합니다. 레이블 지정 문제가 있는 경우 문제 해결을 시작해야 합니다. 두 번째 가장 자주 발생하는 사례는 프로세스 구성을 변경했으며 SELinux에 대해 알려주는 것을 잊어버리는 것입니다. 자세한 내용은 SELinux 오류의 4가지 주요 원인 백서를 참조하십시오.
다음 예제에서는 audit2allow 를 사용하여 정책 모듈을 생성하는 방법을 보여줍니다.
  1. 거부 메시지 및 관련 시스템 호출은 /var/log/audit/audit.log 파일에 기록됩니다.
    type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
    
    type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)
    
    이 예에서 certwatchvar_t 유형으로 레이블이 지정된 디렉터리에 대한 쓰기 액세스 권한이 거부되었습니다. 거부 메시지를 11.3.7절. “sealert 메시지” 에 따라 분석합니다. 레이블 변경 또는 부울이 액세스할 수 없는 경우 audit2allow 를 사용하여 로컬 정책 모듈을 생성합니다.
  2. 다음 명령을 입력하여 액세스가 거부된 이유에 대한 사람이 읽을 수 있는 설명을 생성합니다. audit2allow 유틸리티는 /var/log/audit/audit.log 를 읽고 root 사용자로 실행해야 합니다.
    ~]# audit2allow -w -a
    type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
    	Was caused by:
    		Missing type enforcement (TE) allow rule.
    
    	You can use audit2allow to generate a loadable module to allow this access.
    
    a 명령줄 옵션을 사용하면 모든 감사 로그를 읽습니다. w 옵션은 사람이 읽을 수 있는 설명을 생성합니다. 표시된 대로 유형 적용 규칙이 누락되어 액세스가 거부되었습니다.
  3. 거부된 액세스를 허용하는 유형 적용 규칙을 보려면 다음 명령을 입력합니다.
    ~]# audit2allow -a
    
    
    #============= certwatch_t ==============
    allow certwatch_t var_t:dir write;
    
    중요
    유형 적용 규칙이 누락된 경우 일반적으로 SELinux 정책의 버그로 인해 발생하며 Red Hat Bugzilla 에서 보고해야 합니다. Red Hat Enterprise Linux의 경우 Red Hat Enterprise Linux 제품에 대한 버그를 생성하고 selinux-policy 구성 요소를 선택합니다. 이러한 버그 보고서에 audit2allow -w -aaudit2allow -a 명령의 출력을 포함합니다.
  4. audit2allow -a 에 의해 표시되는 규칙을 사용하려면 root로 다음 명령을 입력하여 사용자 지정 모듈을 생성합니다. M 옵션은 현재 작업 디렉터리에 -M 으로 지정된 이름으로 Type Enforcement 파일(.te)을 생성합니다.
    ~]# audit2allow -a -M mycertwatch
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:
    
    semodule -i mycertwatch.pp
    
  5. 또한 audit2allow 는 유형 시행 규칙을 정책 패키지(.pp)로 컴파일합니다.
    ~]# ls
    mycertwatch.pp  mycertwatch.te
    
    모듈을 설치하려면 root로 다음 명령을 입력합니다.
    ~]# semodule -i mycertwatch.pp
    중요
    audit2allow 로 생성된 모듈은 필요한 것보다 더 많은 액세스를 허용할 수 있습니다. review를 위해 audit2allow 로 생성된 정책을 업스트림 SELinux 목록에 게시하는 것이 좋습니다. 정책에 버그가 있다고 생각되면 Red Hat Bugzilla 에 버그를 생성하십시오.
여러 프로세스의 거부 메시지가 여러 개 있지만 단일 프로세스에 대한 사용자 지정 정책만 생성하려면 grep 유틸리티를 사용하여 audit2allow 입력을 좁힙니다. 다음 예제에서는 grep 을 사용하여 certwatch 와 관련된 거부 메시지만 audit2allow 를 통해 보내는 방법을 보여줍니다.
~]# grep certwatch /var/log/audit/audit.log | audit2allow -R -M mycertwatch2
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i mycertwatch2.pp


[10] ausearch 에 대한 자세한 내용은 ausearch(8) 매뉴얼 페이지를 참조하십시오.
[11] aureport 에 대한 자세한 내용은 aureport(8) 매뉴얼 페이지를 참조하십시오.
[12] sealert 에 대한 자세한 내용은 sealert(8) 매뉴얼 페이지를 참조하십시오.
[13] audit2allow 에 대한 자세한 내용은 audit2allow(1) 매뉴얼 페이지를 참조하십시오.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.