거북이-https://velog.io/@violet_evgadn 이전완료

파일 소유권과 파일 허가 본문

Linux

파일 소유권과 파일 허가

VioletEvgadn 2023. 2. 16. 15:59

파일 소유권

◎ 소유권(Ownership)이란?

Linux는 대표적인 Multi-User OS이다. 이런 환경에서 중요한 것은 특정 파일이 어떤 User(혹은 Group)에 의해 관리되고 있는가이다.

이런 "파일을 소유 및 관리하고 있는 User(Owner) 혹은 Group"을 파일 소유권이라고 한다.

 

파일 소유권은 User와 Group으로 구성되어 있다.

User는 여러 그룹에 동시에 속할 수 있으며 파일 1개는 1개 유저와 1개 Group만 Ownership으로써 가질 수 있다.

 

Root 계정(관리자 계정)은 Super User로써 서버에 존재하는 모든 파일에 대하여 소유권을 가지고 있다.


파일 허가권

◎ 허가권(Permission)이란?

파일 소유권이 파일의 주인을 명시하는 거라면 허가권이란 특정 파일에 대하여 누가 어느 정도의 권한으로 접근할 수 있는지를 나타내는 것이다.

 

파일의 주인인 User와 Group만 지정했던 소유권과는 달리 허가권은 서버 내에 존재하는 모든 User 및 Group들에게 설정되어야 하는 값이므로 "User(Owner), Group, Other(World)" 총 3개로 구성되어 있다.

 

각 보안 그룹에 줄 수 있는 권한은 Read(r), Write(w), Execution(x) 실행 권한이 있다.

Read와 Write는 직관적으로 느낌이 올 것이며 Execution은 "실행" 권한으로 파일이 실행 파일일 경우 특정 User가 그 파일을 실행할 수 있는지 여부에 대한 Permission이다.

 

Root 계정(관리자 계정)은 모든 파일에 대하여 모든 권한(rwx)를 가지고 있다.


File Type & File Permission

◎ 파일 소유권 및 허가권 실제로 확인해보기

"ls -l" 명령어를 통해 파일 및 디렉터리의 File Permission & Ownership을 알 수 있다.

  • -rw-rw-r-- : File Type + File Permission
    • 가장 앞 문자는 File Type을 의미함
    • 실제 File Permission은 "rw-rw-r--"
  • 1 : Link count
    • 이 파일을 링크(Symbolic Link or Hard Link)한 파일의 개수
  • 첫 번째 djlim : Owner
  • 두 번째 djlim : Group

즉 아래와 같은 구조를 가지는  것이다.

[File Type][File Permissions] [Link Count] [Owner] [Group] [Size] [Mtime] [File Name]

 

그렇다면 File Type과 Permission이 어떤 의미를 가지고 있는지 좀 더 자세히 알아보자.

 

◎ File Type

  • d : Directory
  • - : 일반 파일
  • l : Symbolic Link File
  • s : Unix domain Socket
  • p : Named pipe
  • c : Character device file
  • b : Block device file

 

◎ File Permission

출처 : https://danielmiessler.com/study/unixlinux_permissions/

이전에 말했듯 File Permission은 "User(Owner), Group, Other"로 구성되어 있고 각자 Read(r), Write(w), Execute(x) 권한을 가질 수 있다. Linux에선 이 둘을 합쳐 File Permission을 위 사진과 같이 표현한다.

(참고로 Owner과 Group은 파일의 Ownership(소유권)을 기준으로 판단한다. 즉 위 Terminal 사진에서 djjlim 계정이 아닌 다른 계정들은 모두 Other인 것이다)

 

일단 모든 File Permission은 각 필드마다 영문자로 3글자 혹은 숫자 0 ~ 7까지의 값을 가질 수 있다.

영문자는 "r, w, x, -"이고 각 영문자는 "r : 4", "w : 2", "x : 1", "- : 0"의 수와 매칭된다.

rwx가 4,2,1과 매칭되는 이유는 간단한데, 바로 2진법을 생각하면 된다.

이진법으로 "abc"라는 값이 존재할 경우 a는 4, b는 2, c는 1의 값을 가진다.

"rwx" 또한 마찬가지인데, 각 필드에 대한 Permission을 기록할 때 "rwx" 순으로 기록하기 때문에 각각 4, 2, 1 숫자와 매칭되는 것이다.

"-"는 해당 권한을 가지고 있지 않다라는 의미를 가지며 0으로 매칭되는 것이다.

 

