seegongsik
운영체제

어떻게 권한: 같은 트리, 누가 무엇을 할 수 있나

지난 레슨에서 평평한 디스크 위에 파일과 폴더의 나무를 세웠다. 그런데 컴퓨터 한 대를 여러 사람이 함께 쓰면 그 나무에는 내 파일과 남의 파일이 나란히 매달린다. 누구나 남의 파일을 열고 고치고 지울 수 있다면 금세 엉망이 될 거예요. 누가 무엇을 할 수 있는지 정하는 규칙이 필요하다.

01

같은 나무, 여러 주인: 파일마다 붙는 소유자 이름표

반 전체가 학교 컴퓨터 한 대를 같이 쓴다고 하자. 파일 나무에는 내가 만든 발표 자료와 친구가 낸 과제, 컴퓨터가 스스로 쓰는 설정 파일이 한데 매달려 있다.
규칙이 하나도 없다면 누구든 내 발표 자료를 열어 고치거나 통째로 지울 수 있고, 설정 파일을 잘못 건드려 컴퓨터가 아예 켜지지 않게 만들 수도 있다.
그래서 운영체제는 맨 먼저 모든 파일에 소유자 이름표를 붙여요. 이 파일을 누가 만들었고 누구 것인지를 파일마다 적어 두는 것이다.

파일을 눌러 소유자 확인

파일 세 개를 하나씩 누르면 주인이 드러난다. 내 파일은 금색으로, 친구 파일과 시스템 파일은 흐린 색으로 나오고, 주인 없는 파일은 하나도 없어요.

이제 어느 파일이 누구 것인지는 분명해졌다. 하지만 주인을 아는 것만으로는 부족하다.
친구가 내 발표 자료를 열어 구경만 하는 것과 내용을 고치거나 지우는 것은 전혀 다른 일이기 때문이다. 구경은 괜찮아도 고치는 것까지 허락하고 싶지는 않을 수 있어요.
그러니 파일 하나를 두고 어떤 행동까지 허락할지를 더 잘게 나눠야 한다.

02

세 가지 행동: 읽기, 쓰기, 실행

운영체제는 파일에 할 수 있는 일을 딱 세 가지로 나눈다. 읽기는 파일 내용을 들여다보는 일이고, 쓰기는 내용을 고치거나 지우는 일이다. 실행은 그 파일이 프로그램일 때 돌려서 일을 시키는 것이에요.
이 셋은 서로 따로 켜고 끌 수 있다. 읽기는 켜 두고 쓰기만 꺼 두면 그 파일은 볼 수는 있어도 고칠 수는 없다.
프로그램 파일이라도 실행이 꺼져 있으면 돌릴 수 없어요.

읽기 · 쓰기 · 실행 스위치를 하나씩 눌러 켜고 끈다. 처음에는 읽기만 켜져 있어 보기만 되는 파일이다. 켜면 초록(허용), 끄면 빨강(차단)으로 바뀌고, 하나를 바꿔도 나머지 둘은 그대로예요.

읽기, 쓰기, 실행이라는 스위치 세 개만으로도 꽤 섬세하게 조절할 수 있다. 보기는 허락하고 고치기는 막을 수도 있고, 돌리기만 허락할 수도 있다.
그런데 한 가지가 빠져 있어요. 읽기를 허락한다면 도대체 누구에게 허락하는 걸까? 주인에게만인지 세상 모든 사람에게인지에 따라 뜻이 완전히 달라진다.
같은 파일이라도 상대가 누구냐에 따라 허락하는 범위가 달라야 한다.

03

누구에게? 소유자, 그룹, 나머지

운영체제는 사람을 세 묶음으로 나눈다. 첫째는 파일의 주인인 소유자이고, 둘째는 같은 모둠으로 묶인 그룹이다. 같은 조 친구들을 떠올리면 된다. 셋째는 그 밖의 모든 사람, 곧 나머지예요.
그리고 앞에서 본 읽기 · 쓰기 · 실행을 이 세 묶음마다 따로 정한다. 아래 그림의 처음 상태가 그 예다. 소유자는 셋 다 할 수 있고, 그룹은 읽기와 실행만, 나머지는 읽기만 할 수 있다.
이렇게 권한은 누구(세 줄)와 무엇(세 칸)을 엇갈려 짠 표 한 장이 돼요.

읽기
쓰기
실행
소유자
그룹
나머지

칸을 누를 때마다 허용(초록)과 차단(빨강)이 바뀐다. 줄은 소유자 · 그룹 · 나머지, 칸은 읽기 · 쓰기 · 실행이라서 같은 파일이라도 상대마다 다른 권한을 줄 수 있어요.

