[RHCSA 준비] SELinux 개념과 유용한 명령어
blog post
- Policy: 출발지 객체가 타겟에 접근하는 것에 대해 정의한 룰의 모임
- Source domain: 목표에 접근하려고 하는 객체. 일반적으로 유저나 프로세스를 의미
- Target domain: 출발 객체가 접근하려고 하는 것. 일반적으로 파일이나 포트를 의미
- Context: selinux에서 카테고리화 된 객체들을 사용하는 보안 라벨
- Rule: 타겟 도매인으로 접근을 허가하는 소스 도메인을 결정하는 정책의 특정 부분
- Labels: 타겟 도메인으로 접근하는 소스 도메인을 결정하도록 정의된 컨텍스트 라벨과 동일
만약 selinux 모드를 적용하려면 재부팅해야 합니다. 커널이 selinux를 로드하기 때문에, 재부팅 과정에서 커널이 selinux 모드를 로드할 수 있도록 해야하기 때문입니다.
selinux는 아래와 같이 3가지 모드가 있습니다.
- enforcing mode : 정책에 있는 모든 selinux들이 완전히 작동됩니다.
- permissive mode: selinux와 관련된 로그는 기록이 되나, 접근이 차단되지는 않습니다. 특히 이 모드는 selinux관점에서 무언가를 하거나 결과를 볼 때 유용하고, 새로운 무언가를 설정하거나 정책의 효과를 살펴볼 때 좋습니다.
- disabled: selinux 시스템 자체를 사용하지 않습니다.
selinux 설정에 사용되는 주요 명령어는 아래와 같습니다.
- setenforce 0 : permissive 모드로 설정
- setenforce 1 : enforcing 모드로 설정
- getenfoce : 현재 설정된 selinux 모드를 보여준다.
- setenforce : 원하는 모드로 selinux를 설정한다.
- sestatus -v : 현재 서버에 설정된 selinux의 상태를 보여줌
현재 context labels 확인하는 명령어 는 아래와 같습니다.(-Z 옵션이 주로 컨텍스트 라벨과 관련된 옵션입니다)
- ls -Z: 파일 시스템에서 디렉토리의 컨텍스트 세팅을 보여준다
- ps Zaux: 컨텍스트 라벨을 포함하여 모든 프로세스 리스트를 보여준다
- netstat -Ztulpen: 네트워크의 모든 포트와 각 포트와 관련된 현재 컨택스트 라벨을 보여준다.
모든 컨텍스트 라벨은 항상 다음의 세 부분으로 표시됩니다.
- User: '_u' 가 뒤에 붙으며, 이는 사용자를 의미합니다. selinux에서의 유저는 리눅스의 유저를 의미하는 것은 아니며, RHCSA나 RHCE 에서 중요한 부분은 아닙니다.
- Role: '_r' 이 뒤에 붙으며, 보통 object_r 규칙으로 라벨이 붙습니다. 참고로 RHCSA나 RHCE에서 구성하는 방법에 대해서는 몰라도 됩니다..
- Type: '_t' 가 붙으며, / 파일 시스템에서 디렉토리에 적용된 매우 다양한 컨텍스트 타입들을 볼 수 있습니다. 그리고 Type 컨텍스트 라벨은 작동하는 방법에 대해 잘 알아야 합니다.
- 즉, RHCSA나 RHCE에서는 user 나 role 은 무시해도 됩니다.
RHCSA에서는 디렉토리와 파일에 컨텍스트 타입을 설정하는 것이 중요합니다. (RHCE는 네트워크 포트까지)
- semanage: 이 커맨드는 파일 시스템에 적용될 새로운 selinux 정책 콘텍스트를 쓰기위해 사용합니다.
- chcon: 이 커맨드는 보통 우회하기 위해 사용되며, 기존에 파일시스템에 적용되었던 정책을 다시 덮어 씌우거나 기존 컨텍스트를 재저장하기 위해 사용됩니다. (시험에서사용하지 말것을 추천드립니다.)
context type 셋팅할 때 사용하는 주요 명령 및 옵션입니다.
- ex) semanage fcontext -a -t httpd_sys_content_t "/mydir(/.*)?"
- -a : 수동으로 만들 때 사용
- -t : type을 변환할 때 사용
- 정규표현식: 하위 디렉토리를 모두 포함할 때
- ex) restorecon -R -v /mydir
- semanage fcontext: context type을 셋팅한다.
- restorecon: 셋팅한 파일 시스템 정책을 적용한다
SElinux 셋팅 중 어려운 부분 중 하나는 필요한 컨텍스트를 찾는 것이다. 3가지 방법이 있습니다.
- 기본 환경 살펴보기
- 구성 파일 읽기
- man -k _selinux 를 사용하여 해당 서비스를 위한 SELinux-specific man page 찾기
restorecon 을 통해 정책을 기본 셋팅으로 되돌릴 수 있습니다. 새로운 파일이 문제가 생기면 이를 고치는데 유용합니다. 이를 사용하는 방법에 대해 알기 전에 새로운 컨텍스트 세팅이 적용되는 방법에 대해 우선 알아야 합니다.
- 새로운 파일이 만들어지면 그 파일은 부모 디렉토리로 부터 컨텍스트 세팅을 상속받습니다.
- 만약 한 파일이 다른 디렉토리로 복사되면, 새로운 파일이 만들어지고, 그 파일은 부모 디렉토리로 부터 컨텍스트 세팅을 상속받습니다.
- 만약 한 파일이 이동하거나 cp -a 등의 명령어로 속성이 유지된 채로 복사되면, 그 파일의 기존 컨텍스트 셋팅이 그대로 유지되어 적용됩니다.
- 위의 세가지 상황은 restorecon을 사용함으로써 쉽게 고쳐질 수 있습니다.
Selinux Boolean : 각 서비스에 대한 특정 행동에 대해 허가/거부를 규정할 수 있습니다. 단, 해당 서비스의 설정과 selinux boolean의 설정이 충돌날 경우, Boolean의 설정이 우선순위를 갖습니다.
- getsebool -a | grep ftp : ftp 서비스의 boolean 설정을 보여줍니다
- semanage boolean -l | grep ftp : ftp 서비스의 boolean 설정을 보여줍니다 (getsebool 과 비슷함)
SELinux 정책 위반 진단하고 처리하는 방법에는 아래 방법이 있습니다.
- grep AVC /var/log/audit/audit.log : selinux에 관한 로그 기록 확인 (아래는 예시)
- avc: denies { something } : something 에 대한 요청이 거부되었다
- comm=alsactl : something에 대한 문제를 시도하고 있는 명령어가 바로 alsactl 이다.
- path="/var/lib/alsa/sound.state" 해당 프로세스가 접근하려한 파일
- scontext: source context 정보
- tcontext: target context 정보
- sealert 로 보면 ui 로 쉽게 분석할 수 있도록 합니다.
- 단, 트러블 슈팅 방법이 어떤 경우에는 너무 많이 나와서 그 중에 관리자가 하나를 선택해야하는 경우도 있고, 어떤 경우에는 꽤 유용하기도 합니다.
- /var/log/audit/audit.log : 기본적으로 이 파일에 selinux 관련 모든 로그가 기록되며, type=AVC 표시가 있는 로그들이 이에 해당됩니다.
'Linux > Linux Operation' 카테고리의 다른 글
CentOS7에서 GlusterFS 클러스터 노드 추가하기 (0) | 2020.10.18 |
---|---|
CentOS7에서 GlusterFS(GFS)를 활용하여 파일 시스템 마운트 하기 (0) | 2020.10.03 |
CentOS7에서 NTP 서버 구축으로 시간 동기화 하기 (0) | 2020.09.30 |
[Linux] CentOS8에서 웹 서버를 활용한 개인 Yum Repository 서버 구축하기 (0) | 2020.04.09 |
[RHCSA 준비] FreeIPA 서버 구축하기 (0) | 2017.02.26 |
[RHCSA 준비] 아파치 서버 구성하기 (0) | 2017.02.26 |
[RHCSA 준비] 킥스타트 서버 구성하기 (0) | 2017.02.26 |