LINUX, 권한 관리하기

2020. 8. 28. 02:54BACKEND/Linux

안녕하세요 〰️ 오늘은 리눅스의 권한 관리하는 법에 대한 포스팅을 작성할까 합니다.

권한 관리라는 말이 낯선가요?

 

'파일에 접근할 수 있는 권한이 없습니다' 나 'permission denied' 라는 문구를 한 번쯤은 보셨을 것 같아요.

위의 문구들을 보면 이제 뭘 알아가려는지 아시겠죠? 

 

*****************  INDEX  *****************

 

[1부]

🚀 권한 관리❓ 

💼 소유권(Ownership)

🔑 허가권(Permission)

 

[2부]

👾 특수 권한

📀 디스트 쿼터

 

******************************************** 

 

 


 

권한 관리❓ 

여기서의 권한은 어떤 걸 말하는 걸까요❓ 

바로 '파일이나 디렉터리에 접근할 수 있는 권한'을 입니다.

우리가 사용하던 window나 mac에서는 조금 생소한 일입니다.

파일이나 디렉터리에 접근할 때, 권한이 필요한가? 라는 의문이 들기도 하죠.

 

리눅스는 멀티 유저(다중사용자), 멀티 태스킹(다중작업)을 기반으로 하는 운영체제이기 때문에 나온 개념입니다.

굉장히 중요한 기능이죠.

 

먼저, 파일이나 디렉터리의 권한은 어떻게 확인할 수 있을까요❓ 

 

아래의 명령어를 입력해도록 할게요.

 

$ ls -l

 

그럼 다음과 같은 결과가 출력됩니다.

 

drwxr-xr-x  12 gngsn  gngsn   384  2020-08-26 07:15 assets
-rw-r--r--   1 gngsn  gngsn   289  2020-07-24 03:34 index.md

 

처음보면 어떤 의미인지 모를 수도 있는데요.

함께 알아보도록 할게요.

 

 

아마 뒤의 3개는 이해가는데, 앞의 4개는 조금 낯설 수도 있을 것 같아요.

이제부터 ls -l 에서 표시되는 Permission과 Onwership에 대해 자세리 알아보겠습니다.

참고로 '물리적 파일 연결 수'를 모르시다면 ln (link) 를 찾아보세요!

 

 

 

Onwership 💼

 

위에서 사용자 소유권과 그룹 소유권이 표시된 것을 확인하셨나요?

소유권은 말 그대로 해당하는 파일(디렉터리)가 누구의 소유인지를 의미합니다.

여기서 말하는 그룹은 사용자들의 시스템 운영 특성에 따라 묶어 놓은 것으로, 같은 그룹에 속한 사용자들은 파일 또는 디렉터리에 대해 동일한 소유권과 작업 권한을 갖습니다.

 

그 표시를 파일(디렉터리)의 정보를 확인할 때 3번째와 4번째에 명시하죠.

" 이 파일은 ~의 소유이고, ~그룹의 소유야 〰️ "

 

이번엔 소유권Ownership과 관련된 명령어들을 알아보도록 하겠습니다.

 

 

✔️ chown

  $ chown [option] 소유자[:그룹명] 파일명 

options

-R :  하위 디렉터리를 포함하여 디렉터이 내부의 모든 파일의 소유권 변경

 

 

파일과 디렉터리의 사용자 소유권과 그룹 소유권을 변경합니다.

change ownership의 줄임말이겠죠 〰️

 

소유권을 변경하는 이유가 궁금하실 수도 있을 것 같은데요.

그 이유는 아래에서 소개해드릴 Permission과 밀접한 관계가 있기 때문에 참고하시면 될 것 같아요.

 

그럼 이제부터 사용 예시를 같이 한 번 볼게요.

 

 

 

1. 사용자 소유권 변경하기

 

-rw-r--r--  1  gngsn  gngsn   289  2020-07-24 03:34 index.md

 

 

위의 사용자 소유권을 root로 변경해보도록 할까요? 