이제 같은 파일을 두고도 상대마다 다른 권한을 줄 수 있게 되었다. 꽤 촘촘한 질서다.
그런데 곤란한 상황이 하나 떠오른다. 모든 파일이 주인에게 단단히 잠겨 있다면 컴퓨터에 새 프로그램을 까는 일이나, 누가 비밀번호를 잊었을 때 다시 정해 주는 일은 누가 맡을까?
모든 자물쇠를 열 수 있는 특별한 사람이 있어야 할 것 같아요.

04

관리자(루트): 규칙 위에 선 만능 열쇠

그 특별한 사람이 관리자다. 리눅스 같은 시스템에서는 루트, 또는 슈퍼유저라고 부른다. 관리자는 앞에서 본 권한 표를 건너뛴다. 어떤 파일이든 읽고 고치고 실행할 수 있는 만능 열쇠를 쥔 셈이에요.
덕분에 새 프로그램을 깔고, 망가진 설정을 손보고, 잊어버린 비밀번호를 다시 정해 줄 수 있다.
하지만 이 열쇠는 그만큼 위험하다. 관리자로 일하다 명령 하나를 잘못 내리면 시스템 전체가 망가질 수 있다. 그래서 평소에는 평범한 사용자로 지내다가 꼭 필요할 때만 관리자 권한을 잠깐 빌려 써요.

secret.txt친구

먼저 평범한 사용자로 친구의 잠긴 파일을 열면 차단(빨강)된다. 관리자로 바꿔 다시 열면 만능 열쇠 덕분에 허용(초록)돼요.

잠긴 파일이 평범한 사용자에게는 막혔고 관리자에게는 열렸다. 이 만능 열쇠가 있기에 누군가 컴퓨터를 돌보고 고칠 수 있다.
동시에 왜 아무 때나 관리자로 지내면 안 되는지도 보인다. 관리자 앞에서는 모든 자물쇠가 힘을 잃기 때문이에요.
권한이라는 질서는 평범한 사용자를 울타리 안에 두고, 관리자에게는 울타리를 넘는 힘을 주되 그 힘을 무겁게 쓰도록 짜여 있다.

05

정리: 누가 곱하기 무엇을, 그 위의 관리자

한 장으로 정리하면 이렇다. 여럿이 함께 쓰는 나무를 지키려고 운영체제는 모든 파일에 소유자 이름표를 붙이고 작은 표 하나를 매단다.
표의 가로는 무엇을, 곧 읽기 · 쓰기 · 실행이고 세로는 누가, 곧 소유자 · 그룹 · 나머지다. 칸마다 허용이면 초록, 차단이면 빨강으로 표시한다.
그리고 이 표 전체 위에 만능 열쇠를 든 관리자가 서 있어요. 평범한 사용자는 표가 허락한 만큼만 할 수 있고, 관리자는 표를 건너뛰어 무엇이든 할 수 있다. 지난 레슨의 깔끔한 나무가 이제 여럿이 안전하게 나눠 쓰는 나무가 되었다.

읽기
쓰기
실행
소유자
✓
✓
✓
그룹
✓
✗
✓
나머지
✓
✗
✗

표에는 소유자 · 그룹 · 나머지가 할 수 있는 일이 초록과 빨강으로 정리돼 있다. 아래 버튼으로 관리자로 바꾸면 만능 열쇠가 표 전체를 한꺼번에 허용(파랑)으로 바꿔요.

그런데 여기서 묘한 빈틈이 하나 보인다. 앞에서 운영체제는 프로그램이 하드웨어나 디스크를 직접 건드리지 못하게 벽을 쳐 두었다.
그렇다면 내 프로그램은 읽기가 허락된 파일조차 어떻게 열까? 사실 프로그램은 파일을 스스로 열지 못한다. 운영체제에게 열어 달라고 부탁해야 해요.
다음 레슨에서는 프로그램이 운영체제에 일을 맡기는 공식 창구인 시스템 콜을 다룬다. 이 표를 들여다보고 권한을 확인하는 일도 바로 그 창구에서 일어나요.

한 줄 정리운영체제는 모든 파일에 소유자 이름표를 붙이고 누가 무엇을 할 수 있는지 정해 둔다. 행동은 읽기(내용 보기), 쓰기(고치거나 지우기), 실행(프로그램으로 돌리기) 세 가지이고, 이 권한을 소유자 · 그룹 · 나머지마다 따로 준다. 관리자(루트)는 이 규칙 위에 서서 무엇이든 할 수 있는 만능 열쇠를 쥐지만, 그만큼 위험해서 꼭 필요할 때만 써요. 결국 권한은 누가 곱하기 무엇을이라는 표 한 장으로 함께 쓰는 나무의 질서를 지킨다.
← 운영체제
이 페이지가 도움 됐다면 후원하기