다음 몇 가지 강의는 좀 더 이론적인 개념을 다룹니다. 실습 위주를 선호하신다면 건너뛰고 나중에 이 주제들로 돌아오셔도 좋습니다.
리눅스 아키텍처의 근본적인 측면은 사용자 공간 (user space) 과 커널 (kernel) 의 분리입니다. 그렇다면 왜 이 둘의 권한을 단일 계층으로 합치지 않을까요? 그 이유는 보안과 안정성 때문이며, 이는 두 영역이 서로 다른 모드에서 작동하도록 함으로써 달성됩니다.
커널 모드와 사용자 모드의 차이점
시스템은 커널 모드와 사용자 모드라는 두 가지 뚜렷한 모드로 작동합니다. 이러한 분리는 애플리케이션의 직접적이고 통제되지 않은 하드웨어 및 리소스 접근으로부터 시스템을 보호하는 데 매우 중요합니다.
커널 모드에서는 커널이 하드웨어에 대한 완전하고 무제한적인 접근 권한을 가집니다. 커널이 모든 것을 제어합니다. 이는 가장 높은 수준의 권한입니다.
사용자 모드에서는 애플리케이션이 메모리와 CPU 리소스 중 작고 안전한 부분에 대해서만 매우 제한적인 접근 권한을 가집니다.
사용자 애플리케이션이 디스크 읽기, 네트워크 데이터 전송, 주변 장치 접근과 같이 하드웨어와 관련된 작업을 수행해야 할 때, 애플리케이션은 이를 직접 수행할 수 없습니다. 이러한 작업은 커널 모드에서 커널에 의해 처리되어야 합니다. 이러한 설계는 오작동하거나 악의적인 프로그램이 시스템 전체를 손상시키는 것을 방지합니다. 예를 들어, 스파이웨어가 모든 데이터를 읽거나 웹캠을 제어할 수 있도록 직접적인 하드웨어 접근 권한을 부여하고 싶지는 않을 것입니다.
보호 링과 특권 접근
이러한 다른 모드들은 종종 권한 수준 (privilege levels) 또는 **보호 링 (protection rings)**으로 설명됩니다. 가장 안쪽 영역이 가장 안전하고 최고의 권한을 가진 동심원 벽으로 이루어진 요새를 상상해 보십시오. 컴퓨터의 보호 링도 이와 유사하게 작동하며, 가장 안쪽 링이 가장 높은 권한 수준에 해당합니다.
x86 컴퓨터 아키텍처 표준에는 두 가지 주요 수준이 있습니다.
- 링 0 (Ring 0): 커널이 실행되는 곳입니다. 가장 높은 수준의 커널 권한을 가지며, 모든 시스템 명령어를 실행할 수 있고 하드웨어 관리를 위해 완전한 신뢰를 받습니다. 이것이 **특권 접근 (privileged access)**의 핵심입니다.
- 링 3 (Ring 3): 사용자 모드 애플리케이션이 실행되는 수준입니다. 가장 권한이 적은 링이며 하드웨어에 대한 직접적인 접근 권한이 없습니다.
이 링 기반 보안 모델은 사용자 애플리케이션이 중요한 시스템 구성 요소로부터 격리되도록 보장합니다. 하지만 애플리케이션이 항상 커널과 다른 모드에 있다면, 어떻게 필요한 하드웨어 작업을 수행할 수 있을까요?
시스템 호출과 커널 권한
사용자 모드와 커널 모드 사이의 다리 역할을 하는 것이 **시스템 호출 (system call)**입니다. 사용자 애플리케이션이 특권 작업을 수행해야 할 때, 커널에게 대신 작업을 수행하도록 요청하기 위해 시스템 호출을 합니다.
이 프로세스를 통해 애플리케이션은 특정 제어된 명령어를 실행하기 위해 사용자 모드에서 커널 모드로 일시적이고 안전하게 전환할 수 있습니다. 작업이 완료되면 시스템은 사용자 모드로 다시 전환됩니다. 이 메커니즘은 애플리케이션이 하드웨어에 대한 위험한 직접적인 특권 접근을 얻지 않으면서 필요한 서비스를 얻을 수 있도록 보장합니다.