본문 바로가기
IT Security/LINUX Basic

10. Linux - 파일 및 폴더 권한 및 소유주 지정하기

by Rosmary 2019. 12. 1.
728x90
반응형

리눅스 내의 모든 파일과 폴더는 특정 계정과 그룹이 소유하고 있다. 그리고 파일과 폴더의 권한이 어떻게 부여되었느냐에 따라, 모든 계정이 해당 파일과 폴더에 접근할 수도 있고, 그렇지 못할 수도 있다. 

 

사실 윈도우에서도 파일 권한을 부여하는 옵션이 있긴 한데... 개인 컴퓨터가 널리 보급된 현대에는 개인용 컴퓨터에 하나 이상의 계정이 존재하는 경우가 드물기 때문에 이 기능을 거의 사용하지 않아 잘 모르는 분들이 많을 것이다. 하지만 리눅스의 경우, 메일이나 블로그와 같은 서비스를 제공하는 업체에서 많이 사용하는 운영체제이기 때문에, 파일 권한에 대한 내용과 부여, 변경 관련 작업을 꽤나 많이 수행한다.  

 

이번 포스팅에서는 파일/폴더의 권한(퍼미션)과 파일 소유주에 대한 내용에 대해 글을 작성해보려 한다.

 

 

 

 

1. 파일 및 폴더의 권한

 

파일/폴더의 권한은 크게 3가지가 있다. 파일과 폴더를 읽을 수 있는 권한(r), 파일과 폴더를 쓰거나 수정할 수 있는 권한(w), 그리고 마지막으로 파일과 폴더를 실행할 수 있는 권한(x, execute)이다. 각 파일의 권한은 ls -lh 명령어에서 가장 맨 앞에 보이는 필드값인데, 지금까지 ls -lh 명령어를 많이 입력해보셨던 분들이라면 익숙한 출력물일 것이다.

 

 

이 필드는 총 10개의 문자로 구성되어 있다. 가장 첫 문자(폴더인지 파일인지 구분해주는 문자)를 제외한 나머지 9문자가 해당 파일/폴더의 권한을 나타내는 값이라고 보면 된다. 그런데 잠깐만요. 아까 권한은 3개라고 했는데, 왜 이와 관련된 문자는 9개나 되는 것이죠...?

 

그 이유는, 이 9개의 문자열이 단순하게 모든 계정에 대해 읽고 쓰고 실행하는 권한을 보여주는 것이 아니기 때문이다. 앞의 3글자는 파일 소유자에게 부여된 권한을 의미하고, 다음 3글자는 파일을 소유하는 그룹에게 부여된 권한을, 그리고 마지막은 파일과 그룹소유자를 제외한 나머지 계정에게 부여된 권한을 의미한다. 즉 다음과 같은 포맷이다.

 

---------------------------------------------------

1    234     567     890

---------------------------------------------------

1:  파일/폴더의 종류 구분(d일 경우, 디렉토리(폴더)를 의미하며, -는 파일을 의미한다)

2, 3, 4:     파일 소유 계정에게 부여된 권한

5, 6, 7:     파일 소유 그룹에게 부여된 권한

8, 9, 0:     소유주, 소유그룹을 제외한 계정이 가지는 권한

 

 

그럼, 파일의 소유주와 소유 그룹은 어떻게 알 수 있을까?

 

 

첫 번째 붉은 박스 안의 내용이 파일 소유 계정을, 두 번째 붉은 박스 안의 내용이 파일 소유 그룹을 나타낸다. 일반적으로 계정 생성 시, 계정의 기본 그룹은 계정명과 동일하기 때문에, 위와 같이 소유계정과 소유 그룹이 동일한 출력 결과를 나타낸다(다음 포스팅에서는 소유 그룹을 변경하는 작업을 진행할 예정이다).

 

 

 

이제 파일 및 폴더의 권한에 대한 내용을 필자의 홈 디렉토리를 예로 들어 살펴보자. /home 아래에 존재하는 6개의 계정 폴더는 모두 rwx------로 권한이 부여되어 있다. 이 말은 폴더 소유 계정은 읽고(r), 쓰고(w), 실행(x)하는 것이 가능하나, 소유 계정을 제외한 나머지 계정과 모든 그룹은 이 파일에 대한 어떤 권한도 가지고 있지 않다. 따라서, user1 계정이 자신의 폴더인 user1 폴더에서는 어떤 작업을 하더라도 진행되지만, 그 외의 폴더에는 접근조차 시도할 수 없다.

 

 

파일의 실행 역시 마찬가지다. 만약, root 계정이 /home 밑에 "Hello"라는 문구를 출력하는 스크립트 파일을 만들어놓고, 이 계정의 권한을 rwx------로 지정해놓았다면, root를 제외한 모든 계정은 이 스크립트를 실행할 수 없다.

 

 

그렇다면, 모든 사람들이 사용할 수 있도록 파일 권한을 바꿔주기 위해서는 어떻게 해야할까? 이는 chmod라는 명령어로 진행할 수 있다.

 

 