다시 말하자면 3번째에 있는 게 사용자 소유권입니다.

명령어를 어떻게 입력하면 될까요 〰️ 

 

$ chown root index.md

 

위의 명령어를 입력하면 아래와 같이 변경됩니다.

 

-rw-r--r--  1  root  gngsn   289  2020-07-24 03:34 index.md

 

 

 

2. 그룹 소유권 변경하기

 

이 번엔, 위의 파일의 그룹 소유권을 변경해보도록 하겠습니다.

그룹 gngsn에서 그룹 root으로 변경하는 명령어는 아래와 같습니다.

 

$ chown :root index.md

 

적용하면 어떻게 될까요? 예상이 가시나요?

 

-rw-r--r--  1  root  root   289  2020-07-24 03:34 index.md

 

그룹 소유권을 바꾸는 방법이 하나 더 있습니다.

바로 아래에서 소개해드릴 chgrp입니다.

 

 

✔️ chgrp

  $ chgrp [option] 그룹명 파일명 

options

-R :  하위 디렉터리를 포함하여 디렉터이 내부의 모든 파일의 그룹 소유권 변경

 

 

change group을 줄인 명령어로 파일이나 디렉터리의 그룹 소유권을 변경합니다.

위의 chown :group name 과 같은 역할을 합니다. 

 

-rw-r--r--  1  root  gngsn   289  2020-07-24 03:34 index.md

 

따라서 위의 파일은 아래와 같이 바뀌겠죠❓ 

 

$ chgrp root index.md
$ ls -l
-rw-r--r--  1  root  root   289  2020-07-24 03:34 index.md

 

 

🔑  Permission

 

이번엔 허가권을 알아보겠습니다.

 

익숙한 분들도 많겠지만, 처음보는 사람도 적지 않을 것 같아요.

이제부터 그림으로 같이 알아보겠습니다.

 

 

 

음,,,잘,,,그려보려고는 했는데,,,이해만 가면 되죠 뭐,,

위의 문자들은 가장 기본적인만큼 중요하기 때문에 집중합시다 ❗️

 

 

✔️ Permission Notation

 

🧷 파일유형

가장 먼저, ① 번은 파일 유형을 나타냅니다.

크게 일반 파일, 디렉터리 파일, 특수 파일이 있습니다.

 

 

특수파일은 'ls -l' 만으로는 확인할 수 없습니다. 

'ls -l /dev' 명령어를 사용해서 확인해보실 수 있어요 〰️ 

 

 

 

🧷 Permission notation

그 다음으로 오는 기호들은 사용자 당 rwx 가 있습니다.

순서대로 read, write, execute 입니다. 읽기 권한, 쓰기 권한, 실행권한이죠.

 

만약, 권한이 없다면 -(하이픈)을 사용합니다.

 

-rw-r--r--  1  gngsn  gngsn   289  2020-07-24 03:34 index.md

 

 

이제 위에 있는 권한을 읽을 수 있나요❓ 

일반 파일이고, 소유자는 읽고 쓰는 권한이 있으며 그룹다른 사용자읽기 권한만 있습니다.

 

허가권은 기호로 표현할 수 있지만, 8진수로도 표현할 수 있습니다.

 

 

지금 위에 있는 권한을 8진수로 나타내면 '644'입니다.

숫자로 표현하는 방법은 권한 설정할 때 다시 한 번 언급하겠습니다.

 

여기에서 중요한 건, 같은 rwx 표시지만 파일과 디렉터리 파일 그리고 특수 파일일 때 그 의미가 조금 다르다는 것입니다.

 

 

 

🧷 파일 별 rwx 권한 의미

 

  일반 파일 디렉터리 파일 특수 파일
읽기 (r) 파일 내용 읽기 디렉터리 내 파일 목록 읽기 read() 로 읽기
쓰기 (w) 파일 수정/삭제 디렉터리 내 파일 생성/삭제 기능 write() 로 파일 내용 변경
실행 (x) 파일 실행 cd 명령 사용 가능 의미 없음

 

 

 

