-
Rocky9: SELinux공부합시다!/LInux 2023. 1. 20. 00:15728x90
음! 강의시간에나 현업에서도 통상적으로 꺼놓고 사용하는 SELinux!
NSA(미국국토안보부)가 개발해서 Linux 재단에 기부한 Linux 보안성 향상 솔루션!
개인적인 생각이지만 NSA 이거보다 더 낳은 차세대 SELinux를 사용하고 있지 않나 생각이 듭니다만 - 음모론! ㅎㅎ
1. SELinux 적용모드
2. SELinux File Context Control
3. Boolean을 활용한 SELinux 정책 제어
4. SELinux 문제 점검 및 해결
순으로 진행하겠습니다.
1. SELinux 적용모드
1.1. SELinux 특징
1.1.1. SELinux는 프로세스와 리소스 간에 허용된 작업을 명시적으로 정의하는 액세스 규칙 집합을 적용
1.1.2. 액세스 규칙에 정의되어 있지 않은 작업은 허용되지 않음.
1.1.3. 정의된 작업만 허용되므로 보안 설계가 취약한 App도 악의적인 사용으로부터 보호됨.
1.1.4. 타겟 정책이 있는 App 또는 Service는 제한된 도메인에서 실행됨.
1.1.5. 정책이 없는 애플리케이션은 제한 없이 실행되며 SELinux로 보호되지 않음.
1.1.6. 개별 타겟 정책을 비활성화하여 애플리케이션과 보안 정책의 개발 및 디버깅을 지원.
1.2. SELinux 작동 모드
1.2.1. Enforcing(적용)
1.2.1.1. SELinux가 로드된 정책을 적용. 기본모드
1.2.2. Permissive(허용)
1.2.2.1. SELinux가 정책을 로드하고 활성 상태, 액세스 제어규칙을 적용하지 않고 액세스 위반을 기록
1.2.2.2. App 및 규칙을 Test하고 문제 해결
1.2.3. Disabled(비활성화)
1.2.3.1. SELinux Off, SELinux 위반이 거부되거나 기록되지 않음. 권장하지 않음
1.3. RHEL9
1.3.1. Booting 시 selinux=0 커널 매개 변수를 사용해야만 SELinux를 완전히 비활성화 할 수 있음.
grubby --update-kernel ALL --args selinux=0
1.3.2. /etc/selinux/config 파일에서 SELINUX=disabled 옵션 설정을 지원하지 않음.
1.3.3. /etc/selinux/config 파일에서 SELinux를 비활성화하면 SELinux에서 활성 상태의 적용을 시작하고 수행하지만 정책은 Load되지 않음.
1.3.4. 정책 규칙은 허용된 작업을 정의하므로 정책이 로드되지 않으면 모든 작업이 거부
1.3.5. SELinux 보호를 우회하려는 악의적인 시도를 차단하기 위해 설계
1.4. SELinux 기본 개념
1.4.1. 손상된 애플리케이션 또는 시스템 서비스로 인한 부적절한 사용으로부터 사용자 데이터를 보호.
1.4.2. 관리자가 필요에 따라 권한을 설정하는 DAC라는 사용자, 그룹, 글로버 파일 권한 보호 모델에 익숙
1.4.3. SELinux는 MAC이라는 세분화된 규칙에 정의된 오브젝트 기반 보안 기능을 추가로 제공
1.4.4. 기본적으로 SELinux 정책은 명시적 규칙에서 액세스 권한을 부여하지 않는 한 어떠한 액세스도 허용하지 않음.
1.4.5. SELinux 레이블에는 user, role, type, security level 필드
1.5. 정책 액세스 규칙
1.5.1. 웹 서버 프로세스는 httpd_t 유형 컨텍스트로 레이블이 지정됨.
1.5.2. /var/www/html/ 디렉터리 및 기타 위치의 웹 서버 파일과 디렉터리는 httpd_sys_content_t 유형 컨텍스트로 레이블이 지정됨.
1.5.3. /tmp 및 /var/tmp 디렉터리의 임시 파일에는 tmp_t 유형 컨텍스트가 레이블로 사용.
1.5.4. 웹 서버의 포트에는 레이블로 http_port_t 유형 컨텍스트가 사용.
1.5.5. Apache 웹 서버 프로세스는 httpd_t 유형 컨텍스트로 실행,정책 규칙에서는 Apache 서버가 httpd_sys_content_t 유형 컨텍스트를 사용하여 레이블이 지정된 파일 및 디렉터리에 액세스하도록 허용.
1.5.6. 기본적으로 /var/www/html 디렉터리의 파일에는 httpd_sys_content_t 유형 컨텍스트가 존재.
1.5.7. 웹 서버 정책에는 기본적으로 /tmp 및 /var/tmp 디렉터리와 같이 tmp_t 레이블이 지정된 파일을 사용하는 데 필요한 allow 규칙이 없으므로 액세스가 허용되지 않음.
1.5.8. SELinux가 활성화되면 손상된 Apache 프로세스를 사용하는 악의적인 사용자는 /tmp 디렉터리 파일에 여전히 액세스할 수 없음.
1.5.9. MariaDB 서버 프로세스는 mysqld_t 유형 컨텍스트로 실행.
1.5.10. 기본적으로 /data/mysql 디렉터리의 파일에는 mysqld_db_t 유형 컨텍스트가 존재.
1.5.11. MariaDB 서버는 mysqld_db_t 레이블이 지정된 파일에는 액세스할 수 있지만, 기타 서비스 파일(예: httpd_sys_content_t 레이블이 지정된 파일)에 대한 액세스를 허용하는 규칙은 없음.
2. SELinux File Context Control
2.1. 초기 SELinux Context
2.1.1. 프로세스, 파일, 포트와 같은 모든 리소스에는 SELinux 컨텍스트로 레이블이 지정
2.1.2. SELinux는 /etc/selinux/targeted/contexts/files/ 디렉터리에서 파일 레이블 지정 정책에 대한 파일 기반 데이터베이스를 유지 관리
2.1.3. 새로운 파일은 해당 파일 이름이 기존 레이블 지정 정책과 일치하는 경우 기본 레이블을 할당받음.
2.1.4. 새 파일의 이름이 기존 레이블 지정 정책과 일치하지 않는 경우에는 파일에 상위 디렉터리와 동일한 레이블이 상속
2.1.5. 레이블 상속을 사용하면 파일에 대한 명시적 정책이 존재하는지의 여부와 관계없이 모든 파일이 생성될 때 항상 레이블이 지정됨.
2.1.6. 기존의 레이블 지정 정책이 있는 기본 위치에 파일이 생성되거나 사용자 지정 위치에 대한 정책이 있는 경우 새 파일에 올바른 SELinux 컨텍스트로 레이블이 지정됨
2.1.6.1. 그러나 기존 레이블 지정 정책 없이 파일이 예기치 않은 위치에 생성되면 상속된 레이블이 새 파일의 의도된 용도에 맞지 않음.
2.1.6.2. 또한 파일을 새 위치에 복사하면 해당 파일의 SELinux 컨텍스트가 새 위치의 레이블 지정 정책 또는 상위 디렉터리 상속(정책이 없는 경우)으로 결정된 새 컨텍스트로 변경됨
2.1.6.3. 복사하는 동안 파일의 SELinux 컨텍스트를 보존하여 파일의 원래 위치에 대해 결정된 컨텍스트 레이블을 유지
2.1.6.4. 예를 들어 cp -p 명령은 가능한 경우 모든 파일 특성을 유지하고, cp -c 명령은 복사하는 동안 SELinux 컨텍스트만 유지.
2.2. Test
2.2.1. /usr 디렉토리에 2개의 파일 생성 file1,file2 두 파일 모두 user_usr_t Context 유형을 상속
2.2.2. file1을 /var/www/html 에 이동(mv)하고, file2를 /var/www/html 디렉토리에 복사
2.2.2.1. 이동된 file1은 /tmp 디렉토리에서 레이블이 지정된 fileContext가 유지
2.2.2.2. 복사된 file2는 새로운 inode가 생성되며 /var/www/html 디렉터리에서 SELinux Context를 상속
3. Boolean을 활용한 SELinux 정책 제어
3.1. http port 추가
# semanage port -a -t http_port_t -p tcp 82
# semange port -l | grep http
3.2. selinux boole
# getsebool -a # getsebool httpd_enable_homedirs
3.3. boole 정책 관리
# semanage boolean -l | grep httpd_enable_homedirs # setsebool httpd_enable_homedirs on # semanage boolean -l | grep httpd_enable_homedirs # getsebool httpd_enable_homedirs # setsebool -P httpd_enable_homedirs on # semanage boolean -l | grep httpd_enable_homedirs # semanage boolean -l -C
4. SELinux 문제 점검 및 해결
4.1. log 분석
# tail /var/log/audit/audit.log
4.2. sealert
# sealert -l 95f41f98-6b56-45bc-95da-ce67ec9a9ab7
4.3. AVC event
# ausearch -m AVC -ts recent
이상으로 머리터지는 selinux 관리 였습니다. ㅎㅎ
728x90'공부합시다! > LInux' 카테고리의 다른 글
Rocky9: SWAP 확장 및 축소 (0) 2023.01.27 Rocky9: Stratis (0) 2023.01.26 Rocky9: Network Management (0) 2023.01.19 Rocky9: root password reset (0) 2023.01.17 Rocky9: NTP (Network Time Protocol) (0) 2023.01.15