일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 방화벽
- Collection
- 캐시서버
- sonarQube
- Jenkins
- map
- JPA
- jdk
- IntelliJ
- 라우터
- 액세스회선
- LAN어댑터
- Spring
- tomcat
- AOP
- cloud
- mybatis
- DevOps
- Java
- 소켓
- gradle
- 허브
- Linux
- Pipeline
- STREAM
- ansible
- container
- post
- docker
- Set
- Today
- Total
거북이-https://velog.io/@violet_evgadn 이전완료
파일 소유권과 파일 허가 본문
파일 소유권
◎ 소유권(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
이전에 말했듯 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 |