이번 문서의 목표: 이 파일을 다 읽으면 접근 제어 목록과 권한 비트의 동작 방식을 설명하고, 인증(authentication)과 권한 부여(authorization)를 명확히 구분하며, 대표적인 보안 위협의 이름과 특징을 말할 수 있다.
왜 보호와 보안을 마지막에 배우는가
지금까지 이 시리즈는 운영체제가 프로세스(06편)와 메모리(1215편), 파일(1617편)을 효율적으로 관리하는 방법을 다뤘습니다. 하지만 여러 사용자와 프로세스가 자원을 공유하는 순간, “효율적으로 나눠 쓴다”만으로는 부족해집니다. 어떤 프로세스가 다른 프로세스의 메모리를 함부로 들여다보거나, 권한이 없는 사용자가 남의 파일을 지울 수 있다면 시스템 전체가 위험해집니다. 보호(protection)는 이런 상황을 막기 위해 운영체제 내부에서 자원에 대한 접근을 통제하는 메커니즘이고, 보안(security)은 내부뿐 아니라 외부의 침입·변조 시도까지 포함해 시스템 전체를 안전하게 지키는 더 넓은 개념입니다.
쉽게 말하면: 보호는 아파트 각 세대의 현관문 잠금장치(누가 어느 방에 들어갈 수 있는가)이고, 보안은 그 잠금장치를 포함해 단지 전체의 외부 침입 대비(CCTV, 경비실, 외벽)까지 아우르는 개념입니다.
1. 접근 제어 — 누가 무엇을 할 수 있는가
접근 제어(access control)는 어떤 주체(사용자나 프로세스)가 어떤 객체(파일, 메모리 영역, 장치)에 대해 어떤 연산(읽기, 쓰기, 실행)을 할 수 있는지를 정하는 규칙입니다. 이를 표 형태로 정리한 것이 접근 행렬(access matrix)로, 행은 주체, 열은 객체, 각 칸은 그 주체가 그 객체에 대해 가진 권한을 나타냅니다.
| 주체 \ 객체 | 파일 A | 파일 B | 프린터 |
|---|---|---|---|
| 사용자 갑 | 읽기, 쓰기 | 읽기 | 사용 |
| 사용자 을 | 읽기 | 없음 | 사용 |
접근 행렬은 개념을 이해하기엔 좋지만 객체와 주체가 많아지면 행렬 대부분이 빈칸(권한 없음)이 되어 저장 공간이 낭비됩니다. 그래서 실제 시스템은 두 가지 방식으로 이 행렬을 압축해 구현합니다.
- 접근 제어 목록(ACL, Access Control List): 행렬을 열(객체) 기준으로 쪼개, 각 객체마다 “누가 어떤 권한을 갖는가”의 목록을 붙입니다. “이 파일에 접근할 수 있는 사람은 누구인가”를 확인하기 쉽습니다.
- 권한 리스트(capability list): 행렬을 행(주체) 기준으로 쪼개, 각 주체마다 “내가 어떤 객체에 어떤 권한을 갖는가”의 목록(권한, capability)을 지니게 합니다. “이 사용자가 무엇을 할 수 있는가”를 확인하기 쉽습니다.
쉽게 말하면: ACL은 건물 각 방문에 “출입 가능자 명단”을 붙여 두는 방식이고, capability list는 각 사람에게 “출입 가능한 방 목록이 적힌 열쇠 꾸러미”를 쥐여 주는 방식입니다.
자주 틀리는 점: ACL과 capability list를 반대로 외우는 경우가 많습니다. 객체 기준으로 정리되면 ACL, 주체 기준으로 정리되면 capability list라는 축을 명확히 구분해야 합니다.
2. 유닉스 계열의 파일 권한 모델
많은 운영체제 교재는 접근 제어의 실제 예로 유닉스(Unix) 계열의 권한 비트를 듭니다. 파일마다 소유자(owner), 그룹(group), 기타(others) 세 부류에 대해 각각 읽기(r), 쓰기(w), 실행(x) 권한을 부여합니다.
-rwxr-xr--이 표기를 왼쪽부터 해석하면 다음과 같습니다.
- 첫 글자
-는 파일 종류(일반 파일이면-, 디렉터리면d). - 다음 세 글자
rwx는 소유자 권한 — 읽기·쓰기·실행 모두 허용. - 다음 세 글자
r-x는 그룹 권한 — 읽기·실행은 허용하지만 쓰기는 금지(-). - 마지막 세 글자
r--는 기타 사용자 권한 — 읽기만 허용.
자주 틀리는 점: 권한 비트의 순서(소유자 → 그룹 → 기타)를 헷갈리면 “어떤 자리의 -가 어떤 권한이 없다는 뜻인지”를 잘못 읽습니다. 항상 앞의 세 자리부터 소유자, 그룹, 기타 순서로 3개씩 끊어 읽어야 합니다.
3. 인증과 권한 부여 — 다른 질문에 답하는 두 단계
시험에서 자주 헷갈리게 나오는 두 용어를 구분합니다.
- 인증(authentication): “당신은 정말 그 사람이 맞습니까?”에 답하는 절차. 비밀번호, 생체 인식(지문·홍채), 보안 카드 등으로 신원을 확인합니다.
- 권한 부여(authorization): 신원이 확인된 뒤, “그 사람은 무엇을 할 수 있습니까?”에 답하는 절차. 접근 제어 목록이나 권한 리스트를 확인해 실제 허용 범위를 결정합니다.
쉽게 말하면: 인증은 회사 정문에서 사원증으로 “이 사람이 우리 직원이 맞다”를 확인하는 것이고, 권한 부여는 그 직원이 회사 안에서 “어느 층, 어느 방까지 들어갈 수 있는가”를 정하는 것입니다.
자주 틀리는 점: 로그인에 성공했다고 해서 모든 자원에 접근할 수 있는 것은 아닙니다. 인증(로그인 성공)과 권한 부여(그 자원에 대한 접근 허용 여부)는 별개의 단계이며, 인증에 성공해도 특정 파일에 대한 권한이 없으면 접근이 거부됩니다.
4. 대표적인 보안 위협
운영체제가 마주하는 대표적인 위협을 구분해 정리합니다. 이 위협들은 스스로 실행되는 방식과 확산 방식의 차이로 구분됩니다.
| 위협 | 실행 방식 | 확산 방식 |
|---|---|---|
| 바이러스(virus) | 정상 프로그램(숙주)에 코드를 몰래 삽입 | 숙주 프로그램이 실행될 때 함께 실행되며 다른 파일에 전파 |
| 웜(worm) | 독립적으로 실행되는 프로그램 | 숙주 없이 스스로 네트워크를 통해 다른 시스템으로 복제·확산 |
| 트로이 목마(Trojan horse) | 유용한 프로그램으로 위장 | 사용자가 직접 실행해야 동작하며 스스로 전파되지는 않음 |
이 외에도 사람의 심리를 이용해 정보를 캐내는 사회공학(social engineering, 예: 피싱 이메일로 비밀번호를 입력하게 유도)이나, 정상 요청을 대량으로 보내 서비스를 마비시키는 서비스 거부 공격(DoS, Denial of Service)도 운영체제·네트워크 보안에서 함께 다루는 위협입니다.
자주 틀리는 점: 바이러스와 웜을 같은 것으로 착각하기 쉽습니다. 핵심 차이는 숙주 프로그램이 필요한가입니다. 바이러스는 다른 프로그램에 기생해야 하지만, 웜은 독립적으로 실행되고 스스로 네트워크를 타고 퍼집니다.
핵심 정리
- 접근 행렬을 열(객체) 기준으로 쪼갠 것이 ACL, 행(주체) 기준으로 쪼갠 것이 capability list다.
- 유닉스 권한 비트는 소유자·그룹·기타 순서로 각각 읽기·쓰기·실행 3비트씩 표현한다.
- 인증은 “누구인지 확인”, 권한 부여는 “무엇을 할 수 있는지 결정”으로 서로 다른 단계다.
- 바이러스는 숙주 프로그램이 필요하지만, 웜은 독립적으로 실행되며 스스로 확산된다.
- 트로이 목마는 유용한 프로그램으로 위장하지만 스스로 전파되지는 않는다는 점에서 웜과 다르다.
마무리 복습
-rwxr-xr--에서 그룹(group) 사용자에게 허용된 권한으로 옳은 것은?