Today I Learn - 26

이정빈·2021년 3월 17일
0

클라우드 엔지니어

목록 보기
27/53
post-thumbnail

SELinux - 보안 기능 (Secure Enhanced Linux)

SELinux 소개

미국 NSA(국가안보국)에 의해 개발됨 - PRISM
접근통제모델
DAC : Discretionary Access Control (임의적 접근 제어)
기본적인 리눅스의 파일 접근 권한
MAC : Mandatory Access Control (강제적 접근제어)
SELinux : 개체별로 Label 기반의 접근 제어
RBAC : Role-Based Access Control (역할 기반 접근제어)
사용자-역할 매칭, 역할 별로 권한이 부여

컨텍스트(Context) : SELinux에서 사용하는 Label
사용자 : 역할 : 유형 : 레벨
stat [파일명]
ls -Z [파일명/디렉토리]

SELinux 동작모드

Enforcing

SELinux 동작 상태
SELinux 규칙 위반할 경우 차단

Permissive

SELinux 동작 상태
SELinux 규칙 위반할 경우 차단하지 않음
모니터링 용도

Disabled

SELinux 동작하지 않는 상태
Enforcing,Permissive ↔ Disabled
/etc/selinux/config : 동작모드 설정
동작모드 설정
enforcing : 강제
permissive : 모니터링
disabled : selinux 구동하지 않음
Enforcing, Permissive 상태에서 Disabled 전환 시 설정 변경 후 재부팅 필요

컨텍스트 지정 방식

mv, cp -a : 기존 파일의 컨텍스트 정보가 그대로 유지
cp, cat, vi, touch : 해당 위치 디렉토리에 설정된 기본 컨텍스트 규칙

컨텍스트 규칙

컨텍스트 규칙 설정 도구 : semange
semanage fcontext -l : 현재 설정되어 있는 컨텍스트 규칙 확인

컨텍스트 설정

chcon : 직접 대상의 컨텍스트 타입을 지정하여 설정
chcon -t <대상>
restorecon : 해당 파일 위치의 컨텍스트 규칙에 따라 수정
restorecon <대상>

컨텍스트 규칙 생성

semange fcontext -a -t <지정할 타입> <대상경로>
대상경로 입력시, 하위 디렉토리 및 파일까지 포함할 경우, 정규화 표현식의 (/.)? 를 사용하여 하위 항목까지를 포함하도록 설정
ex) semanage fcontext -a -t httpd_sys_content_t '/wwwcontents(/.
)?'
restorecon -Rv /wwwcontents

컨텍스트 규칙 삭제

semanage fcontext -d -t <타입> <대상경로>

실습 - 다른 경로에 저장된 컨텐츠를 사용하는 웹 서비스 구성

웹 서버 설정 수정
vi /etc/httpd/conf/httpd.conf
DocumentRoot “/var/www/html” => “/webcontents”
<Directory “/var/www/html”> => “/webcontents”
웹 컨텐츠 경로 생성 및 페이지 생성
mkdir /webcontents
cat > /webcontents/index.html
Hello World
웹 서비스 재시작
systemctl restart httpd.service
Enforcing 상태일 경우, SELinux에 의해 차단됨
SELinux 컨텍스트 규칙 추가
semanage fcontext -a -t httpd_sys_content_t '/webcontents(/.*)?'
컨텍스트 규칙에 맞게 컨텍스트 수정
restorecon -Rv /webcontents

포트레이블 (SELinux Port Label)

네트워크 포트에 대한 SELinux 설정
컨텍스트 규칙이 맞지 않을 경우, 포트를 사용할 수 없음
포트 레이블 확인
semanage port -l
포트 레이블 규칙 추가
semanage port -a -t <타입> -p <프로토콜> <포트번호>
ex) semanage port -a -t http_port_t -p tcp 7777
포트 레이블 규칙 삭제
semanage port -d -t <타입> -p <프로토콜> <포트번호>

SELinux Boolean

여러가지 예외 상황에 대한 설정을 on/off로 사용 가능

SELinux 문제 해결 방법

Enforcing 상태에서 동작 확인
문제가 있을 경우, Permissive 모드로 변경하여 동작 확인
Permissive에서 정상동작 : 관련된 문제 정보를 로그/감사 등을 통해 확인 (/var/log/messages)
참고) sealert 관련 내용이 포함되어 있을 경우 sealert -l <에러코드> 실행을 통해 SELinux 오류 관련 도움을 받을 수 있음
컨텍스트/포트레이블 등의 설정을 통해 오류 해결
SE Boolean등으로 오류 해결

=============================================================

부팅 문제 해결

root 패스워드 복구
root 패스워드 임의 설정
echo “2njksehlwjhiw” | passwd --stdin root

재부팅 후 부트로더의 동작(GRUB) 중 잠시 정지시키고 카운트 멈춤

부팅 항목 중 하나를 선택 후 ‘e’ 눌러서 편집

명령어 편집기에서 linux16으로 시작하는 항목 맨 끝에 rd.break 추가 => 부팅 단계에서 멈춤
부팅이 완료되었으나, 사용중인 리눅스 시스템이 정상적으로 로드되지는 않은 상태(파일시스템)

파일시스템은 현재 /sysroot에 마운트 되어 있으며, 수정하기 위하여 읽기/쓰기 가능하도록 마운트 설정을 변경하여야 함
mount -o rw,remount /sysroot
패스워드 변경을 하기 위해 chroot 명령을 사용
chroot /sysroot
패스워드 변경
passwd
SELinux 컨텍스트 규칙에 맞게 컨텍스트를 수정하기 위해 다음 명령을 수행
touch /.autorelabel

profile
WAS Engineer, Cloud Engineer(지망)

0개의 댓글