11.3.파일 권한(퍼미션) 다루기
11.3.1.퍼미션의 뜻과 사용자의 종류
퍼미션은 파일을 다룰 수 있는 사용 권한을 뜻합니다.
퍼미션(permission)이란 파일을 다룰 수 있는 권한으로 권한 또는 허가권으로 번역합니다. 리눅스는 파일이나 디렉토리마다 각각 파일을 다룰 수 있는 권한을 설정합니다. 이는 리눅스가 멀티유저(다중사용자)용으로 개발되었기 때문입니다. 리눅스는 하나의 컴퓨터나 서버를 여러 명의 사용자가 로그인한 다음에 사용합니다. 이때 각 사용자는 자신에게 부여된 하드디스크 공간 안에서만 작업을 하게 됩니다.
그런데 만약 다른 사용자가 자신의 파일을 마음대로 보고 읽고 지운다면 보안에 허점이 생기게 됩니다. 때문에 다른 사용자가 자신이 파일을 마음대로 읽거나 지우지 못하게 파일마다 조치를 취합니다. 그렇다고 해서 모든 파일에 대해서 읽지 못하게 만드는 것도 문제입니다. 특히 홈페이지용 문서라면 다른 네티즌이 접속해 해당 문서를 읽을 수 있어야 브라우저 화면에 뜹니다.
그렇지만 네티즌이 해당 문서를 지운다면 큰 문제가 발생하겠죠. 그래서 이런 파일에는 다른 사용자가 읽을 수는 있지만 지우지는 못하게 권한을 설정하는 겁니다. 또는 사용자가 파일 내용을 고칠 수 있도록 설정할 수도 있습니다.
이처럼 파일에 대한 권한을 설정하는 것을 퍼미션을 설정한다고 말합니다.

**사진: 리모트 영역을 보면 Attr 항목이 퍼미션 설정 내용입니다.
퍼미션을 설정한다는 이야기는 파일에 대한 사용 권한을 설정한다는 말입니다.
리눅스는 하나의 시스템을 여러 사람이 사용하기 때문에 각 파일의 사용권한을 제한합니다. 예를 들어 어떤 파일은 같은 그룹에 속한 사람과 사용자 자신이 모두 읽고, 쓰고, 지우고, 실행할 수 있어야 하는가 하면 어떤 파일은 같은 그룹에 속한 사람은 읽을 수만 있고 쓰거나 지우지 못해야 하는 경우가 있습니다. 또 어떤 파일은 같은 그룹에 속한 사람이 아예 파일을 읽지도 못하게 막아두어야 하는 경우가 있습니다. 따라서 그룹이나 사용자에 따라서 파일에 대한 사용권한을 제한할 필요가 있습니다. 파일에 대한 사용권한을 조절하는 명령어는 chmod라는 명령어인데 이 명령어는 조금 후에 배웁니다.
리눅스의 파일 권한은 세 가지 사용자 부류로 구분해 설정합니다.
리눅스에서 파일 권한(퍼미션)은 세 개의 사용자 부류로 구분하여 따로 설정하며 각각 네 가지 권한을 부여해 설정합니다.
세 가지 사용자 부류는 소유자(owner), 소유자와 같은 그룹(group) 멤버, 일반인(other)으로 구분합니다. 소유자는 파일의 소유권을 가지고 있는 주인을 말합니다. 그룹 멤버는 소유자와 같은 그룹으로 묶인 사용자들을 말합니다. 마지막으로 일반인은 그룹에 속하지 않은 외부 사람을 뜻하는데 모든 사용자를 말한다고 보면 됩니다.
[보기]
drwxr-xr-x 2 hangul hangul 4096 10월 29 00:45 book/
-rw-r--r-- 1 hangul hangul 12832 10월 19 23:03 book.html