예시 몇개를 통해 Permission 기록 방법을 확실히 알아보자.

  • rw-r--r--
    • Owner만 Read + Write 권한을 가지며 나머지는 Read(읽기) 권한을 가짐
    • (r+w) : 4 + 2, r : 2, w : 2 → 622
  • rwx--x---
    • Owner는 파일에 대한 모든 권한을 가지고 있고 Group은 파일에 대한 실행 권한만 가지고 있음
    • (r+w+x) : 4+2+1, x : 1 → 710

 

추가로 파일을  처음 만들었을 떄 Default Permission은 755(rwxr-xr-x)이다.

(r, w, x이외에도 "s"라는 추가값이 존재하기는 하지만 이는 Group과 User에 대해 더욱 자세히 알아야 하므로 나중에 다시 설명하겠다)


Ownership 변경 & Permission 변경

◎ chown

chown [Options] [USER][:GROUP] 파일

위 명령어를 입력할 경우 파일에 대한 Owner는 입력한 User로, 만약 :GROUP을 입력했다면 Group 또한 입력한 group으로 변경될 것이다.

 

추가로 User를 입력하지 않고 :GROUP만 입력할 경우 Owner Group만 변경시킬 수도 있다.

 

Option
  • -R : 현재 디렉토리 및 하위 모든 파일의 Ownership 변경
  • --dereference : Symbolic Link File과 연결된 원본 파일의 Ownership이 변경됨
  • -h : Symbolic Link File의 Ownership이 변경됨

 

◎ chmod

chmod [Option] MODE FILE

chmod는 특이하게 Option 뿐만이 아닌 "MODE"라는 Parameter가 추가적으로 존재한다.

 

Option
  • -R : 현재 디렉토리 및 하위 모든 파일의 Permission 변경

 

MODE

파일에 적용할 Permission을 어떻게 설정할 것인지에 대한 문자열 생성 부분이다.

  • 3자리 숫자 : 8진수(octet) 형식 모드 설정 값
    • 위에서 설명했던 755, 620 등의 숫자를 의미함
  • r : 읽기 권한
  • w : 쓰기 권한
  • x : 실행 권한

 

  • + : Permission 추가
  • - : Permission 제거
  • = : 현재 모드로만 권한 지정

 

  • u : User
  • g : Group
  • o : Other
  • a : all

Mode Parameter는 위에 나온 문자나 기호들을 조합하여 권한을 부여하는 것이다.

 

일단 필자가 가장 많이 활용하는 것은 +755처럼 그냥 원하는 Permission을 8진수 형식으로 바로 주입해주는 것이다.

사용 방식에 따라 "g+x"(파일이 속한 Group에 실행 권한 추가), "a=r"(모든 사용자에게 읽을 수 있는 권한 줌), ug-wx(Owner과 Group에게 Write 및 Execution 권한 뺏음) 처럼 사용할 수도 있을 것이다.

 

◎ umask

Linux에서 umask란 특정 디렉토리에 파일 및 디렉토리를 생성할 경우 권한을 자동으로 설정하기 위한 명령어이다.

umask 명령어를 통해 mask 값을 설정하여 설정한 디렉토리의 하위 파일들에 대한 Default 권한을 설정할 수 있다.

 

사용법은 아래와 같다.

# Umask 값을 문자로 설정
umask u=rwx,g=rw,o=r

# Umask 값을 Octet(8진수)로 설정
umask 022

# Umask 확인(8진수)
umask

# Umask 문자로 확인
umask -S

여기에서 헷갈리지만 무조건 알아야 하는 개념이 있는데 바로 8진법으로 Umask 값을 설정하는 방식이다.

 

일반 파일의 Permission은 최대 666, 디렉터리 파일의 Permission은 최대 777로 되어 있다.

이 떄 "최대 Permission - umask"의 값이 파일의 Default Permission이 되는 것이다.

 

예를 들어 Umask값이 002로 되어 있을 경우 일반 파일을  생성하면 666-002 = 664, 즉 rw-rw-r-x의 Permission을 가질 것이며 디렉토리의 경우 777 - 002 = 775, 즉 rwxrwxr-x의 권한을 가질 것이다.

 

그렇다면 간단하게 사용해보며 자세히 알아보자.

처음에는 umask가 002였다. 따라서 일반파일은 664(rw-rw-r--), 디렉토리는 775(rwxrwxr-x)의 권한을 가지고 생성되었음을 확인할 수 있다.

이후 umask를 022로 바뀐 뒤 새로 생성한 일반파일은 644(rw-r--r--), 디렉토리는 755(rwxr-xr-x)의 권한을 가지고 생성되었음을 알 수 있다.

'Linux' 카테고리의 다른 글

Virtual Network editor(vmnetcfg)  (0) 2023.04.03
사용자와 그룹 관리  (0) 2023.02.16
Redirection & Pipe  (0) 2023.02.15
링크  (0) 2023.02.15
Inode  (0) 2023.02.15
Comments