권한: 같은 트리, 누가 무엇을 할 수 있나
지난 강에서 평평한 디스크 위에 깔끔한 파일과 폴더의 나무를 세웠죠. 그런데 한 대의 컴퓨터를 여러 사람이 함께 쓴다면, 그 나무에는 내 파일과 남의 파일이 같이 매달려 있어요. 아무나 남의 파일을 열어 보고, 고치고, 지워도 괜찮을까요? 질서가 없으면 엉망이 됩니다. 누가 무엇을 할 수 있는지, 규칙이 필요해요.
같은 트리, 여러 주인: 파일마다 소유자 이름표
학교 컴퓨터 한 대를 반 전체가 함께 쓴다고 해 봐요. 파일 나무에는 내가 만든 발표 자료도, 친구가 만든 과제도, 컴퓨터가 쓰는 설정 파일도 함께 매달려 있어요. 규칙이 하나도 없다면, 누구든 남의 발표 자료를 열어 고치거나 통째로 지워 버릴 수 있겠죠. 생각만 해도 아찔합니다. 그래서 운영체제는 가장 먼저 모든 파일에 소유자 이름표를 붙여요. 이 파일은 누구 것인지, 주인이 누구인지 또렷이 적어 두는 거죠.
파일을 눌러 소유자를 확인하세요. 내 것은 금색, 남의 것과 시스템 것은 흐리게 표시돼요. 모든 파일엔 주인이 있어요.
이제 어떤 파일이 누구 것인지 분명해졌어요. 하지만 주인을 안다고 끝이 아니에요. 친구가 내 발표 자료를 열어 구경만 하는 것과, 내용을 고치거나 지우는 것은 전혀 다른 일이잖아요. 그러니까 소유자 이름표만으로는 부족하고, 한 파일을 두고 정확히 어떤 행동까지 허락할지를 더 잘게 나눠야 해요. 그 행동이 무엇무엇인지, 다음에서 봅시다.
세 가지 행동: 읽기, 쓰기, 실행
파일에 할 수 있는 일을 운영체제는 딱 세 가지로 봐요. 첫째, 읽기. 파일 내용을 들여다보는 거예요. 둘째, 쓰기. 내용을 고치거나 아예 지우는 거죠. 셋째, 실행. 그 파일이 프로그램이라면 돌려서 작동시키는 거예요. 이 셋은 서로 따로따로 켜고 끌 수 있어요. 예를 들어 어떤 파일은 읽기는 되지만 쓰기는 막혀 있어서, 보기만 할 뿐 고치지는 못해요. 또 프로그램 파일은 실행이 켜져 있어야 비로소 돌아가죠.
읽기·쓰기·실행을 눌러 켜고 꺼 보세요. 켜지면 초록(허용), 꺼지면 빨강(차단). 셋은 서로 따로 정해져요.
읽기, 쓰기, 실행. 이 세 스위치만으로 꽤 섬세한 조절이 가능해졌어요. 보기만 허락하고 고치기는 막거나, 돌리기만 허락할 수도 있죠. 그런데 한 가지가 빠졌어요. 읽기를 허락한다고 했을 때, 도대체 누구에게 허락하는 걸까요? 주인에게만? 아니면 세상 모든 사람에게? 같은 파일이라도 상대가 누구냐에 따라 허락이 달라야 해요. 다음에서 그 대상을 나눠 봅시다.
누구에게? 소유자, 그룹, 나머지
운영체제는 사람들을 세 묶음으로 나눠요. 첫째는 소유자, 그 파일의 주인 본인이에요. 둘째는 그룹, 같은 모둠으로 묶인 사람들이죠. 같은 조 친구들이라고 생각하면 돼요. 셋째는 나머지, 그 외 모든 사람이에요. 그리고 아까 본 읽기·쓰기·실행 세 행동을, 이 세 묶음마다 따로 정해 줘요. 그래서 똑같은 파일이라도 소유자는 읽기와 쓰기가 다 되고, 그룹은 읽기만 되고, 나머지는 아무것도 못 하게 만들 수 있어요. 권한은 이렇게 누구와 무엇을 엇갈리게 짠 표가 됩니다.
칸을 눌러 켜고 꺼 보세요. 줄은 소유자·그룹·나머지, 칸은 읽기·쓰기·실행이에요. 초록은 허용, 빨강은 차단. 같은 파일, 상대마다 다른 권한.
이제 같은 파일을 두고도 상대에 따라 다른 권한을 줄 수 있게 됐어요. 꽤 촘촘한 질서죠. 그런데 여기서 곤란한 상황이 하나 떠올라요. 모든 파일이 주인에게 단단히 잠겨 있다면, 컴퓨터에 새 프로그램을 깔거나, 누가 비밀번호를 잊어버렸을 때 고쳐 주는 일은 누가 하죠? 모든 자물쇠를 열 수 있는 특별한 사람이 필요해 보여요. 다음에서 그 사람을 만나 봅시다.
관리자(루트): 규칙 위에 선 만능 열쇠
그 특별한 사람이 바로 관리자예요. 영어로는 루트나 슈퍼유저라고 불러요. 관리자는 보통의 권한 규칙을 건너뛰어요. 어떤 파일이든 읽고, 고치고, 실행할 수 있는 만능 열쇠를 쥔 셈이죠. 덕분에 새 프로그램을 깔고, 고장 난 설정을 손보고, 잊어버린 비밀번호를 다시 정해 줄 수 있어요. 하지만 이 열쇠는 무섭기도 해요. 관리자로서 실수 한 번이면 시스템 전체를 망가뜨릴 수 있거든요. 그래서 평소엔 평범한 사용자로 지내다가, 꼭 필요할 때만 관리자 권한을 빌려 써요.
평범한 사용자로 잠긴 파일을 열어 보세요. 차단(빨강)됩니다. 관리자로 바꾸고 다시 눌러 보세요. 만능 열쇠로 허용(초록)돼요.
잠긴 문이 평범한 사용자에겐 막히고, 관리자에겐 열렸죠. 이 만능 열쇠가 있어서 컴퓨터를 돌보고 고칠 수 있어요. 동시에, 왜 함부로 관리자로 다니면 안 되는지도 느껴졌을 거예요. 모든 자물쇠가 무력해지니까요. 권한이라는 질서는 평범한 사용자를 울타리 안에 두고, 관리자에겐 그 울타리를 넘을 힘을 주되 무겁게 다루도록 설계돼 있어요. 이제 전체를 한 번에 정리해 봅시다.
정리: 누가 곱하기 무엇을, 그리고 그 위의 관리자
한 장으로 정리하면 이래요. 운영체제는 함께 쓰는 나무를 지키려고, 모든 파일에 소유자 이름표를 붙이고 작은 표 하나를 매달아요. 가로는 무엇을, 곧 읽기·쓰기·실행. 세로는 누가, 곧 소유자·그룹·나머지. 칸마다 허용이면 초록, 차단이면 빨강이에요. 그리고 이 표 전체 위에 관리자가 만능 열쇠를 들고 서 있죠. 평범한 사용자는 표가 허락하는 만큼만, 관리자는 표를 건너뛰어 무엇이든. 지난 강의 깔끔한 나무가, 이제 안전하게 함께 쓰는 나무가 된 거예요.
칸을 눌러 권한 표를 살펴보세요. 그리고 관리자로 전환해 보세요. 만능 열쇠가 표 전체를 한꺼번에 허용으로 바꿔요.
그런데 여기서 묘한 빈틈이 하나 보여요. 앞에서 운영체제는 프로그램이 하드웨어나 디스크를 직접 건드리지 못하게 벽을 쳐 뒀다고 했죠. 그렇다면 내 프로그램은, 읽기가 허락된 파일조차 어떻게 직접 열어 볼까요? 사실은 못 열어요. 대신 운영체제에게 정중히 부탁해야 하죠. 다음 강에서는 프로그램이 운영체제에게 일을 부탁하는 공식 창구, 시스템 콜 이야기를 시작합니다. 권한을 확인해 주는 것도 바로 그 창구예요.