쿠버네티스 전문가 양성과정 4주차 3일(1/11)

최수환·2023년 1월 11일
0

Kubernetes

목록 보기
19/75
post-thumbnail

SElinux

  • SElinux는 리눅스의 보안을 강화하기 위해 탄생하였다
    💡 리눅스의 전통적인 보안은 퍼미션이다

  • 커널에서 동작하는 보안 모듈
    📕 메모리는 커널과 사용자로 나누어져있고 커널이 실제 프로세스 작업을 하는 것이고 사용자는 메모리에 올라온 프로그램 (프로세스)을 셸을 통해 커널에게 전달한다

보안 접근제어 모델

  • DAC (Discretionary Access Control, 임의적 접근제어)
    • 객체 소유자가 임의로 객체에게 권한을 부여하고 객체에 대한 접근을 제어하는 접근 제어 모델
    • 유닉스/리눅스의 기본적으로 사용하는 접근제어 모델
    • 접근하는 주체의 신분을 확인한다
  • MAC (Mandatory Access Control, 강제적 접근제어)
    • SElinux를 사용하는 경우 시스템에 적용되는 보안 접근제어 모델
    • 주체와 객체에 각각 부여된 보안 레이블(context)과 정책 스위치(boolean)에 의해 접근을 제어하는 접근제어 모델
      📒 보안 레이블은 군대의 대외비라고 생각하면 쉽다
      -> 퍼미션을 통과해도 객체의 레이블을 확인 후 주체가 해당 레이블을 가지고 있는지 확인 후 접근을 제어
    • 주체가 객체에 접근할 때 먼저 객체에 접근할 수 있는 권한이 있는지 확인후 보안 레이블을 확인함
    • 보안 레이블에 의해 거부된 접근은 정책 허용 스위치(boolean)에 의해서 허용될 수 있음
  • RBAC(Role-Based Access Control, 역할 기반의 접근제어)
    • 역할 기반의 접근 제어 모델로, 역할에게 시스템에서 수핼할 수 있는 작업에 대한 권한을 할당하는 접근제어 모델
    • 예로 총무부라는 역할, 인사부라는 역할을 만들고 각 부서가 가져야 할 권한을 역할에게 부여한 뒤 사용자에게 인사부 역할을 줬다가 총무부로 이전하면 인사부 역할을 빼고 총무부 역할을 주면 된다
      📘 AWS의 IAM 롤이랑 흡사하다

📗 주체(Subject) : 시스템의 리소스에 접근할 수 있는 프로세스, 사용자
📗 객체(Object) : 파일 또는 포트 등과 같은 시스템의 리소스

SElinux 실습

  • SElinux 설정은 오로지 root만 가능하다
  • getenforce : SElinux의 동작 모드 확인
  • /etc/selinux/config : SElinux 설정 파일
    • SELINUXTYPE : 정책 유형
      • targeted : 특정 프로세스 보호 (기본값)
      • minimum : 최소한의 프로세스만 보호
      • mls : Multi-Level Security (고급보안) = 보안등급
    • SELINUX : 동작 모드
      • enforcing (강제모드) : SElinux 활성화, 로그 기록, MAC 모델 적용
        📙 SElinux 활성화 : 부팅할 때 SElinux가 커널에 올라옴
      • permissive (허용모드) : SElinux가 활성화는 되지만 보안 정책을 강제하지 않음, 로그 기록, DAC 모델 적용
      • disabled (비활성) : SElinux 비활성화, 부팅시 아예 커널 모듈을 로딩하지 않는다
  • sestatus : SElinux의 정보 자세히 보기
  • setenforce : SElinux 동작 모드 설정 (현재 Runtime만 적용)
    -> ex) setenforce permissive (0) setenforce enforcing(1)

보안컨텍스트(보안레이블)

  • 프로세스 보안 컨텍스트 확인 : ps axZ
    -> ex) ps axZ | grep httpd : 해당 프로세스의 레이블 확인
    = ps -ZC httpd

    사용자 :역할 :유형 :레벨

  • 파일 보안 컨텍스트 확인 : ls -alZ
    -> ex) ls -dZ /root : 해당 디렉터리의 레이블 확인

    -> ex) ls -dZ /var/www/html : 해당 디렉터리의 레이블 확인

    📌 프로세스의 레이블과 파일의 레이블이 같아야 프로세스가 해당 파일에 작업을 할 수 있다.


