본문으로 바로가기

SELinux (리눅스 보안)

category MLOps/Linux 2022. 1. 29. 21:13

1. SELinux (Security Enhanced Linux)

1) 개념

- 리눅스 시스템을 좀 더 안전하게 사용하기 위한 방법 중 하나

- 기존의 파일 권한 설정 및 방화벽 포트 설정에 대한 추가 구성

 

2) 접근 제어 모델

- DAC: 접근하는 사용자를 기준으로 접근 제어 (기존의 리눅스)

- MAC: 접근 시 사용자 뿐만 아니라 프로세스 종류까지 따지는 방식 (SELinux)

- RBAC: 각 동작(기능)별로 허용 여부를 역할로 설정. 사용자에게 그 역할 할당

 

3) MAC모델 (SELinux) 동작 원리

- context (보안 레이블)과 boolean (정책 허용 스위치) 사용

- SELinux 활성화 -> 모든 프로세스와 파일에 context 부여

 

4) 설정 방식

- 동작모드: 시스템 부팅 시 모듈의 실행 여부 혹은 실행 후 정책의 강제성 여부 결정 (enforcing, permissive, disabled)

- 파일 컨텍스트: 각 파일에 대해 접근 가능한 프로세스 지정

- 포트 컨텍스트: 네트워크 포트 번호 마다 프로토콜 (서비스)을 지정해서 허용여부 결정

- 부울: 컨텍스트에 더해 추가적인 제어를 위한 설정. 프로세스 기능 별로 제어

 

2. 동작 모드

1) 종류

- enforcing: 설정해둔 정책 적용

- permissive: 정책에 따라 제한을 하지는 않지만 기록

- disabled: 정책 비활성화 (SELinux 모듈 자체를 실행하지 않음)

 

2) 모드 설정

# 모드 확인
getenforce

# 모드 변경 (enforcing, permissive만 가능)
# 단, 영구 설정 불가
setenforce <Enforcing or Permissive>

# 영구 설정
vi /etc/selinux/config

 

3. SELinux Context

1) context 확인

# 프로세스: -Z 옵션 사용
ps axZ

# 파일
ls -dZ <file>

 

2) 파일 컨텍스트 설정

- chcon: 파일에 컨텍스트 설정 (임시 설정)
- restorecon: 수동으로 컨텍스트 초기화
- semanage fcontext: 초기화 시 적용될 기본값을 설정

# chcon 명령
# 파일 컨텍스트 임시 변경
chcon [option] <FILE>
# -t 사용하여 유형 변경

# restorecon 명령
# 수동으로 컨텍스트 초기화
restorecon [option] <FILE>

# semanage fcontext
# 초기화 시 적용될 기본값 설정

# 보안 레이블 정책 확인
semanage fcontext -l

# 설정
semanage fcontext -a -t <context> '/context/smb(/.*)?'
restorecon -RFv /context/smb/

 

3) 포트 컨텍스트 설정

- semanage port로 설정

# 확인
semanage port -l

# port label 설정
semanage port {-a | -m | -d} -t port-type -p {tcp | udp} port-number

# ex) httpd서비스 기본 포트 80번을 8900번으로 변경하려면 해당 포트 레이블 http_port_t 지정해야 정상작동
semanage port -a -t http_port_t -p tcp 8900

# 주의: 하나의 포트 번호는 두 개의 포트 레이블에 등록 불가
# -> -m 옵션 사용하여 변경

 

4. SELinux Boolean

1) 개념

- 부울을 사용하여 컨텍스트 유형이 맞지 않더라도 주체가 객체에 접근할 수 있도록 정책의 동작 범위 수정

- 스위치처럼 on/off하여 기능 수정 가능. 재부팅 X

- 프로세스 기능 별로 제어

- 컨텍스트에 더해 추가적인 제어를 위한 설정

 

2) 설정

# 확인
getsebool {-a | boolean-name}
# or
semanage boolean -l

# 설정
setsebool [-P] boolean-name {on | off}
# or
semanage boolean -m {-0 | -1} boolean-name

'MLOps > Linux' 카테고리의 다른 글

DHCP 서버  (0) 2022.01.30
DNS 서버 및 구축방법  (0) 2022.01.30
네트워크 티밍  (0) 2022.01.29
방화벽 관리, 포트포워딩, 리치 규칙  (0) 2022.01.28
NTP 서버 관리  (0) 2022.01.28