Linux-centos

SElinux

말하는감자 2021. 3. 10. 15:49

1. What is SElinux

  • Security-Enhanced Linux
  • 디렉토리, 파일 등 시스템 자원을 정당한 권한을 가진 그룹이나 사용자가 접근해서 사용할 수 있도록 통제하는 보안 요
  • 시스템 자원은 객체, 자원에 접근하는 사용자나 프로세스는 주체라고 호칭한다RF
  • 기존의 접근 통제 규칙보다 우선 동작
  • 보안 정책에 맞지 않으면 차단한다(chown, chmod 보다 상위) - 기본적으로 negative 정책

2. What is setuid 비트

  • 루트 권한이 필요한 기능을 사용할때 setuid 비트를 설정하여 실행한 사용자가 root가 아니라도 root로 동작하도록 설계되어 있기 때문에 가능하다
  • setuid가 켜져있는 경우에는 파일의 퍼미션 부분에 s표시가 같이 노출된다
  • s 표시는 setuid 비트가 켜져있는것을 의미하며 setuid 비트가 켜져있는 프로그램을 실행하면 루트 권한으로 실행되므로 프로그램에 보안 취약점이 있을 경우 문제가 될 수 있다

3. About SElinux

 

1) 보안 컨텍스트

  • SElinux에는 모든 프로세스와 객체마다 보안 컨텍스트라고 부르는 정보를 부여하여 관리한다. 이 정보는 접근 권한을 확인할 때 사용한다.

2) 보안 컨텍스트의 구성 요소

  • 사용자
    • 시스템의 사용자 X, SElinux 사용자 O
    • 역할이나 레벨과 연계하여 접근 권한을 관리하는데 사용
  • 역할
    • 하나 혹은 그 이상의 타입과 연결되어 SElinux의 사용자의 접근을 허용할 지 결정하는데 사용
  • 타입
    • Type Enforcement 속성 중 하나
    • 프로세스의 도메인이나 파일의 타입을 지정하고 이를 기반으로 접근 통제를 수행
    • 보안 컨텍스트의 핵심
    • 파일이나 디렉토리의 객체마다 보안 컨텍스트를 부여
    • ls나 ps등의 명령어에 -Z 옵션을 추가하면 확인 가능
  • 레벨
    • Multi Level System에 필요하며 강제 접근 통제보다 더 강력한 보안이 필요할 때 사용하는 기능

3) 사용

  • 파일과 디렉토리의 보안 컨텍스트 확인
    • uncofined_u -> 사용자
    • object_r -> 역할
    • httppd_sys_rw_content_t -> 타입
[user@ip]# ls -ldZ /var/www/html/wp/
drwxr--r--. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 /var/www/html/wp/

 

  • 아파치 httpd가 구동되었을 때 어떤 보안 컨텍스트를 갖게 되는지 확인
    • httpd 프로세스는 httpd_t라는 보안 컨텍스트를 갖고 구동되고 있다
[user@ip]# ps -ZC httpd
LABEL PID TTY TIME CMD
system_u:system_r:httpd_t:s0 0 ? 00:00:30 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:10 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:16 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:10 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:09 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:06 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:02 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:13 httpd
system_u:system_r:httpd_t:s0 0 ? 00:01:22 httpd
system_u:system_r:httpd_t:s0 0 ? 00:01:07 httpd
system_u:system_r:httpd_t:s0 0 ? 00:00:42 httpd

 

 

4) Type Enforcement

  • 기본적인 접근 통제를 처리하는 매커니즘
  • 주체가 객체에 접근시도할 때 주체에 부여된 보안 컨텍스트가 객체에 접근할 권한이 있는지 판단
apache가 /var/www/html/wp에 접근하려고 할 때
apache는 주체, wp는 객체
apache에 부여된 보안 컨텍스트는 httpd_t
wp에 부여된 보안 컨텍스트는 httpd_sys_content_t
httpd_t는 httpd_sys_content_t 보안 컨텍스트가 부여된 객체에 접근이 허용된다
Type Enforcement에 관련된 에러 메세지는 /var/log/audit/audit.log에 남는다

 

5) 동작 모드

  • SElinux는 enforce, permissive, disable 세가지 동작 모드가 있으며 설치시에는 기본적으로 enforce 모드로 동작한다
    • enforce - 정책과 어긋나는 룰은 모두 차단
    • permissive - 정책과 룰에 어긋나는 동작이 있을 경우 audit log를 남기고 해당 작업은 허용
  • setenforce 명령어로 설정한 모드는 영구적이지 않으며 재부팅시 설정이 초기화 된다

4. Use - 보안 컨텍스트

  • SElinux는 주요 경로마다 생성되는 파일에 대해 자동으로 보안 컨텍스트를 부여하게 설정되어 있다
    (ex : /var/www/html 에 생성하면 httpd_sys_content_t)
  • mv 명령어와 cp 명령어의 SElinux 동작 방식은 다르다
    • 만약 /root에 test.html 파일을 생성한다면 admin_home_t라는 컨텍스트를 갖게 된다
    • test.html을 mv 명령어로 /var/www/html/ 안으로 이동시킨다면 이 파일은 httpd_sys_content_t 보안 컨텍스트를 갖지 않고 admin_home_t 보안 컨텍스트를 갖게 된다

이 문제를 수정하기 위해서는

 

1) cp

  • test.html을 cp로 /var/www/html 안으로 복사하면 파일은 httpd_sys_content_t 보안 컨텍스트를 갖게 된다

2) restorecon

  • 잘못 설정된 보안 컨텍스트를 복구해준다
  • 부여되는 보안 컨텍스트는 사전에 설정된 정책에 의해 자동으로 설정된다
  • test.html 이 /var/www/html에 있을 경우와 /root에 있는 경우 두개가 다른 보안 컨텍스트를 갖게 된다는 뜻이다
restrecon /var/www/html/test.html
restrecon -R /var/www/html

3) chcon

  • 객체의 보안 컨텍스트를 직접 지정해준다
  • 가장 많이 사용하는 옵션은 -R(재귀적 처리)과 -t(컨텍스트 지정)
chcon -R -t httpd_sys_content_t /var/www/html/test.html

4) 보안 컨텍스트 확인

  • 어떤 디렉터리에 어떤 보안 컨텍스트를 부여해야 할지 모르는 경우 디렉토리별 필요한 보안 컨텍스트를 알아낼 수 있다
[user@ip]# matchpathcon /var/www/html/
/var/www/html system_u:object_r:httpd_sys_content_t:s0

 

'Linux-centos' 카테고리의 다른 글

centos에 python, uwsgi, flask, nginx 설치하고 설정하기  (0) 2021.03.29
mariadb 10.5 설치  (0) 2021.03.16
scp + pem  (0) 2021.03.09
리눅스 (centos) 취약점 점검  (0) 2021.02.26
wordpress 설치하기  (0) 2021.02.24