[Linux / CentOS 7] SELinux (모드, 해제), 접근 제어 모델(DAC, MAC, RBAC)
리눅스는 일반적으로 DAC(Discretionary Access Control) 접근 제어 모델을 사용합니다. DAC 는 사용자의 권한을 기반으로 파일과 자원에 대한 접근을 제어합니다. DAC는 편리하지만 특정 소프트웨어 취약점이 존재했을 때 취약점을 통해서 시스템 권한과 정보가 쉽게 탈취될 수 있다는 단점이 있습니다.
SELinux(Security Enhanced Linux)는 리눅스의 보안을 강화해주는 커널 모듈이고, 이 것을 사용하면 DAC 이 아닌 MAC(Mandatoryy Access Control)을 사용합니다. MAC은 프로세스, 사용자, 포트, 파일 등에 정책을 부여해서 접근을 제어 합니다.
접근 제어 모델
DAC(Discretionary Access Control) : 임의적 접근 제어
- 시스템 자원에 권한을 부여하여 접근을 제어하는 방식
- 자원에 대한 소유권에 기반
- 시스템 권한 및 정보가 쉽게 탈취될 수 있음
MAC(Mandatoryy Access Control) : 강제 접근 제어
- DAC 모델 적용 후 보안 레이블 확인
- 보안 레이블에 의해 거부된 접근은 정책 허용 스위치에 의해서 다시 접근 가능
- 구성이 어렵고, 비밀유지가 필요한 곳에서 사용
RBAC(Role Based Access Control) : 역할 기반 접근 제어
- 역할은 다수의 권한을 묶어 놓은 그룹
- 관리자가 사용자에게 역할을 부여함으로써 권한을 제어
SELinux 모드
Enforcing, Permissive, Disabled 3가지 모드가 있습니다.
set status
명령어로 확인이 가능합니다
[root@server1 ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Enforcing
- SELinux 커널 모듈을 메모리에 로드
- SELinux 활성화 상태, 정책을 강제함
- MAC 모델 - 접근 권한, Context, 정책 허용 스위치 등을 확인
Permissive
- SELinux 커널 모듈을 메모리에 로드
- SELinux 활성화 상태, 정책을 강제하지 않음 (경고 메시지만 남김)
- Enforcing 모드 전환 전에 문제 해결용도로 사용
Disabled
- SELinux 커널 모듈을 메모리에 로드하지 않음
- 완전히 비활성화 되어있는 상태
- DAC 모델 사용 - 권한 기준 접근 제어
SELinux 모드 설정하기
getenforce
: 현재 적용된 SELinux 모드 확인
[root@server1 ~]# getenforce
Enforcing
setenforce <모드넘버>
: 모드 변경
모드넘버 0: Permissive, 1: Enforcing
[root@server1 ~]# setenforce 0
[root@server1 ~]# getenforce
Permissive
[root@server1 ~]# setenforce 1
[root@server1 ~]# getenforce
Enforcing
SELinux 해제하기
SELinux는 해제 하지않고 활성화 하는것이 보안에 좋습니다
SELinux 설정 파일 /etc/selinux/config
을 편집기로 열어줍니다
[root@server1 ~]# vi /etc/selinux/config
----------- 파일내용------------
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
SELINUX=enforcing
=> SELINUX=disabled
로 변경후 저장합니다
SELINUX=disabled
시스템을 재부팅 합니다.
[root@server1 ~]# reboot
getenforce
로 확인
[root@server1 ~]# getenforce
Disabled