접근 제어는 DAC와 MAC가 있습니다
임의적 접근제어라고 하며, 전통적인 OS의 보안 구조의 방법으로 사용합니다
사용자 또는 프로그램이 모든 권한을 가지며
시스템 보안이 으용 프로그램에 좌우됩니다
프로그램은 사용자의 권한을 승계할 수 있고, root가 모든 권한을 가집니다
하지만 이런방식은 악의가 있는 일반 또는 root 사용자가 실행한 결함 있는 프로그램을 통해
문제가 발생했을 때 막을 수가 없습니다
그리고 이 영향이 시스템 전반에 미치는 영향 또한 막을 수 없습니다
이러한 DAC의 문제를 해결하기 위해 등장한 개념이 바로 MAC입니다
MAC는 사용자 또는 프로그램이 제한적인 권한을 가지며,
보안 정책은 관리자에 의해 세팅되고, 시스템에 의해 실행됩니다
프로그램은 별도의 보안정책에 의해 통제되며, 모든 권한을 갖는 root 사용자는 없습니다
SELinux는 오픈소스인 리눅스 커널의 보안을 강화하기 위해 최초로 등장한 개념입니다
SELinux는 특정 데몬의 버그를 통해 root권한을 획득해도,
해당 데몬에만 root권한을 행사할 수 있고, 다른 데몬 시스템에서는 접근이 불가능하도록
시스템 보안을 강화합니다
따라서 SELinux는 시스템 해킹에서 보편적으로 쓰이는 취약점이나 exploit을 통해 전체 시스템이
망가지는 것을 방지할 수 이습니다
SELinux는 앞서 살펴본 제어방식 중, MAC에 기반을 두고 접근을 제어합니다
보안 정책을 주체(사용자, 프로세스)나 객체(파일, 디렉토리, 소스)에 대하여 관리차원으로 규정할 수 있고,
커널에 SELinux를 구현하면 프로세스와 객체를 제어할 수 있습니다
또한 권한은 인증된 사용자가 아닌 이용 가능한 보안 관련 정보에 의해 결정됩니다
SELinux는 모든 파일과 프로세스에 Security Context를 설정하여 관리합니다
Security Context는 콜론을 필드 구분자로 사용하고 다음 4개의 영역으로 구성됩니다
Security Context의 4개의 영역은 Level을 제외하고 반드시 작성해야합니다
첫번째 영역은 SELinux User 항목으로 특정 역할을 그룹화하는데 사용할 수 있습니다
보통 user_u
, system_u
, unconfined_u
로 표기됩니다
두번째 영역은 역할을 나타내는데, 프로세스나 도메인과 관련이 있습니다
파일인 경우 항상 object_r
이 부여되며, 프로세스는 system_r
, sysadm_r
이 부여됩니다
관리자는 어떤 종류로 실행할 수 있는지에 대해 정책을 설정할 수 있으며,
이것을 RBAC(Roles Based Access Control)이라고 부릅니다
세번째 영역은 유형을 나타내는데, 특정 파일 또는 프로세스에 어떠한 주체 (프로세스)가 접근할 수 있는지 결정합니다
가장 중요한 부분으로 정책 규칙의 대부분이 대상 유형에 대해 어떠한 주체가 접근할 수 있는지를
설정하는 것입니다
네번째 영역은 MLS(Multilevel Security)라고 부르며,
최근 버전에서는 MCS(Multi Category System) 필드가 추가되었습니다