네이버 클라우드 캠프/Linux

[Linux] 권한 이야기

graph-dev 2023. 4. 25. 21:07
728x90

권한(Permission)

 

이 권한과 관련해서, 중요한 개념이 세가지있습니다.

먼저, 소유자(사용자 User), 소유자의 그룹(Group), 다른 사용자(Others)를 대상으로 합니다.

다음은, 파일을 두고 어떤 작업을 하는가에 따라서 크게 세가지로 분류합니다. 읽고 (Read) 쓰고(Write), 실행합니다.(eXecute) 이 모든 것을 종합하면, UGO는 각자의 폴더나 파일에 대해 RWX의 권한을 가진다. 이렇게 요약할 수 있습니다.

 

이렇게 된 것은 유닉스의 철학(Simple) 때문입니다.

Simple, 간단한 명령어로 나눈다.

리눅스에서 사용가능한 명령어는 다양합니다. 수정, 이동, 복사, 숨김 등이 있는데요, 이 모든 명령어는 가장 간단한 명령어로 통합해서 사용할 수 있습니다. 이 모든게 합쳐져서 하나의 권한이 됩니다.

 

 

권한을 확인해보겠습니다. 우리가 리눅스 서버에서 ls -al을 입력하면 아래와 같은 화면이 나타납니다.

위에서 우리는 . 과 .. 이라는 것을 살펴보겠습니다.

한 줄만 가져오면 다음과 같습니다.

drwx--x--- 4 stats stats 4096 Apr 25 12:38 .

여기서 구조가 어느정도 파악이 됩니다. 참고로 점 하나(.)는 현재 디렉토리를 의미하고, 점 두개(..)는 상위 디렉토리(부모)를 의미합니다. 특히, 앞에 있는 drwx--x--- 가 권한에 관해 자세한 설명을 해주므로 중요합니다.

 권한에 대한 문구로 d는 디렉토리(directory)를 의미합니다. r은 읽기(read)를 말하고, w은 쓰기(write)를 의미합니다. 그리고 d 이후로는 세자리마다 끊어서 생각할 수 있습니다.

 첫 세자리는 User(사용자 혹은 소유자)를 의미하며, 두번째 자리는 Group(사용자 그룹), 마지막 세자리는 Others(다른 사용자)의 권한을 의미합니다. 따라서 첫 세자리인 rwx 는 사용자가 읽고 (read), 쓰고 (write), 실행(execute)할 수 있는 권한이 있다는 것을 말합니다. 그러면 뒤에 x--는 사용자 그룹은 실행만 가능하고, 마지막 다른 사용자도 마찬가지로 읽고 쓸 수는 없고 실행만 할 수 있음을 알 수 있습니다. 그리고 이 권한은 . (현재 디렉토리)에 한정하여 보여주는 것입니다.

 

두번째 줄만 살펴보겠습니다. 점이 두개(..)는 상위 디렉토리로, 사용자가 root라는 사람으로 되어 있습니다. root 사용자는 클라우드에서 부여한 이름이기도 하면서도, 실제 루트 사용자는 최상위 권한을 갖는 것으로 되어 있습니다. 다만 사용자 이름이 중요한 게 아니라 실질적인 권한을 파악하는 게 더 중요하므로 헷갈리지 않도록 합시다.

drwxr-xr-x 4 root  root  4096 Apr 25 10:50 ..

이 명령어는 현재 위치를 기준으로, 한단계 상위 디렉토리(..)에서 root의 권한은 rwx이고, root의 그룹은 -xr, 다른 사용자는 r-x만 가능하다고 합니다. 정리하면, root 사용자는 상위 디렉토리를 읽고 쓰고 실행하며 그룹은 읽고 실행만 가능하고 쓸 수 없고, 마지막으로 다른 사용자도 읽고 실행만 할 수 있다고 해석할 수 있습니다.

그러면, 이렇게 w 권한이 없을 때는 접근이 가능할지 실행해보았습니다.

실행해보면, -bash: cd: /root/: Permission denied 이런 문구가 뜨면서 접근이 되지 않습니다.

 

헷갈리는 디렉토리

우리가 디렉토리로 가는 방법이 여러가지가 있습니다. 기본적으로 cd(change directory) 명령어에 붙여서 사용합니다. 그 중에서 헷갈리는 디렉토리를 소개하겠습니다.

cd ~
cd /home/

cd /
cd /root/

 

home vs 홈 디렉토리

 우리가 사용자를 추가하면, 기본적인 홈 디렉토리는 대체로 /home/사용자명 이렇게 생성이 됩니다. 그런데 홈 디렉토리로 가라고 했을 때 cd /home/을 하게되면 실제로 권한이 부족해서 작업을 하기 어려운 경우가 많습니다. 그럴 때 간편하게 사용할 수 있는 명령어가 cd ~ 갈매기 모양(물결표)입니다. 정리하면, home은 home이라는 디렉토리(/home/)이고, 홈 디렉토리는 (~) 물결 표시로 접근이 가능하다고 할 수 있습니다.

 

root vs 루트 디렉토리

 제가 사용하는 클라우드에서는 root라는 계정을 주고, 이것이 최상위 권한을 갖는 사용자로서 루트 디렉토리도 동일한 이름으로 생성이 됩니다. 그러나 중요한 것은 모든 환경에서 이렇지 않을 수 있습니다. 따라서 루트 디렉토리(최상위 디렉토리)로 가는 명령어인 슬래쉬(/)를 적극 이용합니다. 루트 디렉토리로 가려면 cd / 이렇게 사용하면 됩니다.

 

 

권한 변환 명령어(chmod)

chmod는 change mode의 약자입니다. chmod + 숫자 + 파일 이런 순서로 작성하면 되며, UGO를 기준으로 세자리 숫자만으로 조정할 수 있습니다.

여기서 기본적으로 True, False에 해당하는 숫자인 1, 0인 이진수로 변환합니다. UGO를 대상으로 이진수를 십진수로 변경해서 표현할 수 있습니다.

예를 들어 소유자(User)가 rw- 일 때, 이에 대해서 적용해보겠습니다.

권한 종류 r (read, 읽기) w (write, 쓰기) x (execute, 실행하기)
rw- 의 조건 TRUE TRUE FALSE
이진수 1 1 0
십진수 변환 4 2 1

즉, 소유자는 권한의 십진수 합이 4 + 2 + 1을 해서 7이 됩니다. 이것을 반복해보면, 다음과 같습니다.

이것을 모든 권한이 있는 사람들에게 적용해보겠습니다.

drwx--x--- 4 stats stats 4096 Apr 25 12:38 .

위의 권한 설명문인 drwx--x--- 을 해석하면 아래와 같습니다.

U G O
r w x - - x - - -
1 1 1 0 0 1 0 0 0
1 1 1 0 0 1 0 0 0
7 1 0

정리해보면, 이 현재 디렉토리(.)은 소유자는 7, 그룹은 1, 다른 사용자는 0이라는 권한 값을 가지며 이것을 역으로 사용하면 각 사용자마다 권한이 무엇인지 추측할 수 있습니다.

가령, UGO가 5 1 0이라면 쉽게 소유자는 읽고 실행(r-x), 그룹은 실행(--x), 다른 사용자는 권한 없음(---) 라고 해석할 수 있습니다.

 

이 조합을 사용해서 권한 변환을 해보겠습니다.

drwxr-xr-x 4 stats stats 4096 Apr 25 10:53 .

여기는 홈 디렉토리이고, 이 때 홈 디렉토리의 권한은 7 5 5로 되어있고, 이를 7 5 0으로 바꾸겠습니다.

chmod 750 ~

그리고 다시 권한을 확인해보면 다음과 같습니다.

drwxr-x--- 4 stats stats 4096 Apr 25 10:53 .

보면, 사용자가 원래는 r-x로 읽고 실행할 수 있었는데, 변환 후에는 ---로 어떠한 권한도 없어서 아무것도 할 수 없게 변경되었습니다. 그 상태에서, 다른 사용자가 홈 디렉토리로 접근하게 되면 다음과 같은 문구가 나타납니다.

즉, 해당 사용자의 홈 디렉토리로는 갈 수 없게 되는 것이 보이실 겁니다.

 

이번에는 숫자가 아닌 문자로 접근해보겠습니다.

사용자는 u, 그룹은 g, 다른 사용자가 o 임을 기억하고, 권한을 주면 +, 권할을 뺏으려면 -를 조합해주면 권한을 자유롭게 조정할 수 있습니다.

chomd o-x .
chmod o+x .
chmod u+r .
chmod u+w .
chmod a+w .

하나씩 보면, chomd o-x는 others 다른 사용자에게서 x라는 실행 권한을 빼앗는다(-). 라고 해석할 수 있습니다. 추가로 a는 all, 즉 u, g, o 의 모든 사용자들을 대상으로 한번에 권한을 조정할 때 사용합니다. 참고로 여러 권한도 이어넣어주면, 한번에 권한을 부여하거나 제거할 수 있습니다.

chomd u+rwx .
chomd g-rwx .

 

다음은 ubuntu 사용자와 stats라는 사용자의 화면입니다. 여기서 x 권한이 없고, r 권한만 주면 파일 리스트를 확인할 수 있을까요?

ubuntu 사용자는 지금 stats 사용자의 홈 디렉토리에 대해 others이며 r-- 라는 권한을 가집니다. 

왼쪽 화면 처럼 읽기 권한만 가지고 있을 때는 cd /home/stats/ 에 경로로 접근 조차 할 수 없었습니다.  그런데 파일 리스트는 확인할 수 있을지 확인해보겠습니다.

 

재밌게도 파일 리스트는 맨 하단에 나타나고 있어 확인할 수 있습니다. 다만 access는 할 수 없다고 모든 하위 디렉토리 등에서 언급하고 있습니다.

 

마지막으로 하나만 더 언급하겠습니다. 권한 변환을 하거나 권한을 정의하는 = 이라는 기호도 활용할 수 있습니다.

가령 홈 디렉토리에서 그룹을 대상으로 읽고 쓰는 권한으로 정의한다면, 

chmod g=rw .

이렇게 작성하면 됩니다. 그러면 아래 처럼, 실행만 가능한 권한(--x)에서 읽고 쓰는 권한 (rw-) 으로 완전히 변경된 것을 확인할 수 있습니다.

 

마지막으로, 소위 슈퍼 유저에 해당하는 루트 사용자(여기서는 root)는 하위 사용자들을 대상으로 무적의 권한을 가지고 있습니다. 그래서 루트 사용자가 함부로 하면 안되는 명령어도 있습니다.

 

'네이버 클라우드 캠프 > Linux' 카테고리의 다른 글

[Linux] 리눅스 기초  (0) 2023.04.24