**사진: 맨 앞의 10글자가 파일에 대한 퍼미션 설정 내용입니다.
보기에서 book 디렉토리와 book.html 파일의 소유자는 hangul입니다. 맨 앞에 나오는 hangul이 바로 소유자를 뜻합니다. 소유자는 파일을 만든 사람이거나 파일을 복사해온 사람을 뜻합니다.
그리고 소유자 그룹의 이름 역시 hangul입니다. 따라서 hangul 이라는 그룹에 속한 사용자들은 그룹 사용 권한에 정한 권한을 행사할 수 있습니다.
파일 권한은 소유자와 그룹, 외부인으로 구분해 설정합니다.
그룹에 대한 가장 쉬운 비유로 직장의 부서 직원을 들 수 있습니다. 예를 들어 영업부의 김중태라는 직원이 hangul이라는 ID로 서버 컴퓨터에 로그인 한 다음에 업무를 보고 저장한 파일을 kim.txt라고 저장했다고 합시다. 이 파일의 소유자는 당연히 hangul이라는 ID를 가진 김중태입니다.
kim.txt 파일은 업무에 관한 문서이므로 외부 사람이 보면 안됩니다. 따라서 일반인이 이 문서를 볼 수 없도록 막아야 합니다. 그렇지만 같은 부서나 같은 팀원은 이 문서 내용을 볼 수 있어야 합니다. 그래야 다른 팀원이 보고 함께 업무를 볼 수 있습니다. 그래서 서버 컴퓨터에 market이라는 그룹을 하나 만들고 같은 부서나 팀원의 ID를 market라는 그룹으로 지정합니다. 그리고 kim.txt 파일에 대한 권한을 행사할 수 있는 그룹 이름으로 market을 지정합니다. 이렇게 해두면 이럴 경우 파일에 대한 권한을 행사할 수 있는 사람은 크게 세 종류로 구분됩니다.
첫 번째는 파일 소유자인 hangul인데 당연히 소유자는 파일에 대하여 모든 권한을 행사할 수 있습니다. 두 번째 부류는 market라는 이름으로 만든 그룹에 속한 사용자들로 이들은 kim.txt 파일의 그룹 권한을 사용할 수 있습니다. 세 번째 부류는 일반인으로 업무부 직원이 아닌 사람이거나 회사 사람이 아닌 사람을 뜻합니다.
퍼미션 기능을 이용해 세 가지 부류의 권한을 각기 달리 설정합니다.
이렇게 세 개의 부류가 있을 때 소유자인 hangul은 자신이 만든 kim.txt 파일에 대해서 다음과 같은 권한을 설정하려고 할 겁니다.
[세 가지 부류에 대한 설정 내용]
1. 소유자인 자신은 파일을 읽고 쓰고, 지우고, 실행할 수 있게 설정한다.
2. 같은 그룹의 사용자 즉, 같은 팀원과 부서 직원은 파일 내용을 읽을 수 있게는 해주지만 파일을 고치거나 지울 수 있는 권한은 주지 않는다.
3. 회사 사람이 아닌 외부인에게는 파일을 읽지도 못하게 만든다. 아예 접근하지 못하도록 만든다.
이런 식으로 파일에 대한 권한을 각기 다르게 설정하려고 할 겁니다. 이때 퍼미션이라는 기능을 이용해 각 파일에 대한 권한을 따로 설정하는 겁니다.
11.3.2.읽기(r), 쓰기(w), 실행(x)의 차이점
파일에 대한 권한은 네 가지로 설정할 수 있습니다.
PC에 윈도를 설치해 사용하는 환경에서는 파일에 대한 권한을 설정할 이유도 없고 대상 별로 파일에 대한 권한을 설정할 이유도 없었습니다. 그렇지만 여러 사람이 사용하는 운영체제와 문서에 대해서는 그룹별로 권한을 다르게 설정하는 일이 필요합니다.
리눅스에서는 그룹에 따라 네 가지 권한을 부여합니다. 읽기, 쓰기, 실행, 아무것도 없는 권한입니다. 이들 권한을 조합이 가능하기 때문에 좀더 다양하게 권한을 제어할 수 있습니다.
일단 읽기, 쓰기, 실행의 차이점부터 살펴봅시다.
윈도나 도스처럼 혼자서 사용하는 운영체제에서는 모든 파일을 사용자 마음대로 복사하고, 지우고, 실행할 수 있습니다. 그러나 다중 사용자가 사용하는 운영체제에서는 이럴 경우 큰 문제가 발생합니다.
가장 손쉽게 이해할 수 있는 형태로 인터넷의 한 사이트를 들겠습니다. 예를 들어서 '도와주세요119'라는 사이트를 저희 회사에서 운영한다고 합시다. 이때 이 사이트의 운영체제로 리눅스나 유닉스를 사용합니다. 동시에 여러 사람이 이 사이트에 접속해야 하기 때문이죠.
그런데 제 홈페이지에 사용자가 들어와서 공지사항 내용이 든 문서나 회원 정보가 든 파일을 지워버리거나 고쳐버리면 큰 일이 벌어지는 겁니다. 그래서 일반 사용자는 제 홈페이지의 문서를 지우거나 고치지 못하도록 설정해야 합니다. 그렇지만 문서를 읽을 수는 있게 설정해야 합니다.
읽기 권한은 r이나 4로 표시합니다.
읽기(read) 허가권은 파일을 읽을 수 있는 권한입니다. 파일의 내용을 읽을 수만 있고 파일을 고치거나 지우는 일은 하지 못합니다. 영문으로는 r로 표시하고 숫자로는 4로 표시합니다. 영문과 숫자 표시의 차이에 대해서는 바로 뒤에 다시 설명 하겠습니다.
읽기 권한은 w나 2로 표시합니다.
쓰기(write) 권한은 파일을 쓸 수 있는 권한입니다. 다시 말해서 파일을 고치거나 저장, 삭제할 수 있는 권한입니다. 영문으로는 w로 표시하고 숫자로는 2로 표시합니다.
실행 권한은 x나 1로 표시합니다.
실행(excute) 권한은 파일을 실행시킬 수 있는 권한입니다. 이는 실행 파일일 경우에 가능한데 외부에서 실행 파일을 실행시킬 수 있습니다. 만약 어떤 사람이 서버 컴퓨터에 접속해 바이러스 프로그램을 실행시키거나 하드디스크 포맷 프로그램을 실행시킨다면 하드디스크의 자료가 모두 손상을 입겠죠. 따라서 실행 권한을 부여하는 경우는 많지 않으며 극히 제한적으로 부여합니다. 영문으로는 x자로 표시하고 숫자로는 1로 표시합니다.
파일인 경우에는 파일이 실행되는 권한이 되며 디렉토리의 경우 디렉토리 안으로 들어갈 수 있는 권한이 생깁니다.
세 개 그룹 별로 권한을 부여합니다.
이상의 권한은 각 그룹 별로 rwx라는 형태로 표시합니다. 만약 권한을 부여하지 않은 경우에는 - 기호로 표시합니다. 보기를 다시 봅시다.
[보기]
drwxr-xr-x 2 hangul hangul 4096 10월 29 00:45 book/
-rw-r--r-- 1 hangul hangul 12832 10월 19 23:03 book.html
보기에서 book 디렉토리는 d자 다음에 rwxr-xr-x 로 설정된 상태입니다. d자는 디렉토리라는 뜻이죠. rwxr-xr-x는 세 부분으로 분류됩니다.
처음의 rwx가 첫 번째 부분으로 소유자인 hangul의 권한을 나타냅니다. rwx라고 적혀 있으니 읽고(r) 쓰고(w) 실행(x)할 수 있습니다. 디렉토리이므로 실행 권한은 곧 book 디렉토리 안으로 들어갈 수 있다는 것을 의미합니다.
두 번째 부분은 그룹이 사용할 수 있는 권한인데 r-x로 표시되어 있습니다. 이것은 읽기 권한과 실행 권한은 부여하고 쓰기 권한은 주지 않은 경우입니다. 쓰기 권한을 준다면 디렉토리를 삭제할 수도 있겠죠. 웹호스팅 사용자라면 그룹에게 부여하는 권한은 신경 쓰지 않아도 됩니다. 왜냐하면 그룹이라고 해봐야 소유자 자신밖에 없기 때문입니다.
세 번째 부분은 일반인을 위해 설정한 권한입니다. 즉 외부에서 홈페이지에 접속하는 네티즌들에게 부여된 권한입니다. 역시 r-x로 부여했습니다. 읽기와 실행만 가능한 권한입니다.
book.html은 권한 내용이 조금 바뀌었습니다. rw-r--r--로 설정되었습니다. 소유자는 rw-, 그룹은 r--, 일반 사용자는 r-- 권한을 부여한 셈입니다. 소유자는 book.html을 읽거나 쓸 수 있습니다. 따라서 book.html의 파일 내용을 고치거나 지울 수 있습니다. 실행 권한인 x 권한을 주지 않은 이유는 book.html이 실행 파일이 아니기 때문입니다.
일반 사용자는 r-- 권한을 부여했습니다. 즉 읽을 수 있는 권한만 있고 쓰거나 실행할 수 있는 권한은 주지 않은 겁니다.
퍼미션 부분은 네 개의 부분으로 구분해 보면 이해하기 쉽습니다.
몇 가지 보기를 더 들겠습니다. 아래의 보기는 원래 10개의 문자가 붙어서 표시됩니다. 그렇지만 눈으로 구분하기 네 개의 덩어리로 나누어 표기했습니다. 여러분도 퍼미션 부분을 살펴볼 때 1-3-3-3의 네 개 덩어리로 나누어 읽기 바랍니다. 이해하기 쉽습니다.
[보기] 퍼미션이 의미하는 내용
(1) - rwx rwx rwx
파일의 형태는 일반 파일이고, 소유권자(Owner, User)와 그룹, 일반 사용자가 모두 이 파일을 읽고, 쓰고, 실행할 수 있다는 뜻입니다.
(2) d rwx rwx rwx
파일의 형태는 디렉토리이고, 소유권자와 그룹, 일반 사용자가 모두 이 파일을 읽고, 쓰고, 실행할 수 있다는 뜻입니다.
(3) - rwx rwx r--
파일의 형태는 일반 파일이고, 소유권자와 그룹은 이 파일을 읽고, 쓰고, 실행할 수 있으나 일반 사용자는 읽을 수만 있습니다. 어떤 회사의 홍보성 문서일 경우 외부인이 이 파일을 읽을 수는 있지만 수정은 못하게 막아둡니다. 그러나 그 회사의 직원은 자유롭게 파일을 고칠 수 있는 권한을 주어야 관리가 되겠죠.
(4) d rwx --- ---
파일의 형태는 디렉토리이고, 소유권자인 사용자만 이 파일을 읽고, 쓰고, 실행할 수 있습니다. 그룹이나 일반 사용자는 이 파일을 읽을 수도 없습니다. 즉 파일에 대한 접근 자체를 막아버린 겁니다. 인터넷에 자신의 계정을 가진 사용자일 경우 편지를 받아서 저장하는 디렉토리가 있습니다. 보통 'Mail'이라는 이름의 디렉토리에 파일을 저장하는데 이 디렉토리는 사용자 본인만 사용해야 하는 디렉토리입니다. 그룹 내의 다른 사용자나 일반 사용자가 이 디렉토리를 읽을 수 있다면 편지 내용을 모두 읽을 수 있게 되므로 비밀보장이 안되겠죠. 주로 편지를 저장한 디렉토리가 이런 식으로 설정되어 있습니다.
(5) - rwx rw- r--
파일의 형태는 일반 파일이고, 소유권자인 사용자만 이 파일을 읽고, 쓰고, 실행할 수 있습니다. 같은 그룹에 속한 사람들은 읽고 쓸 수는 있지만 실행은 못시킵니다. 일반 사용자는 읽을 수만 있습니다. 인터넷의 게시판으로 사용하는 파일일 경우 같은 직장 동료 또는 같은 동아리 내의 회원들은 글을 쓸 수 있어야 하지만 외부인은 글을 쓰지 못하고 읽을 수만 있게 설정해야 할 때 사용하면 되는 형태입니다.
(6) - rwx r-- r--
파일의 형태는 일반 파일이고, 소유권자인 사용자만 이 파일을 읽고, 쓰고, 실행할 수 있습니다. 그룹에 속한 사람과 일반 사용자는 읽을 수만 있습니다. 자신 이외의 사람들은 파일을 읽기만 하도록 만들 때 이런 권한을 부여합니다. 대부분의 인터넷용 문서를 이런 형태로 설정합니다.
11.3.3.파일의 사용 권한 바꾸는 chmod 명령어
파일의 권한을 설정하는 명령은 chmod입니다.
세 가지 사용자 부류와 파일의 권한에 대한 설명을 마쳤습니다. 이제 파일에 대한 권한을 설정하는 명령어를 알아보겠습니다.
파일 권한을 설정하는 명령어는 chmod입니다. chmod 명령을 이용하면 파일 퍼미션을 변경할 수 있습니다.
[형식]
chmod [옵션] (u|g|o|a)(+|-)(r|w|x) files directory...
[옵션]
-R : 디렉토리를 지정 할 경우 하위의 모든 파일과 디렉토리의 권한을 지정
[보기]
(1) chmod 755 guide
(2) chmod 744 *.*
(3) chmod a+r /guide
(4) chmod o+r kim.txt
(5) chmod a-rwx book.html
[설명]
(1) guide 파일(또는 디렉토리) 권한을 755로 설정함.
(2) 모든 파일을 744 권한으로 설정함.
(3) /guide에 있는 모든 파일을 모두에게 읽기 가능으로 설정함.
(4) kim.txt 파일을 소유자가 읽기 가능으로 설정함.
(5) book.html 파일을 모든 사용자에게 읽기, 쓰기, 실행을 금지시킴.

**사진: 'chmod --help' 명령으로 chmod 명령의 도움말을 표시했습니다.
옵션에서 u는 주인(user)을 말하며 g는 group, o는 other을 뜻합니다. a은 모든 사용자(all)을 뜻합니다. + 기호는 권한 설정, - 기호는 권한 취소 명령입니다.
보통 chmod 명령을 사용할 때는 영문보다는 숫자를 더 많이 사용합니다. 숫자를 사용하는 것이 더 명령이 간단하기 때문입니다.
예를 들면 다음과 같이 명령을 줄 수 있습니다.
[보기1] 퍼미션 설정 명령어
(1) chmod 755 book.html
(2) chmod 400 book.html

**사진: 'chmod 755 book.html' 명령을 내린 뒤에 ls 명령으로 book.html의 퍼미션을 봅니다.
chmod 다음에 적은 755나 400은 세 그룹에 대한 파일 권한을 쉽게 표현한 것입니다. 숫자는 세 자리로 구성되는데 첫 번째 숫자는 소유자에 대한 권한을 표시한 것이고, 두 번째 숫자는 그룹에 대한 퍼미션, 세 번째 숫자는 일반 사용자에 대한 권한을 표시한 것입니다. 그리고 숫자가 뜻하는 각 권한의 의미는 다음의 숫자를 조합해 만들어집니다.
'chmod 755 book.html' 명령을 내린 뒤에 ls 명령어로 파일의 퍼미션을 살펴보면 '-rwxr-xr-x'의 형태로 퍼미션이 설정된 것을 볼 수 있습니다.
이번에는 'chmod 400 book.html' 명령을 내리고 ls 명령으로 book.html의 퍼미션 상태를 살펴봅니다. '-r--------'의 형태로 표시됨을 볼 수 있습니다. 퍼미션이 바뀐 겁니다.