2.  chmod 명령어로 파일 및 폴더 권한 변경하기

 

chmod는 change mode의 약자로 권한을 변경한다는 의미를 가진다. 명령어의 포맷은 다음과 같다.

 

===========================

chmod [권한] [파일명]

===========================

 

파일명이야 파일 이름을 그대로 넣어주면 되지만, 권한 부분은 조금 까다롭다. 권한을 부여하는 방법은 크게 2가지가 있는데, 알파벳을 이용한 권한 부여와 숫자를 이용한 권한 부여 방식으로 나눌 수 있다. 

 

(1) 알파벳으로 권한 부여

 

권한 필드는 소유주, 소유그룹, 나머지 계정에 부여하는 권한 값을 가진다고 언급했다. 여기서 소유주에게 권한을 부여하기 위해서는 [u=권한], 소유 그룹에 권한을 부여하기 위해서는 [g=권한], 마지막으로 나머지 계정에 권한을 부여하기 위해서는 [o=권한]을 작성해주면 된다. 등호 앞의 알파벳은 각각 user, group, other의 약자다. 

 

만약 필자가 script.sh 파일의 권한을, 소유 계정에만 모든 권한을 주고, 그 외에는 쓰기와 수정 권한을 뺀다고 해보자. 결과값으로 rwxr-xr-x가 나와야하므로, 다음과 같이 chmod 명령어를 사용하면 된다.

 

 

그리고, 소유 계정 외의 계정에도 이 파일에 대한 실행 권한이 부여되었으므로, user1 역시 이 파일을 아무런 재재 없이 실행할 수 있게 된다.

 

 

 

(2)  숫자로 권한 부여하기

 

실무에서는 알파벳보다도 숫자를 많이 사용한다. 단 세 자리의 숫자만 적으면 권한을 부여할 수 있기 때문에, 작성 자체가 알파벳으로 진행하는 것보다 편하기 때문이다.

 

권한 작성에 사용하는 세 자리 숫자의 각 자릿수는 소유계정의 권한, 소유 그룹의 권한 그리고 나머지 계정에 대한 권한을 나타낸다. 각 자리의 숫자는 0~7 사이의 값만 가질 수 있다.

 

각 권한 조합에 따라 부여되는 숫자는 다음과 같다.

 

권한  (이진수) 숫자
---   (000) 0
--x   (001) 1
-w-   (010) 2
-wx   (011) 3
r--   (100) 4
r-x   (101) 5
rw-   (110) 6
rwx   (111) 7

 

이진법에 대해 익숙한 분들이라면, 해당 권한이 나타내는 이진숫자가 십진 숫자와 동일함을 알 수 있을 것이다.

위의 표를 참고하여 script.sh의 원래 권한인 rwx------를 숫자로 권한 부여한다면 다음과 같은 명령어를 사용할 수 있다.

 

 

root를 제외한 모든 계정이 이 파일을 실행할 권한이 없기 때문에 user1은 다시 이 파일을 실행할 수 없게 된다.

 

폴더의 권한을 변경하는 경우, 폴더 내에 존재하는 하위 폴더나 파일은 권한이 변경되지 않는다. 만약, 하나의 폴더 아래에 있는 모든 파일과 폴더도 동일한 권한으로 변경하고자 한다면, 옵션으로 -R을 넣어주면 된다.

 

 

3. 파일 소유주, 소유 그룹의 변경

 

특정 파일의 소유 계정과 소유 그룹을 변경하는 것도 가능하다. 이 때 사용할 수 있는 명령어는 chown이라는 명령어로 change owner라는 뜻을 가지고 있다. 명령어 포맷은 아래와 같다.

 

====================================

chown [소유계정]:[소유그룹] [파일명]

====================================

 

만약 root 계정이 만든 script.sh 파일의 소유 계정과 소유 그룹을 user1으로 변경하고자 한다고 가정해보자. 그럼 다음과 같이 "chown user1:user1 script.sh" 명령어로 소유 계정과 그룹을 변경할 수 있다. 

 

 

만약, 소유 계정만 변경하기를 원한다면, :[소유그룹]은 생략해도 된다. 다만 이렇게 명령어를 입력하는 경우, 소유 그룹은 변화없이 그대로 유지된다. 소유 그룹만 변경하기를 원한다면, [소유계정]을 생략하고 명령어를 입력하면 된다. 

 

chmod 명령어와 마찬가지로, 폴더의 소유계정이나 소유 그룹을 변경하는 경우, 폴더 내에 존재하는 하위 폴더나 파일은 소유계정과 소유그룹이 변경되지 않는다. 만약, 하나의 폴더 아래에 있는 모든 파일과 폴더도 동일한 소유계정/그룹으로 변경하고자 한다면, 옵션으로 -R을 넣어주면 된다.

 

 

 

FIN.

 

반응형

댓글