3장. 대상 지정 정책
대상 지정 정책은 Red Hat Enterprise Linux에서 사용되는 기본 SELinux 정책입니다. 타겟 정책을 사용하는 경우 대상이 되는 프로세스는 제한된 도메인에서 실행되며, 타겟이 지정되지 않은 프로세스는 제한되지 않은 도메인에서 실행됩니다. 예를 들어 기본적으로 로그인된 사용자는
unconfined_t 도메인에서 실행되고, init run에 의해 시작된 시스템 프로세스는 unconfined_service_t 도메인에서 실행됩니다. 두 도메인 모두 제한되지 않습니다.
실행 가능 및 쓰기 가능한 메모리 검사는 제한된 도메인과 제한되지 않은 도메인 모두에 적용될 수 있습니다. 그러나 기본적으로 제한되지 않은 도메인에서 실행 중인 주체는 쓰기 가능한 메모리를 할당하고 실행할 수 있습니다. 이러한 메모리 검사는 런타임 시 SELinux 정책을 수정할 수 있는 부울을 설정하여 활성화할 수 있습니다. 부울 구성은 나중에 설명합니다.
3.1. 제한된 프로세스 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
sshd 또는 httpd 와 같은 네트워크에서 수신 대기하는 거의 모든 서비스는 Red Hat Enterprise Linux에서 제한됩니다. 또한 root 사용자로 실행하고 passwd 유틸리티와 같은 사용자에 대한 작업을 수행하는 대부분의 프로세스는 제한됩니다. 프로세스가 제한되면 httpd_t 도메인에서 실행되는 httpd 프로세스와 같이 자체 도메인에서 실행됩니다. SELinux 정책 구성에 따라 공격자가 제한된 프로세스가 손상되면 공격자가 리소스에 대한 액세스와 가능한 손상을 제한합니다.
SELinux가 활성화되어 시스템이 다음 예제를 수행할 준비가 되었는지 확인하려면 다음 절차를 완료합니다.
절차 3.1. SELinux 상태를 확인하는 방법
- SELinux가 활성화되어 있고 강제 모드로 실행 중이며 타겟 정책이 사용 중인지 확인합니다. 올바른 출력은 아래 출력과 유사해야 합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 모드 변경에 대한 자세한 내용은 4.4절. “SELinux 상태 및 모드의 영구 변경” 을 참조하십시오. - root 로서
/var/www/html/디렉터리에 파일을 생성합니다.touch /var/www/html/testfile
~]# touch /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 새로 생성된 파일의 SELinux 컨텍스트를 보려면 다음 명령을 입력합니다.
ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로 Linux 사용자는 Red Hat Enterprise Linux에서 제한되지 않습니다. 따라서testfile파일은 SELinuxunconfined_u사용자로 레이블이 지정됩니다. RBAC는 파일이 아닌 프로세스에 사용됩니다. 역할에는 파일에 대한 의미가 없습니다.object_r역할은 파일(영구 스토리지 및 네트워크 파일 시스템에서)에 사용되는 일반 역할입니다./proc디렉터리에서 프로세스와 관련된 파일은system_r역할을 사용할 수 있습니다.httpd_sys_content_t유형을 사용하면httpd프로세스가 이 파일에 액세스할 수 있습니다.
다음 예제에서는 SELinux가 Apache HTTP Server(
httpd)가 Samba에서 사용하기 위한 파일과 같이 올바르게 레이블이 지정되지 않은 파일을 읽지 못하도록 하는 방법을 보여줍니다. 이는 예제이며 프로덕션에서 사용해서는 안 됩니다. httpd 및 wget 패키지가 설치되어 있고, SELinux 대상 지정 정책이 사용되며 SELinux가 강제 모드로 실행 중이라고 가정합니다.
절차 3.2. 제한된 프로세스의 예
- root 로
httpd데몬을 시작합니다.systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s ago
~]$ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux 사용자가 에 대한 쓰기 액세스 권한이 있는 디렉터리로 변경하고 다음 명령을 입력합니다. 기본 구성을 변경하지 않는 한 이 명령은 성공합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - chcon 명령은 파일의 레이블을 다시 지정하지만 파일 시스템의 레이블을 다시 지정할 때 이러한 레이블 변경 사항은 유지되지 않습니다. 파일 시스템 재레이블 후에도 유지되는 영구 변경 사항은 나중에 설명하는
semanage유틸리티를 사용합니다. root로 다음 명령을 입력하여 유형을 Samba에서 사용하는 유형으로 변경합니다.chcon -t samba_share_t /var/www/html/testfile
~]# chcon -t samba_share_t /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 보려면 다음 명령을 입력합니다.ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 현재 DAC 권한을 사용하면
httpd프로세스에서testfile에 액세스할 수 있습니다. 사용자가 쓰기 액세스 권한이 있는 디렉터리로 변경하고 다음 명령을 입력합니다. 기본 구성을 변경하지 않는 한 이 명령은 실패합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
testfile제거 :rm -i /var/www/html/testfile
~]# rm -i /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpd를 실행할 필요가 없는 경우 root로 다음 명령을 입력하여 중지합니다.systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
이 예에서는 SELinux에서 추가된 추가 보안을 보여줍니다. DAC 규칙에 따라 2단계에서
testfile 에 대한 액세스를 처리할 수 있지만 파일이 httpd 프로세스에 액세스할 수 없는 유형으로 레이블이 지정되었기 때문에 SELinux는 액세스를 거부했습니다.
auditd 데몬이 실행 중인 경우 다음과 유사한 오류가 /var/log/audit/audit.log:에 기록됩니다.
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
또한 다음과 유사한 오류는
/var/log/httpd/error_log 에 기록됩니다.
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied