13.14. 소유권과 허가

앞서 이 장에서, 루트의 로그인 디렉토리로 이동하기 위해 cd를 사용하셨을 때, 다음과 같은 메시지를 보셨을 것입니다:

cd /root
bash: /root: Permission denied

이것은 리눅스의 보안 기능을 보여주는 한 예입니다. 리눅스는 UNIX와 같이 다중-사용자 시스템입니다. 따라서 파일 허가 (file permissions)는 시스템이 손상되는 것을 막을 수 있는 한가지 방법입니다.

접근이 거부된 파일로 접근할 수 있는 한가지 방법은 이전에 배웠듯이 루트로 su 하는 것입니다. 이것은 왜냐하면 루트 암호를 아는 사람은 누구든지 파일에 접근이 가능하기 때문입니다.

하지만 수퍼유저로 전환하는 방법은 항상 편리하고 현명한 방법은 아닙니다. 왜냐하면 중요한 설정 파일들을 실수로 변경할 수 있기 때문입니다.

모든 파일과 디렉토리는 그것을 만든 사람이 "소유권"을 가지고 있습니다. 여러분이 sneakers.txt라는 파일을 (13.9.1 절 참조) 로그인 디렉토리에 만드셨기 때문에, sneakers.txt 파일은 여러분이 소유하고 있습니다.

이것이 의미하는 바는, 여러분은 그 파일에 대한 읽기, 쓰기, 또는 (만일 텍스트 파일이 아닌 응용 프로그램이라면) 실행하기에 대한 허가를 지정할 수 있다는 것입니다.

읽기, 쓰기와 실행하기는 세가지 기본 허가 설정 사항들입니다. 사용자 계정은 만들어질때 그룹으로 나뉘어 있으므로, 여러분은 특정 그룹에 대한 읽기, 쓰기와 실행하기 권한을 지정하실 수 있습니다.

ls 명령과 -l (long) 옵션을 이용하여 sneakers.txt 파일을 살펴봅니다. (그림 13-11 참조)

여기에 많은 세부 정보들이 나와 있습니다. 누가 파일을 만들었으며 (sam)과 파일 소유자가 어느 그룹에 속하는지 (sam)를 알 수 있으며 또한 누가 파일을 읽고 (r) 쓸 수 있는지 (w)도 알 수 있습니다. 기본 값으로, 그룹의 이름은 여러분의 로그인명과 같다는 것을 기억해 주십시오.

그림 13-11. sneakers.txt 파일에 대한 허가 사항

그룹 오른쪽에는 파일 크기, 파일을 만든 날짜, 시간과 파일명에 대한 정보를 제공합니다.

위에서 보이는 첫번째 열은 현재 파일 허가사항을 보여줍니다; 허가는 10칸으로 이루어져 있습니다. 첫 칸은 파일 유형을 나타냅니다. 나머지 9 칸은 3가지 다른 사용자 그룹에 대해 적용되는 3가지 파일 허가를 나타냅니다.

예를 들어:

-rw-rw-r--

이러한 3 가지 다른 사용자 그룹이란: 파일의 소유자 (owner), 파일을 소유하고 있는 그룹 (group)과 지정되지 않은 "다른" 사용자와 그룹 (others)을 의미합니다.

-    (rw-)   (rw-)   (r--) 1 sam sam 
|      |       |       | 
type  owner  group   others
      

파일 유형을 지정하는 첫번째 사항은 다음 중 하나로 나타납니다:

첫번째 사항 다음에 나오는 세가지 항목은 다음 중 한 옵션을 사용합니다:

사용자, 그룹 또는 다른 사용자 부분에 대쉬 (-) 기호가 있다면, 특정 허가 사항이 허용되지 않았다는 것을 의미합니다. sneakers.txt 파일의 첫번째 열을 다시 살펴보시고 허가 사항을 확인해 보십시오.

ls -l sneakers.txt
-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

파일의 소유자는 (이 경우에는 sam) 파일을 읽고 쓸 수 있는 허가를 가지고 있습니다. 그룹 (sam)도 마찬가지로 sneakers.txt 파일에 대한 읽고 쓰기 권한을 가지고 있습니다. 하지만 이 파일은 프로그램이 아니기 때문에 소유자나 그룹 그 누구도 그 파일을 실행할 허가를 가지고 있지 않습니다.

13.14.1. chmod 명령

