SELinux의 구조
- SELinux 환경에서 리눅스 User와 SELinux user가 각각 존재합니다
SELinux user는 SELinux policy의 일부로 관리되고, 리눅스 user는 SELinux user에 매핑되어 관리됩니다
- 모든 프로세스와 파일에 Type이 있습니다
- 프로세스에 부여되는 Type은 보통 Domain을 정의하며,
해당 프로세스는 자신만의 Domain에서 실행되어 다른 프로세스와 분리됩니다
- SELinux policy는 프로세스와 파일, 프로세스와 프로세스의 상호작용을 정의하고
SELinux policy rule이 허용하는 경우에만 접근을 허용합니다
- SELinux는 리눅스 커널에 포함되어 동작합니다
특정 프로세스에서 파일을 열거나 보안관련 접근이 발생하면 커널 차원에서 프로세스를
가로채어 SELinux policy rule을 참조하여 접근을 통제합니다
- SELinux에서 접근을 허용하거나 금지하는 결정을 캐싱하는데 이것을 AVC(Access Vector Cache)라고 합니다
이 캐시를 이용하여 접근 여부 결정단계가 신속하게 처리되어 성능을 향상시킵니다
SELinux의 적용 예시
- SELinux 기본정책은 거부이기 때문에, 별도로 허용하지 않으면 파일이나 프로세스 접근이 거부됩니다
- SELinux는 리눅스 user를 제한할 수 있어서, 리눅스 user를 SELinux의 user_u로 매핑하면
set-UID 응용 프로그램의 실행을 제한할 수 있습니다
따라서 su나 sudo 같은 명령을 실행할 수 없게 됩니다
- 각각의 프로세스가 자신만의 Domain에서 실행되므로 침입자가 HTTP Server의 취약점을 이용해 침입하였다고 하더라도 사용자의 홈 디렉토리 파일은 접근할 수 없습니다
SELinux 관련 에러 발생 시 대처방법
SELinux의 제한을 받는 데몬들의 서비스 작동 시 정상적으로 작동되지 않는 경우가 있습니다
이 경우에는 관련 로그를 검사해야합니다
초기 버전에서는 /var/log/messages
에 기록했으나 최근 배포판 리눅스에서는 /var/log/audit/audit.log
파일에 기록됩니다
SELinux 관련 로그는 AVC로 나타나므로 이 부분을 찾아 관련 내용을 살펴본 후에 적절한 조치를 취하면 됩니다
참고
- CentOS 7로 이해하는 리눅스 관리 및 시스템 보안 - 도서