ITStudy/Linux

Linux 파일과 디렉토리의 허가권 및 소유권

Todays Goal 2021. 2. 12. 20:00
728x90
반응형

이번 포스트에는 Linux 파일과 디렉토리 구조와 소유권 및 허가권에 대해서 알아보도록 하겠습니다.

 

아래와 같은 내용을 알아보도록 하겠습니다.

01 파일과 디렉토리의 구조와 형태

02 허가권 및 소유권 : chmod. chown, chgrp

03 기본 소유권한 : umask

 

우선 파일과 디렉토리의 구조를 살펴보도록하겠습니다.

 

1.1. Linux 파일의 구조 : 파일 유형+파일의 허가권 / 링크 수 / 소유자 / 그룹 / 크기 / 날짜 / 시간 / 파일명으로 구성됩니다. 

 

 

[그림 1] Linux 파일 구조

 

1.2. 파일 유형 : ls -l 명령어를 통해 파일의 리스트를 확인할 시 가장 앞에 붙은 문자는 파일의 유형을 의미합니다.

 

Linux 파일 유형

 

 

1.3. 파일허가 : 리눅스의 파일허가는 3개씩 끊어서 읽으면 됩니다. 파일에 따른 사용자 별로 나뉘어집니다. 개별 권한은 문자, 8진수, 2진수 모두 필수적으로 알고 있어야 합니다.

각 자리마다 2^2, 2^1, 2^0의 값으로 이를 모두 더하면 8진수의 값 7의 값이 되어, 각 사용자별 최대 권한은 7을 부여할 수 있습니다. 가령 특정 파일의 소유자나 그룹의 사용자가 아닌 그 외의 사용자들에게 Read 권한만 부여했다면 해당 권한은 r--로 표시되며 8진수로 4로 표현할 수 있습니다.

 

Linux 파일 허가권

 

 

 

이제 개별 파일과 디렉토리에 허가권과 소유권을 부여하는 방법에 대해서 알아보도록 하겠습니다.

 

테스트 예제를 위해 user A와 B와 텍스트 파일 HelloGoal.txt, 디렉토리 Todays를 생성해 보도록 하겠습니다.

[root@ ~]# useradd A     // user A 생성
[root@ ~]# useradd -G A B     // user B 생성 및 그룹 A에 할당

[root@ ~]# tail -2 /etc/passwd     // tail -2 문서의 끝 두줄을 출력
A:x:1000:1000::/home/A:/bin/bash
B:x:1001:1001::/home/B:/bin/bash

[root@ ~]# tail -2 /etc/group     // User B의 그룹 A 할당 확인
A:x:1000:B
B:x:1001:

[root@ ~]# su - A     // User A 접속
[A@ ~]$ whoami     // 사용자 확인
A
[A@ ~]$ echo "Hello TodaysGoal Linux" > Hello.Goal.txt     // 텍스트 리다이렉트하여 "HelloGoal.txt"생성
[A@ ~]$ cat Heool.Goal.txt
Hello TodyasGoal Linux

[A@ ~]$ chmod 750 /home/A     // 예제를 위해 user A의 홈디렉토리에 A그룹user가 접근할 수 있도록 권한 부여
[A@ ~]$ ls -l /home
drwxr-x---. 3 A A 118  2월 12 20:03 A
drwx------. 2 B B  62  2월 12 20:05 B
[A@ ~]$ mkdir Todays     // "Todays" 디렉토리 생성
[A@ ~]$ ls -l 
-rw-rw-r--. 1 A A 23 월 12 19:57 HelloGoal.txt
drwxrwxr-x. 2 A A  6  2월 12 19:59 Todays

 

2.1. chmod : 소유자가 파일 및 디렉토리의 허가 권한을 설정할 수 있습니다.  사용자별로 8진수로 권한을 주는 방식을 통해 가장 간단하게 허가권을 설정할 수 있습니다. 8진수는 1.3. 파일허가를 참고하시면 됩니다. 추가적으로 문자를 통한 심볼릭 방법이 있습니다.

ex) 숫자: chmod 775 test: test파일에 소유자 및 그룹은 Read, Write, eXcute 권한, 그외 사용자들은 Read, eXcute권한부여.  Apache 설정으로 많이 사용합니다.

문자: chmod u+x: user에게 eXcute 권한을 부여 / chmod g-x: 그룹의 Write 권한을 삭제 / chmod a-r: 그외 사용자에게 Read 권한 부여 / chmod a+rw: 사용자별로 Read, Wirte 권한을 부여합니다.

HelloGoal.txt[A@ ~]$ ls -l /home     // user A의 홈디렉토리는 그룹 A user들이 실행 및 읽기가 가능합니다.
drwxr-x---. 3 A A 118  2월 12 20:03 A
drwx------. 2 B B  62  2월 12 20:05 B

[A@ ~]$ chmod 640 HelloGoal.txt     // 그룹 user가 "HelloGoal.txt" 파일을 변조할수 없도록 Read 권한만 부여합니다.
[A@ ~]$ ls -l
-rw-------. 1 A A 23 월 12 19:57 HelloGoal.txt
drwxrwxr-x. 2 A A  6  2월 12 19:59 Todays

