리눅스 보안

eunyeong·2023년 1월 11일
0

Linux_Basic

목록 보기
2/4

SELinux(Security Enhanced Linux)는 MAC(Mandatory Access Control) 모델을 사용하여 사용자, 프로세스, 파일, 포트 등에 정의되어 있는 정책을 부여해 접근을 제어한다. SELinux는 각 사용자나 프로세스 그리고 파일에 보안 레이블을 지정하는데 이는 컨텍스트(Context)라고 부른다. 연관성 있는 컨텍스트여야 사용자가 접근할 수 있다. 부울(Boolean)은 서로 접근할 필요가 있을 때 접근을 허용하는 스위치와 같은 기능으로 On 또는 Off 할 수 있으며 시스템이 운영 중인 상태에서도 정책의 동작을 변경할 수 있다. SELinux는 포트에도 레이블을 적용하기 때문에 표준 포트 이외의 포트를 사용하려면 포트 레이블을 적용해야 한다.

접근 제어 모델

  • 주체(Subject): 시스템의 자원에 접근하는 프로세스 또는 사용자
  • 객체(Object): 파일 또는 포트와 같은 시스템의 자원
  • MAC 모델:
    주체 ===(권한, 보안 레이블(context), 정책 허용 스위치(boolean))==> 객체

SELinux 모드

1) Disabled 모드
SELinux 커널 모듈을 메모리에 로드하지 않기 때문에 완전 비활성화 되어 있는 상태. 시스템은 DAC(Discretionary Access Control) 모델을 사용하며 파일에 부여된 권한을 기준으로 접근이 제어된다.

2) Enforcing 모드
커널 모듈을 메모리에 로드하여 활성화되어 있는 상태. 파일에 접근할 때 권한과 컨텍스트, 부울 등을 확인하고 필요시 차단

3) Permissive 모드
Enforcing 모드와 동일하게 활성화 되어 있지만 정책을 강제하지 않는다. 대신 위반 시 경고 메시지만 로그에 남김.

4) 추가 사항

  • Disabled 모드에서 Enforcing 모드로 전환할 경우 반드시 시스템을 재부팅해야 함. 하지만 Permissive <-> Enforcing 모드 시에는 재부팅하지 않고 전환 가능함.
  • getenforce 명령은 현재 시스템의 selinux를 확인할 수 있으며 setenforce {Enforcing|Permissive|1|0} 명령은 모드를 변경하는 명령이다.
  • 재부팅 시에도 유지하려면 /etc/selinux/config 파일을 수정해야함.

SELinux 컨텍스트

  1. 컨텍스트란?
    ps 또는 ls 명령에 -Z 옵션을 사용하면 프로세스와 파일에 지정된 컨텍스트를 확인할 수 있음
    사용자 : 역할 : 유형 : 레벨

1) 사용자 -> SELinux 사용자
2) 역할 -> 사용자와 도메인을 연결하는 기능이며, 궁극적으로 접근할 수 있는 오브젝트 유형을 결정
3) 유형 -> 주체가 객체에 접근하려고 할 때, 컨텍스트를 비교하기 위해 사용됨
4) 레벨 -> MLS(Multi Level Security) 정책을 사용하여 보완성을 더욱 강화할 때 사용됨

  1. 컨택스트의 변경
  • mv 명령 또는 cp -a 명령을 사용하여 파일을 이동하거나 복사하면 컨텍스트는 변경되지 않고 기존의 것을 유지함. 이는 접근할 수 없는 상황이 발생하므로 적절히 변경해야함.
  • chcon -t FILE을 이용하여 컨텍스트의 유형을 변경할 수 있음.
  • chcon -t httpd_sys_content_t index.html 와 같이 컨텍스트 유형을 변경하면 localhost 작동시 httpd 서비스를 정상적으로 제공할 수 있음.
  • semanage fcontext -l 명령으로 시스템에 등록된 보안 레이블 정책을 확인할 수 있고, restorecon 명령으로 인자로 지정된 파일의 컨텍스트가 디렉토리에 지정된 컨텍스트와 일치하지 않을 경우 보안 레이블 정책에 맞게 컨텍스트를 복구할 수 있다.
  • semanage fcontext -a -t [유형] 명령으로 컨텍스트를 추가할 수 있다. 그리고 추가적으로 restorecon 명령을 입력해야 실제로 반영됨.

SELinux 부울

  1. 부울의 확인
    getsebool {-a | boolean-name }
    semanage boolean -l

  2. 부울의 설정
    setsebool [-P] boolean-name {on | off}
    -P 옵션은 시스템이 재부팅 되어도 설정을 유지한다는 옵션
    semanage boolean -m {-0 | -1} boolean-name

SELinux 포트 레이블

  1. 포트 레이블 확인
    semanage port -l

  2. 포트 레이블 설정
    semanage port {-a | -m | -d} -t port-type -p {tcp|udp} port-number

profile
아무것도 모르는 초보

0개의 댓글