context 실습

  • systemctl start httpd
  • firewall-cmd --add-service=http --permanent
  • firewall-cmd --reload
  • cd /var/www/html
  • vi index.html접속 후 텍스트 입력
  • 웹페이지 접속 정상적으로 확인(context = httpd_sys_content_t)
  • 해당 파일 삭제 후 루트 디렉터리에서 다시 index.html 만들고 mv /var/www/html로 이동
  • ls -Z /var/www/html/index.html 확인해보면 context(admin_home_t)가 그대로 이동한 것을 확인 -> 웹페이지 접속 x
    📒 cp로 옮기면 context가 바뀌어서 웹페이지 접속 가능

context 설정

  • chcon : context 임시로 설정
  • chcon -t [SELINUX_TYPE_CONTEXT][FILE]
  • ex) chcon -t httpd_sys_content_t /var/www/html/index.html
    -> context를 html로 바꾸어주었기 때문에 웹페이지 접속 가능

현재 리눅스 시스템의 context 리스트 보기

  • semanage fcontext -l | grep /var/www/html
    -> 정규표현식으로 디렉터리 위치를 나타내고 해당 위치가 가지는 context값이 설정되어 있다. 해당 디렉터리 위치에 파일을 만들면 파일은 그 context값을 가진다.
  • semanage port -l | grep http : port의 context (레이블) 보기
    📒 port도 context(레이블)를 가지고 있다
  • SELINUX 포트 레이블에 포트 추가
    • semanage port -a -t 포트타입 -p tcp/udp 번호
    • ex) semanage port -a -t http_port_t -p tcp 10000
    • 수정 : semanage port -m -t 포트타입 -p tcp/udp 번호
    • 삭제 : semanage port -d -t 포트타입 -p tcp/udp 번호

context를 복원하는 명령어

  • 리스트에 명시된 context로 알아서 복원이 된다
  • restorecon [옵션] 파일
  • restore -R 파일 : 해당 디렉터리 뿐 아니라 서브 디렉터리까지
  • -v : 자세히
  • -f : 강제
  • ex) restorecon -R /var/www/html/index.html
    -> mv로 이동했기때문에 context가 달라서 접속이 안됐지만
    restorecon으로 리스트에 명시된 context로 바꾸어 주었기 때문에 웹페이지 접속 가능
  • ex) semanage fcontext -a -t "admin_home_t" /tmp/rootfil1
    : context 리스트에 위치에 해당하는 context값을 추가한다
    -> 추가한뒤 재부팅하면 적용되거나, restorecon을 통해 리스트에 명시된 위치에 해당하는 값으로 복구
  • semanage fcontext -d -t "admin_home_t" /tmp/rootfile1
    : context에 추가한 위치+context 삭제하기
    📕 리스트에 기본적으로 존재하는 값들은 삭제 못한다

boolean 설정

  • context가 일치하지 않아도 접근할 수 있다
  • getsebool -a : bool 설정 목록 보기 (런타임 정보)
  • semanage boolean -l : bool 설정 목록 보기
    (런타임 정보, 영구적 정보)
  • 부울 설정(런타임) : setsebool [SELINUX_BOOL] on/off
  • 부울설정(런타임,영구적) : setsebool -P [SELINUX_BOOL] on/off

📌 보통 SElinux에 차단당한 경우 setenforce permissive(0) 으로 끄거나, restorecon로 설정하거나, boolean설정을 한다


추가정보

정규화 - 하나의 릴레이션에 하나의 의미만 갖도록 relation을 분리해나가는 과정(불필요한 데이터의 중복을 제거) -> insert, delete, update의 성능이 좋아진다

  • 단점 : 너무 많은 분리로 특정 데이터를 찾을 때 많은 join연산이 필요하여 select(조회)의 성능이 느려진다
    -> 반정규화 : 데이터의 중복을 감수하면서 relation을 합치는 과정 -> select(조회)의 성능 증가

💡 data redunduncy = 불필요한 데이터의 중복

profile
성실하게 열심히!

0개의 댓글