[B@ ~] vi /home/A/HelloGoal.txt     // :wq 시 E45: 'readonly' option is set을 확인할 수 있습니다.

[A@localhost ~]$ chmod 700 HelloGoal.txt     // user A만 Read, Wirte, eXcute 할 수 있는 디렉토리 권한을 부여합니다.
-rw-r-----. 1 A A 23 월 12 19:57 HelloGoal.txt
drw------. 2 A A  6  2월 12 19:59 Todays


[B@ ~]$ cd /home/A/Todays
-bash: cd: /home/A/Todays/: 허가 거부

 

2.2. chown/chgrp : 슈퍼유저가 파일 및 디렉토리의 소유권 및 그룹 권한을 변경할 수 있습니다.

chown은 소유권 및 그룹권한 모두를 변경할 수 있으며, chgrp 그룹 권한만 변경할 수있습니다. 

[A@ ~] $ chown B HelloGoal.txt
chown: changing ownership of 'HelloGoal.txt': 명령을 허용하지 않음
[A@ ~] $ chgrp B HelloGoal.txt
chgrp: changing group of 'HelloGoal.txt': 명령을 허용하지 않음

[A@ ~] $ su - root
암호 :
[root@ ~] # chown B helloGoal.txt | ls -l // user B에 소유권을 부여합니다.
-rw-r-----. 1 B A 25 212 20:05 HelloGoal.txt
drwx------. 2 A A 20 212 23:38 Todays

[root@ ~] # chown A:B helloGoal.txt | ls -l // user A, group B의 소유권 및 그룹권을 부여합니다. ":"man chown에 명시된 구분자입니다.
-rw-r-----. 1 A B 25 212 20:05 HelloGoal.txt
drwx------. 2 A A 20 212 23:38 Todays

[root@ ~] # chown A.A helloGoal.txt | ls -l // "."":"처럼 동작하는 걸 볼 수 있습니다.
-rw-r-----. 1 A A 25 212 20:05 HelloGoal.txt
drwx------. 2 A A 20 212 23:38 Todays

[root@ ~] # chgrp B helloGoal.txt | ls -l // group B로 그룹권을 부여합니다.
-rw-r-----. 1 A B 25 212 20:05 HelloGoal.txt
drwx------. 2 A A 20 212 23:38 Todays

 

다음으로는 기본 소유권한을 부여하는 방법에 대해서 알아보도록 하겠습니다.

문서를 만들 때마다 개별 권한을 부여하는 일은 굉장히 귀찮고 어려운 일입니다. 따라서 해당 user가 만드는 파일의 기본권한을 설정하는 방법을 살펴보겠습니다.

 

3. umask : user의 기본 권한을 부여합니다.

user의 기본 umask는 0002로 형성됩니다. 해당 사항을 확인하기 위해서 -S 옵션을 사용하면 문자로 내용을 확인할 수 있습니다. umask의 적용은 간단하게 계산해볼 수 있습니다. umask를 활용한 권한은 뒤의 세자리와 일반파일의 생성권한은 실행권한이 없기 때문에 666, 디렉토리의 생성권한은 777이 기준으로 계산합니다. 

기준 - umask

ex3_1) 일반파일 기준 666 - umask 0002 = 권한 664 = -rw-rw-r--입니다.

그렇다면 기준보다 umask 값이 큰 권한의 값은 출력이 어떻게 될수 있을까요?

ex3_2) 일반파일 기준 666 - umask 0077= 권한 600 = -rw-------입니다.

[A@ ~] $ umask // user A의 기본 권한을 확인할 수 있습니다.
0002
[A@ ~] $ umask -S // user A의 기본 권한을 심볼릭 형태로 확인할 수 있습니다.
u=rwx,g=rwx,o=rx
[A@ ~] $ touch /home/A/ownA // user A의 기본 권한 확인을 위한 ownA 파일 생성
[A@ ~]su - root
암호:
[root@ ~] # umask // root의 기본 권한을 확인할 수 있습니다.
0022
[root@ ~] # umask -S // root의 기본 권한을 심볼릭 형태로 확인할 수 있습니다.
u=rwx,g=rx,o=rx
[root@ ~] # touch /home/A/ownR // user A의 기본 권한 확인을 위한 ownR 파일 생성
[root@ ~] # ls -l
-rw-r-----. 1 A A 25 212 20:05 HelloGoal.txt
drwx------. 2 A A 20 212 23:38 Todays
-rw-rw-r--. 1 A A 0 213 10:19 ownA
-rw-r--r--. 1 root root 0 213 10:17 ownR
exit

[A@ ~] $ umask 0077 // user A
umask 권한을 0077로 부여합니다.
[A@ ~] $ umask
0077
[A@ ~] $ touch /home/A/ownA2

[A@ ~]$ ls -l
합계 4
-rw-r-----. 1 A A 25 212 20:05 HelloGoal.txt
drwx------. 2 A A 20 212 23:38 Todays
-rw-rw-r--. 1 A A 0 213 10:19 ownA
-rw-------. 1 A A 0 213 13:03 ownA2
-rw-r--r--. 1 root root 0 213 10:17 ownR

 

이상 Linux 파일과 디렉토리 구조와 소유권 및 허가권에 대해서 알아봤습니다. 감사합니다.

728x90
반응형