SELinux (리눅스 보안)
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