지금까지 개념에 대해 알아보았는데요. 

관련된 명령어로 chmod와 umask라는 중요한 명령어에 대해 알아보겠습니다.

 

 

✔️chmod

$ chmod [option] 허가권 파일명

options

-R :  하위 디렉터리를 포함하여 디렉터이 내부의 모든 파일의 그룹 소유권 변경

 

 

파일이나 디렉터리의 접근 허가권을 변경하는 명령어입니다.

권한 변경은 '기호 모드'와 '숫자 모드'가 있습니다.

기호 먼저 알아볼까요 〰️ 

 

🧷 기호 모드 

사용자 u 소유자
g 그룹
o 기타 사용자
a 모든 사용자 (u+g+o)
연산자 + 허가권 부여
- 허가권 제거
= 허가권 지정

 

위의 표만 보고서는 잘 모르시겠죠 🤣

사용 예제를 보면 금방 이해하실거에요!

 

만약, 소유자에게 쓰기 권한을 부여하고 싶다면 아래와 같이 사용해주시면 됩니다.

 

$ chmod u+w 파일명

 

uuser에게 wwrite권한을 +부여하겠다.

라는 의미입니다.

 

 

이 번에는 그룹에게 실행 권한을 제거해 보도록 할게요.

 

$ chmod g-x 파일명

 

이번에는 기타 사용자의 권한을 읽기와 실행만 되도록 만들겠습니다.

 

$ chmod o=rx

 

이제 느낌이 좀 오시나요?

 

 

🧷 숫자 모드

 

이번엔 숫자모드로 알아보도록 할게요.

숫자모드에서는 세 대상의 권한을 한 번에 바꿉니다.

오로지 세 개의 숫자만을 사용해서 적용할 수 있죠.

 

2진수로 보았을 때, 각 자리에 해당하는 권한을 주면 1을 주지 않는다면 0을 주면 됩니다.

 

예를 들어, r-x는 101으로 표현할 수 있고 8진수를 사용하면 5가 됩니다.

그럼 r--는 뭘까요? 100이므로 4로 표현할 수 있겠죠?

rwx는 111인 7로 표현할 수 있고 ---은 000인 0으로 표현할 수 있습니다.

 

그럼 rw-r--r--은 숫자로 어떻게 표현할까요❓ 맞습니다 〰️ 644입니다. 

그럼 적용은 어떻게 시키는지 확인해볼까요❓ 

 

$ chmod 644 파일명

 

위와 같이 표현할 수 있습니다.

 

 

✔️ umask

$ umask [option] [값]

options

-S :  umask의 값을 문자로 표기

 

하나 호기심이 드는 게 있는데요.

그럼, 파일을 만들면 어떤 권한을 디폴트로 가질까요❓ 

 

umask는 생성되는 파일이나 디렉터리의 디폴트 권한을 설정할 수 있는 명령어입니다.

 

파일의 기본 권한은 666, 디렉터리의 기본 권한은 777입니다.

기본 권한과 디폴트 권한은 다릅니다 ❗️ 

기본 권한에 umask를 적용해서 디폴트 권한이 적용됩니다.

만약 umask가 022인 경우에, 파일의 기본 권한은 644(666-022)이고 디렉터리의 기본 권한은 755(777-022)으로 설정되는 것입니다.

재밌지 않나요 〰️ 

 

umask의 기본값은 022입니다❗️ 

따라서, 파일의 디폴트 권한은 644이고 디렉터리의 기본 권한은 755가 됩니다.

 

만약 umask를 변경하게 되면 어떻게 될까요❓ 

그 이후부터 생성되는 파일이나 디렉터리의 권한에 영향을 미치게 되겠죠 ~.~

 

 

 

 

 

그럼 여기까지 소유권과 허가권에 대해 알아보았습니다.

다음에는 특수권한 (setUID, setGID, Sticky bit)와 디스크 쿼터에 대해 알아보겠습니다!