파일 소유권과 파일 허가

Violet_Evgadn·2023년 4월 26일
0

Linux

목록 보기
14/34

파일 소유권

소유권(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)의 권한을 가지고 생성되었음을 알 수 있다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글