**사진: 'chmod 400 book.html' 명령을 내리면 book.html의 퍼미션이 '-r--------'의 형태로 표시됩니다.
퍼미션 설정은 숫자를 이용하는 방식이 영문 이용 방식보다 편리합니다.
숫자를 이용하는 방식은 영문자를 이용하는 것보다 간편하고 이해하기 쉽습니다. 다음 보기를 비교해보면 알 수 있습니다.
[보기] 퍼미션 설정하기
(1) chmod a+rwx,u+rwx,o+rwx book.html
(2) chmod 777 book.html
보기의 두 명령어은 같은 의미입니다. 모두 book.html 파일에 대해 읽기, 쓰기, 실행의 권한을 부여하라는 명령입니다. 그렇지만 한 눈에 보기에도 (2)번 명령이 짧고 보기에 편합니다. 또한 이해하기도 쉽습니다. 그래서 대부분 리눅스 사용자는 숫자로 퍼미션을 설정합니다.
퍼미션은 숫자조합을 이용해 8가지 권한을 만들 수 있습니다.
앞서 말한 것처럼 퍼미션은 세 가지의 권한으로 구성합니다. r, w, x의 권한과 none입니다. 이때 각 권한은 숫자로 표시 가능합니다.
[보기1] 퍼미션의 종류
r = 4
w = 2
x = 1
none = 0
그리고 이들 숫자를 합쳐서 0~7까지의 숫자로 표현되는 권한을 만들어 낼 수 있습니다.
[보기2] 퍼미션의 조합의 종류
7 = 4+2+1 = r(4) + w(2) + x(1) = 일기, 쓰기, 실행이 모두 가능
6 = 4+2 = r(4) + w(2) = 읽기와 쓰기가 가능.
5 = 4+1 = r(4) + x(1) = 읽기와 실행이 가능.
4 = 4 = r(4) = 읽기만 가능.
3 = 2+1 = w(2) + x(1) = 쓰기와 실행이 가능.
2 = 2 = w(2) = 쓰기만 가능.
1 = 1 = x(1) = 실행만 가능.
0 = 0 = none = 아무 권한 없음. 파일 접근이 차단됨.
즉 읽기 권한만 주려면 4로 설정하면 되고, 읽기와 쓰기, 실행 권한을 모두 주려면 7로 설정하면 됩니다. 6으로 설정하면 읽기와 쓰기 권한을 부여한 것이며 5로 설정하면 읽기와 실행 권한을 부여한 것입니다.
'chmod 755'는 소유자에게 7의 권한을, 그룹과 일반 사용자에게 5의 권한을 부여합니다.
따라서 'chmod 755 book.html'의 의미는 book.html에 대한 퍼미션을 설정하는데 소유자에게는 7(4+2+1)의 권한을 설정하고 그룹과 일반 사용자에게는 5(4+1)의 권한으로 설정하라는 명령이 됩니다. 그래서 일반 사용자는 5의 권한을 배정받아 읽기와 실행 권한을 사용할 수 있습니다.
따라서 chmod 755 명령을 내린 뒤에 파일 목록을 살펴보면 rwxr-xr-x 의 퍼미션으로 설정된 것을 볼 수 있습니다.
만약 chmod 777 book.html 이라고 명령을 내렸다면 소유자, 그룹, 일반인에게 모두 읽기, 쓰기, 실행 권한을 부여한 것이 됩니다. ls -al 명령어로 살펴보면 rwxrwxrwx의 형태로 표시됩니다.

**사진: 'chmod 777 book.html' 명령을 내리면 book.html의 퍼미션이 '-rwxrwxrwx'의 형태로 표시됩니다.
chmod 700 book.html은 그룹과 일반인에게 아무런 권한도 주지 않는 명령이 되므로 일반인의 접근 자체가 차단됩니다.
11.3.4.일반 사용자에게 쓰기와 실행 권한을 주는 경우
일반적인 홈페이지의 HTML 문서 파일은 사용자에게 읽기 권한만 줍니다.
chmod 명령으로 파일에 대한 퍼미션을 설정할 경우 아마 여러분은 모든 홈페이지 문서를 chmod 744 즉, rwxr--r--으로 설정하면 될 것이라고 생각하기 쉽습니다. 일반 사용자는 와서 읽기만 하면 될 것으로 생각합니다.
html 문서 파일이라면 일반 사용자에게 r-- 권한으로 설정해도 충분합니다. 그렇지만 게시판 프로그램이나 사용자의 정보가 갱신되는 파일이라면 r--로 권한을 설정해주면 안됩니다. 게시판 프로그램이라면 사용자가 자신의 글을 올려야 하는데 이를 위해서는 게시판 프로그램을 실행시킬 수 있어야 합니다. 따라서 게시판 프로그램에 대해 일반인에게도 실행(x) 권한을 부여해야 합니다. 그래야만 일반 네티즌이 홈페이지에 접속해서 게시판 프로그램을 실행시킬 수 있습니다.

**사진: 게시판 프로그램은 일반인에게도 실행 권한을 설정해야 사용할 수 있기 때문에 bbs.cgi는 x 권한이 붙었
게시판 프로그램은 일반인에게도 읽기, 쓰기, 실행 권한을 모두 부여해야 합니다.
또한 게시판에 글을 올리고 써야 하므로 게시판 내용이 저장된 자료 파일은 일반인들도 읽고 쓸 수 있어야 합니다. 결국 게시판 자료 파일은 일반인에게도 rwx 권한을 설정해주어야 합니다.
이런 이유로 일반 사용자에게도 읽기 쓰기나 실행 권한을 주는 경우가 많습니다. 그리고 이런 권한을 제대로 설정하지 않으면 cgi 프로그램이 제대로 동작하지 않습니다.