/ rhcsa-new

RHCSA : Manage security – Diagnose and address routine SELinux policy violations.

rhcsa-new redhat-new SELinux setroubleshoot-server SELinux Policy Violation /var/log/audit/audit.log audit2why command
https://4am.kr/rhcsa-manage-security-diagnose-and-address-routine-selinux-policy-violations/

RHCSA : 보안 관리 – 일상적인 SELinux 정책 위반을 진단 및 해결

RHCSA 주제입니다. 아래 참조된 사이트를 번역 및 내용 추가하였습니다.

실습

1. setroubleshoot-server 패키지를 설치한다.
[root@server2 /]# yum install -y setroubleshoot-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package setroubleshoot-server-3.2.17-2.el7.x86_64 already installed and latest version
Nothing to do
[root@server2 /]# 

노트: 사실 policycoreutils-python패키지가 semanage커맨드를 포함하고 있지만, setroubleshoot-server라는 패키지가 해당 패키지를 포함하고 있고, 패키지명이 기억하기 쉬우므로 항상 사용한다.

2. SELinux 정책 위반사항들을 확인하려면 다음과 같이 입력한다.
[root@server2 /]# sealert -a /var/log/audit/audit.log
 99% done'list' object has no attribute 'split'
100% done
found 2 alerts in /var/log/audit/audit.log
--------------------------------------------------------------------------------

SELinux is preventing /usr/sbin/load_policy from load_policy access on the security .

*****  Plugin catchall_boolean (89.3 confidence) suggests   ******************

If allow secure to mode policyload을 하고자 합니다 
Then 'secure_mode_policyload' 부울을 활성화하여 이에 대해 SELinux에 알려야 합니다.

Do
setsebool -P secure_mode_policyload 0

*****  Plugin catchall (11.6 confidence) suggests   **************************

If load_policy는 디폴트로  security에서 load_policy 액세스를 허용해야 합니다. 
Then 이 버그를 보고해야 합니다. 
이러한 액세스를 허용하기 위해 로컬 정채 모듈을 생성할 수 있습니다. 
Do
지금 이 액세스를 허용하려면 다음을 실행합니다: 
# grep load_policy /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp


Additional Information:
Source Context                unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1
                              023
Target Context                system_u:object_r:security_t:s0
Target Objects                 [ security ]
Source                        load_policy
Source Path                   /usr/sbin/load_policy
Port                          <Unknown>
Host                          <Unknown>
Source RPM Packages           policycoreutils-2.2.5-11.el7.x86_64
Target RPM Packages           
Policy RPM                    selinux-policy-3.12.1-153.el7.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     server2.example.com
Platform                      Linux server2.example.com 3.10.0-123.el7.x86_64 #1
                              SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64
Alert Count                   2
First Seen                    2016-04-29 16:18:24 KST
Last Seen                     2016-04-29 16:18:24 KST
Local ID                      e1a8c35d-6e71-458b-a78e-3a537faf60d0

Raw Audit Messages
type=AVC msg=audit(1461914304.402:1299): avc:  denied  { load_policy } for  pid=6353 comm="load_policy" scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:security_t:s0 tclass=security


type=SYSCALL msg=audit(1461914304.402:1299): arch=x86_64 syscall=write success=no exit=EACCES a0=4 a1=7fd556add010 a2=358065 a3=7fff097489b0 items=0 ppid=6351 pid=6353 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=12 comm=load_policy exe=/usr/sbin/load_policy subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)

Hash: load_policy,unconfined_t,security_t,security,load_policy

--------------------------------------------------------------------------------

SELinux is preventing /usr/sbin/load_policy from load_policy access on the security .

*****  Plugin catchall_boolean (89.3 confidence) suggests   ******************

If allow secure to mode policyload을 하고자 합니다 
Then 'secure_mode_policyload' 부울을 활성화하여 이에 대해 SELinux에 알려야 합니다.

Do
setsebool -P secure_mode_policyload 0

*****  Plugin catchall (11.6 confidence) suggests   **************************

If load_policy는 디폴트로  security에서 load_policy 액세스를 허용해야 합니다. 
Then 이 버그를 보고해야 합니다. 
이러한 액세스를 허용하기 위해 로컬 정채 모듈을 생성할 수 있습니다. 
Do
지금 이 액세스를 허용하려면 다음을 실행합니다: 
# grep load_policy /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp


Additional Information:
Source Context                unconfined_u:system_r:unconfined_t:s0-s0:c0.c1023
Target Context                system_u:object_r:security_t:s0
Target Objects                 [ security ]
Source                        load_policy
Source Path                   /usr/sbin/load_policy
Port                          <Unknown>
Host                          <Unknown>
Source RPM Packages           policycoreutils-2.2.5-11.el7.x86_64
Target RPM Packages           
Policy RPM                    selinux-policy-3.12.1-153.el7.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     server2.example.com
Platform                      Linux server2.example.com 3.10.0-123.el7.x86_64 #1
                              SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64
Alert Count                   2
First Seen                    2016-04-29 16:19:13 KST
Last Seen                     2016-04-29 16:19:13 KST
Local ID                      4f54d90c-5a27-4e2c-ab45-9c6a8daf89df

Raw Audit Messages
type=AVC msg=audit(1461914353.704:1301): avc:  denied  { load_policy } for  pid=6390 comm="load_policy" scontext=unconfined_u:system_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:security_t:s0 tclass=security


type=SYSCALL msg=audit(1461914353.704:1301): arch=x86_64 syscall=write success=no exit=EACCES a0=4 a1=7fcced84d010 a2=358065 a3=7fff5ed75350 items=0 ppid=6387 pid=6390 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=12 comm=load_policy exe=/usr/sbin/load_policy subj=unconfined_u:system_r:unconfined_t:s0-s0:c0.c1023 key=(null)

Hash: load_policy,unconfined_t,security_t,security,load_policy

[root@server2 /]# 

추가로, AVC(Access Vector Cache)이벤트가 발생하면, /var/log/audit/audit.log파일의 관련된 줄들만 모아서 audit2why커맨드로 분석을 위해 보낼 수 있다.

3. 실제로 분석을 해보면 다음과 같다.
[root@server2 /]# grep 461914353.704:1301 /var/log/audit/audit.log | audit2why
type=AVC msg=audit(1461914353.704:1301): avc:  denied  { load_policy } for  pid=6390 comm="load_policy" scontext=unconfined_u:system_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:security_t:s0 tclass=security

	Was caused by:
	The boolean secure_mode_policyload was set incorrectly. 
	Description:
	Allow secure to mode policyload

	Allow access by executing:
	# setsebool -P secure_mode_policyload 0
[root@server2 /]# 

문제를 찾는데에 많은 도움이 될 것이다.

추가 자료

Jens Depuydt의 블로그는 SELinux in a practical way라는 이 주제와 관련된 좋은 글을 제공한다.
Sander van VugtFixing SELinux Issues (48분/2015년)라는 흥미로운 비디오를 제공한다.
Red Hat의 SELinux 관련 프리젠테이션을 통해서도 찾아볼 수 있다.