chmod 명령을 사용하여 쉽게 파일 허가 사항을 변경할 수 있습니다. 다음 예시에서 sneakers.txt 파일에 대한 허가 사항을 chmod 명령을 사용하여 변경하는 방법을 설명하고 있습니다.

원래 파일은 다음과 같은 초기 설정을 가지고 있습니다:

-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

만일 여러분이 파일의 소유자이거나 또는 루트 계정으로 로그인 했다면, 사용자, 그룹과 다른 사용자들에 대한 허가 사항을 변경할 수 있습니다.

현재 소유자와 그룹은 파일에 대한 읽고 쓰기 허가를 가지고 있습니다. 그룹에 속하지 않은 사용자는 오직 그 파일에 대한 읽기 허가 (r--) 만을 가지고 있습니다.

경고경고
 

파일 허가는 보안 기능이라는 것을 잊지 마십시오. 누구나 파일을 읽고, 쓰고 또 실행할 수 있도록 한다면, 그 파일이 변경되거나, 손상 또는 삭제될 위험이 커진다는 것을 의미합니다. 일반적으로, 파일이 꼭 필요한 사용자에게만 파일을 읽고 쓸 수 있도록 허용하셔야 합니다.

다음 예시에서, 여러분은 누구나 파일을 읽고, 쓰고, 또한 저장할 수 있도록 그 파일에 대한 쓰기 권한을 모두에게 주려고 합니다. 이것은 "다른 사용자" 부분에 대한 파일 허가 사항을 변경해야 한다는 것을 의미합니다.

먼저 파일을 살펴 봅시다. 쉘 프롬프트에서 다음과 같이 입력합니다:

ls -l sneakers.txt

위의 명령어는 이 파일에 대한 정보를 보여줍니다:

-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

이제, 다음과 같이 입력합니다:

chmod o+w sneakers.txt

o+w 명령은 시스템에게 다른 사용자가 sneakers.txt 파일을 쓸 수 있도록 허가하라고 지시합니다. 결과를 확인하기 위해 파일의 세부 사항을 다시 한번 살펴봅니다. 이제, 파일은 다음과 같이 나타납니다:

-rw-rw-rw-    1 sam sam     150 Mar 19 08:08 sneakers.txt

이제 모든 사용자가 파일을 읽고 쓸 수 있습니다.

sneakers.txt 파일에서 읽기와 쓰기 허가를 삭제하시려면, chmod 명령을 사용하시면 됩니다.

chmod go-rw sneakers.txt

go-rw라고 입력함으로서, 여러분은 시스템에게 sneakers.txt 파일에 대한 그룹과 다른 사용자들의 읽기와 쓰기 권한을 삭제하라고 지시한 것입니다.

결과는 다음과 같이 나타납니다:

-rw-------    1 sam sam    150 Mar 19 08:08 sneakers.txt

chmod 명령을 사용하여 허가 사항을 변경하실 때, 이러한 설정들을 일종의 줄임말(shorthand)이라고 간주하시면 됩니다. 왜냐하면 여러분은 오직 chmod 명령에 함께 사용할 몇몇 기호와 문자만 기억하시면 되기 때문입니다.

다음은 줄임말이 나타내는 의미에 대한 목록입니다:

사용자 유형

u — 파일을 소유한 사용자 (즉, 소유자)

g — 사용자가 속한 그룹

o — (소유자도 아니고 소유자 그룹에도 속하지 않은) 다른 사용자

a — 모든 사용자 (u, g, 와 o)

허가 사항

r — 읽기 허가

w — 쓰기 허가

x — 실행 허가

작용

+ — 허가 추가하기

- — 허가 삭제하기허가 추가하기

= — 단독 허가 설정하기

여러분 스스로 허가를 변경하는 법을 시도해 보시겠습니까? sneakers.txt 파일의 모든 허가를 삭제해 보십시오 — 모든 사용자에 적용.

chmod a-rwx sneakers.txt

이제 cat sneakers.txt 명령을 사용하여 그 파일을 읽을 수 있는지 확인해 보십시오. 결과는 다음과 같을 것입니다:

cat: sneakers.txt: Permission denied

여러분의 허가를 포함하여 모든 허가를 삭제함으로서, 성공적으로 파일을 잠그게 되었습니다. 하지만 파일이 여러분에게 속해있기 때문에, 언제든지 다음과 같은 명령을 사용하여 허가를 다시 변경할 수 있습니다:

chmod u+rw sneakers.txt

Use the command cat sneakers.txt to verify that you, the file owner, can read the file again.

chmod 명령과 함께 자주 사용되는 설정은 다음과 같습니다:

-R 옵션을 더하여 전체 디렉토리에 대한 허가 사항을 변경하실 수 있습니다.

왜냐하면 디렉토리를 응용 프로그램처럼 "실행"할 수가 없기 때문에, 디렉토리에 대한 실행 허가를 추가하고 삭제하는 것은 그 디렉토리를 통해 검색하는 것을 허락 (또는 거부)하는 것을 의미합니다.

다른 사용자가 tigger 디렉토리에 있는 모든 파일을 실행할 허가를 주지 않았다면, 누가 그 파일을 읽거나 쓸 수 있는 허가를 가지고 있는지는 중요하지 않습니다. 정확한 파일명을 알지 않는 한 누구도 그 디렉토리를 볼 수 없습니다.

예를 들어 다음과 같이 입력하시면:

chmod a-x tigger

모든 사용자의 실행하기 허가를 삭제할 수 있습니다.

이제 여러분이 tigger 디렉토리에 들어가기 위해 cd 명령을 사용할 때 발생하는 상황은 다음과 같습니다:

bash: tigger: Permission denied

다음으로 소유자와 그룹에 대한 허가를 복원합니다:

chmod ug+x tigger

이제 ls -dl를 사용하여 지금까지 실행한 결과를 볼 수 있습니다. 오직 다른 사용자가 tigger 디렉토리로 접근하는 것이 거부된 것을 볼 수 있습니다.

13.14.2. 숫자를 사용하여 허가 변경하기

chmod 명령어와 사용했던 줄임말 사항들을 기억하십니까? 허가를 변경할 수 있는 또 다른 방법이 있습니다. 처음에는 다소 복잡하게 느껴질 수도 있습니다.

sneakers.txt 파일의 원래 허가 사항으로 복구합니다:

-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

각 허가 사항 설정은 숫자 값으로 표현될 수 있습니다:

이 값들이 서로 더해지면, 그 합계는 특정 허가를 지정하는데 사용됩니다. 예를 들어, 만일 읽기와 쓰기 허가를 원하신다면, 6의 값을 갖게 됩니다; 4 (읽기) + 2 (쓰기) = 6.

sneakers.txt 파일에 대한 숫자 허가 설정은 다음과 같습니다:

 -  (rw-)   (rw-)  (r--)
      |       |      |
    4+2+0   4+2+0  4+0+0

소유자 부분의 합계는 6, 그룹 부분의 숫자 합계는 6이며 다른 사용자 부분의 숫자 합계는 4 입니다. 따라서 허가 설정은 664가 됩니다.

여러분이 속한 그룹이 파일을 읽을 수는 있지만 쓸 수는 없도록 sneakers.txt 파일에 대한 설정을 변경하고 싶다면, 그룹 숫자 합계에서 2를 빼면 쓰기 권한이 삭제됩니다.

그 후 숫자 값은 644가 될 것입니다.

이와 같은 새로운 설정을 실행하기 위해서는, 다음을 입력하십시오:

chmod 644 sneakers.txt

이제 파일이 어떻게 변했는지 확인해 보십시오:

ls -l sneakers.txt

출력 결과는 다음과 같습니다:

-rw-r--r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

이제 그룹과 다른 사용자들 모두 sneakers.txt 파일에 대한 쓰기 허가를 가지고 있지 않습니다. 파일에 대한 그룹의 쓰기 허가를 복원하기 위해서는, 허가 설정 두번째 칸에 w값 (2)를 더하면 됩니다.

chmod 664 sneakers.txt

주의경고
 

숫자 허가를 666으로 설정한다면 모든 사용자가 파일과 디렉토리를 읽고 쓸 수 있도록 허용하는 것입니다. 허가를 777로 설정한다면 모든 사용자가 읽기, 쓰기와 실행 허가를 갖게 됩니다. 일반적으로 이러한 설정을 사용한다면 중요한 파일들을 손상시키기 쉬우므로 좋은 생각이 아닙니다.

다음은 일반적으로 사용되는 숫자 값 설정과 그 숫자들이 의미하는 바를 정리한 목록입니다:

다음은 디렉토리에 대한 일반적인 설정입니다: