리눅스 chmod 명령
유닉스 시스템은 다중 사용자 시스템이기 때문에 다른 사용자들로부터 각자의 파일들을 보호하기 위하여, 파일 사용 허가라 불리우는 메카니즘을 제공한다. 이 메카니즘은 파일과 디렉토리를 특별한 사용자들에게 소유되게 한다. 예를 들면, 사용자 bitch은 자신의 홈 디렉토리에 파일을 생성하였다면, bitch 자신이 그 파일이나 디렉토리의 소유자가 되어, 그것들을 액세스할 수 있다.
유닉스는 또한 사용자나 사용자 그룹에게 파일의 공유를 허용한다. 만일 파일의 소유자가 원한다면, 그는 다른 사용자의 그의 파일로의 접근을 불허할 수 있다. 어쨌든, 대부분의 시스템에서는 디폴트로 다른 사용자가 당신의 파일로의 접근이 허용하며, 그것을 어떠한 방법으로도 삭제나 수정이 불가능하게 되어 있다.
결국, 모든 파일은 특별한 사용자나 그룹에게 소유되어 있다. 사용자가 생성되면 모든 사용자는 최소한 한 그룹에 존재하게 되며, 시스템 관리자는 아마도 사용자가 하나 이상의 그룹을 액세스하는 것을 허용할 것이다.
그룹은 보통 컴퓨터를 액세스하는 사용자의 형태에 의해 정의된다. 예를 들면, 통합 유닉스 시스템 하에서 사용자는 아마도 학생, 스텝, 손님 중 하나의 그룹에 속하게 될 것이다. 또한, 작은 시스템에서는 정의된 그룹(bin, admin같은)을 시스템 자체가 자원의 접근을 제어하기 위해 사용하며, 아주 드물게는 이런 시스템 그룹에 실 사용자가 속하기도 한다.
파일 사용 허가의 종류
그럼, 실제 파일 사용 허가의 종류를 알아보자.
사용 허가의 3가지 부분으로 나눠지며, 이것은 읽기(read), 쓰기(write), 실행(execute) 가능 허가이다. 이 세 가지 사용 허가는 파일의 소유자, 파일이 속한 그룹, 그룹을 제외한 모든 사용자의 부류에 허용된다.
읽기 사용 허가는 사용자가 그 파일의 내용이나 디렉토리의 경우 디렉토리에 포함된 파일 리스트들을 읽어 볼 수 있도록 허용한다. 쓰기 사용 허가는 사용자가 파일을 작성하거나 수정하는 것을 허용한다. 디렉토리의 쓰기 사용 허가는 사용자가 새로운 파일들을 생성하거나 그 디렉토리 안의 파일들을 지울 수 있음을 허용하며, 마지막으로, 실행 사용 허가는 프로그램이나 shell 스크립트의 파일들을 실행할 수 있게 하고, 디렉토리의 실행 사용 허가는 사용자가 cd 로서 디렉토리에 들어갈 수 있도록 허용한다.
파일 사용 허가의 해석
파일의 사용 허가를 예제들을 설명한다. ‘ls’ 명령에 -l 옵션을 사용하면 파일들의 목록이 파일 사용 허가를 포함하여 여러 다른 정보와 함께 출력될 것이다.
/home/larry/foo# /home/larry/foo# ls -l stuff -rw-r--r-- 1 larry users 505 Mar 13 19:05 stuff /home/larry/foo#
Owner | Group | Other | Owner와 Group은 파일소유자자신과 자신이 속한그룹. Other은 제3자, 웹사이트 방문객은 제3자로 nobody로 취급. |
r w x | r w x | r w x | r은 파일 읽기(4), w는 파일 쓰기(2), x는 파일 실행(1) |
7 | 5 | 5 | 파일소유자는 그것을 읽고 쓰고 실행시킬 수 있지만, 제3자는 읽고 실행만 시킬 수 있다. |
7 | 7 | 7 | 제3자도 쓰기 권한이 주어진다. |
출력 목록의 첫 번째 필드는 파일의 사용 허가를 표시한다. 세 번째 필드는 파일의 소유자, 4번째 필드는 사용자가 포함되어 있는 그룹이 출력된다. 마지막 필드는 파일의 이름이 출력된다.
따라서, 이 파일은 larry의 소유이며, 그룹 users에 속해 있다. 파일의 사용 허가를 보며, 문자열 “-rw-r–r–” 은 3칸씩 나누어 순서대로 파일의 소유자, 파일의 그룹, 모든 이의 사용 허가를 나타낸다.
사용 허가 문자열 중 첫 번째 문자인 “-” 것은 파일의 형태를 표시한다. “-”는 이 파일이 디렉토리(“d”로 표기)나 디바이스 파일(“c”로 표기)이 아닌 일반 파일임을 표시한다. 다음의 3개의 문자는 파일의 소유자의 larry에게 사용 허가를 나타낸다. “r”은 “read”, “w”는 “write” 를 각각 나타낸다. 따라서 larry는 파일 stuff의 읽기, 쓰기가 허용되어 있음을 알 수 있다.
read와 write는 언급을 하였고, “x”라고 허용 표현되는 “execute”가 있다. 여기서는 “x”의 자리에 “-”가 있다. 이것은 Larry가 이 파일의 실행 허용을 갖지 않는다는 것이다. 따라서, 이 파일이 실행 파일이라 할지라도 실행 시킬 수 없으나, 파일 소유자인 Larry가 원한다면 파일의 실행 사용 허가를 허용함으로써 실행시킬 수 있다.
다음의 3개의 문자 r– 는 이 파일의 그룹의 사용 허가를 표시한다. 그룹은 이 파일을 소유하는 사용자들이다. 오직 “r”이라고 써있는 것은 이 그룹에 속한 어떤 사용자라도 이 파일을 읽을 수만 있게 한다.
마지막 3개의 문자인 r–는 시스템의 모든 다른 사용자의 사용 허가를 표시한 것이다. 다시 말하면, 오직 “r”이라고 표시되어 있기 때문에 다른 사용자들은 이 파일을 읽을 수는 있으나, 쓰거나(write) 실행할 수는 없다.
여기에 그룹 사용 허가의 다른 몇 예제를 보인다.
-rwxr-xr-x
이 파일의 소유자는 파일을 읽기, 쓰기, 실행을 할 수 있다. 이 파일의 그룹에 속한 사용자와 모든 다른 사용자는 읽거나 실행할 수 있다.
-rw---
이 파일의 소유자는 읽기, 쓰기를 할 수 있으나 실행시킬 수는 없고, 다른 모든 사용자는 이 파일을 액세스 할 수 없다.
-rwxrwxrwx
모든 사용자가 읽기, 쓰기, 실행을 할 수 있다.
사용 허가에서 중요한 것은 파일을 허용하는 것과 그 파일이 위치해 있는 디렉토리의 허용여부 모두를 고려해야 한다는 것이다. 예를 들어, 파일을 심지어 -rwxrwxrwx라고 설정했더라도 그 파일이 위치해 있는 디렉토리가 읽기, 쓰기 접근 허용이 되어 있기전까지는 다른 사용자가 액세스 할 수 없다.
예를 들면, 만일 Larry가 다른 사용자로부터 그의 모든 파일의 접근을 제한하길 원한다면, 그는 그의 홈 디렉토리 /home/larry를 drwx— 로 간단히 설정할 수 있다. 이런 방법은 다른 어떤 사용자도 그의 디렉토리와 그 디렉토리에 포함된 모든 파일들을 액세스 할 수 없어, 그의 어떤 파일도 각각의 파일 사용 허가에 대해서 걱정할 필요가 없다.
다른 말로 한다면, 모든 파일을 액세스하게 한다면, 파일의 경로 안의 모든 디렉토리를 읽기, 실행 허용을 하면 된다.
일반적으로 유닉스 시스템의 사용자는 그들의 파일을 많이 개방한다. 보통 파일들의 사용 허가는 -rw-r–r– 인데, 이것은 다른 사용자들이 그 파일을 읽을 수는 있으나 어떻게든 바꿀 수는 없게 한다. 또 하나의 설정은 디렉토리를 -rwxr-xr-x 로 설정하는 것인데, 이것은 다른 사용자들이 당신의 모든 디렉토리를 볼 수 있게는 해주나 그 파일을 지우거나 생성하는 것을 허용하지는 않는다.
어쨌든, 많은 사용자들은 그들의 파일을 다른 사용자들로부터 지켜지길 바란다. 파일의 설정을 -rw— 은 다른 사용자들이 접근을 하지 못하게 해주며, 비슷하게, 디렉토리를 -rwx— 으로의 설정하는 것은 다른 사용자들로부터 지키게 해준다.
파일 사용 허가의 변경
명령어 ‘chmod’는 파일의 사용 허가를 설정하는데 사용된다. 오직 파일의 소유자만이 파일의 사용 허가를 변경할 수 있다. ‘chmod’ 의 문법은 아래와 같다.
chmod {a,u,g,o}{+,-}{r,w,x} <filenames>
간단히, 당신은 all, user, group, other를 하나나 그 이상 허용할 수 있다. 그러려면 (-) 대신에 (+) 를 첨가하여 변경 시키면 된다. 결국, 하나 이상의 읽기, 쓰기, 실행을 정할 수 있다. 문법적인 여러 가지 예를 아래에 보인다.
chmod a+r stuff
모든 사용자가 이 파일을 읽을 수 있다.
chmod +r stuff
위와 같으며 a, u, g, o 가 정해져 있지 않으면, a(all)가 된다.
chmod og-x stuff
소유자 이외의 다른 사용자에게 실행 허가를 제거한다.
chmod u+rwx stuff
소유자에게 읽기, 쓰기, 실행을 허용한다.
chmod o-rwx stuff
사용자나 그 파일의 그룹을 제외한 사용자는 읽기, 쓰기, 사용 허가 여부를 제거한다.