Programming/Linux

Linux 리눅스 파일 권한에 대한 이해와 권한 변경(chmod)

Jan92 2021. 12. 9. 00:23

Linux

 

'다중  사용자 운영체제에서 권한이 필요한 이유'

 

주로 개인이 일반적으로 사용하는 '단일 사용자 운영체제'(Single-User Operation System, 대표적으로 Windows)와는 다르게 여러 사용자들에게 서비스를 제공해주는 서버에는 '다중 사용자 운영체제'(Multi-User Operation System)가 사용됩니다.

다중 사용자 운영체제의 대표적인 것이 유닉스(Unix) 운영체제와 유닉스에서 파생된 리눅스(Linux) 운영체제이며, 다중 사용자 운영제체는 여러 클라이언트 컴퓨터에서 하나의 서버 컴퓨터에 접속을 하는데 사용되기 때문에 파일 및 디렉터리의 접근 권한을 클라이언트 계정별로 엄격하게 관리되어야 한다는 특징이 있습니다.

 

* 리눅스에서 디렉토리는 그 디렉터리가 포함하는 파일과 하위 디렉터리 정보를 저장하는 하나의 파일로 취급되기 때문에 디렉터리도 파일의 한 종류입니다. 추가로 macOS 역시 유닉스 계열의 운영체제이므로 리눅스와 동일한 파일 권한을 사용합니다.

 

 


 

ls -l

'파일 권한 이해하기'

 

리눅스 명령어 'ls' 는 list segments라는 뜻으로 디렉터리 목록을 확인하는 명령어입니다. 'ls' 명령어에 '-l' 옵션을 통해 현재 위치에 있는 전체 파일들을 자세하게 볼 수 있습니다.

('-al' 옵션의 경우 숨겨진 파일까지 모두 보여줍니다.)

 

 

맨 앞 10자리가 파일 타입 및 권한 정보를 가진 코드

(링크수는 쉽게 윈도우의 '바로가기'이며, 소유 그룹은 특별한 변경이 없을 경우 소유자가 속한 그룹이 소유 그룹으로 지정됩니다.)

 

 

'ls' 명령어로 파일들을 자세하게 봤을 때 맨 앞에 'drwxr-xr-x', '-rw-r--r--'와 같은 문자들이 있습니다.

이 부분이 바로 파일 권한 정보를 가지고 있는 부분입니다. 파일 타입(file type)과 권한 정보(permission)를 나타내며 총 10자리로 이루어져 있습니다.

 

먼저 맨 앞의 문자 1자리가 바로 파일 타입(file type)을 나타내는데요.

 

-  :  일반 파일이라는 표시입니다. (regular file)

d  :  폴더 / 디렉터리라는 표시입니다. (directory)

l  :  심볼릭 링크라는 표시입니다. (symbolic link)

 

외에 b(블록 타입 특수 파일), c(문자 타입 특수 파일), p(파이프), s(소켓)가 있습니다.

 

 

그리고 파일 타입 다음의 9자리가 바로 '권한(permission)'을 나타내는 부분입니다. 9자리의 권한은 3자리씩 3 부분으로 나뉘게 되는데요.

 

- 맨 앞의 3자리는 파일 소유자에 대한 권한을 나타냅니다.

- 중간의 3자리는 파일 소유자의 그룹에 대한 권한을 나타냅니다.

- 마지막의 3자리는 시스템의 다른 사용자에 대한 권한(소유자 외 유저들의 권한)을 나타냅니다.

 

drwxr-xr-x
// 'd' + 'rwx' + 'r-x' + 'r-x'

를 예로 들었을 때 맨 앞의 'd'는 파일의 타입인 디렉터리를 나타내고, 다음의 'rwx'는 파일 소유자의 권한, 다음 'r-x'는 파일 소유자의 그룹에 대한 권한, 마지막 'r-x'는 시스템의 다른 사용자에 대한 권한을 나타내는 것입니다.

 

 

그렇다면 여기서 r, w, x는 무엇을 나타내는 것일까요?

 

r  :  읽기(read)로 파일을 읽을 수 있는 권한입니다.

w  : 쓰기(write)로 파일을 쓰거나, 수정하거나, 지울 수 있는 권한입니다.

x  : 실행(execute)으로 파일을 실행할 수 있는 권한입니다.

 

이 내용을 위의 3자리의 권한으로 정리했을 때 아래와 같습니다.

 

--- 권한 없음

--x 실행 전용 권한

-w- 쓰기 전용 권한

-wx 쓰기 및 실행 권한

r-- 읽기 권한

r-x 읽기 및 실행 권한

rw- 읽기 및 쓰기 권한

rwx 읽기, 쓰기 및 실행 권한

 

 

 

'파일 권한 변경하기(chmod)'

 

다중 사용자 운영체제(Multi-User Operation System)의 특성상 파일 및 디렉터리의 접근 권한이 클라이언트 계정별로 관리되어야 한다고 했는데요. 권한의 변경이 필요한 경우에는 'chmod'(change mode) 명령어를 사용하여 변경합니다.

 

chmod [변경하고자 하는 권한 값] [파일 혹은 디렉토리]

chmod [옵션] [사용자][설정기호][권한] [파일 혹은 디렉토리]

권한을 변경하는 'chmod' 명령어의 사용법에는 크게 두 가지가 있습니다.

 

1. 첫 번째로 기호를 통해 권한을 변경하는 방법입니다.

먼저 살펴볼 부분은 r, w, x는 위에서 본 것처럼 각 읽기, 쓰기, 실행을 나타내며 아래 추가적으로 필요한 기호가 있습니다.

 

+  :  권한 추가

-  : 권한 제거

=  :  권한 부여

 

u  : user의 약자, 소유자

g  : group의 약자, 소유 그룹

o  : other의 약자, 일반 사용자

a  :  all의 약자, 모든 사용자

(만약 문자가 없으면 'a'와 동일하게 적용됩니다.)

 

chmod a+x test.txt
// 모든 사용자(a = all)에게 실행 권한(x)를 추가(+)합니다.

chmod g-w test.txt
// 소유 그룹(g = group)에게 쓰기 권한(w)를 제거(-)합니다.

chmod u=rw test.txt
// 소유자(u = user)에게 읽기(r), 쓰기(w) 권한을 부여합니다.

chmod u-x,g+w,o+w test.txt
// 소유자에게 실행 권한을 제거하고, 그룹에게 쓰기 권한을 추가하고, 나머지 사용자에게 쓰기 권한을 부여합니다.

위 방법을 사용해서 다음 예시들과 같이 권한 설정을 변경할 수 있으며, 마지막처럼 콤마( , )를 통해 단일 대상이 아닌 여러 대상에게도 권한을 적용할 수 있습니다.

 

 

 

2. 두 번째 방법인 숫자를 통해 권한을 변경하는 방법입니다.

r, w, x는 각 권한마다 부여된 고유의 숫자가 존재합니다. r = 4, w = 2, x = 1인데요.

앞에서 봤던 것처럼 권한은 총 9자리로 되어있고, 2-4 / 5-7 / 8-10 이렇게 3자리씩 3 부분으로 나눠져 있었습니다.

 

해당 방법은 하나의 그룹을 대표하는 숫자를 통해서 권한을 부여할 것이며, 각 그룹을 대표하는 숫자는 r, w, x 권한 여부를 모두 더한 값을 나타냅니다.

(r + w = 6,  r + x = 5,  w + x = 3)

 

chmod 777 test.txt
// user, group, other에 대한 모든 권한을 추가합니다.

chmod 743 test.txt
// user에게는 모든 권한이 허용되고, group에게는 읽기 권한(r=4), other에게는 실행 권한(x=3)과 쓰기 권한(w=2)를 줍니다.

chmod -R 700 project
// -R 옵션을 사용하면 하위 디렉토리와 그 안의 파일 권한까지 모두 변경할 수 있습니다.
// project 디렉토리 하위에 위치한 모든 파일 및 디렉토리에 user의 읽기, 쓰기, 실행 권한만 주고 나머지 권한은 다 제거합니다.

예시로 본 것처럼 해당하는 그룹(user, group, other)에 부여하고 싶은 권한의 고유 숫자 값을 모두 더한 값을 주는 방법입니다.

'-R' 옵션을 사용하면 하위 디렉터리와 그 안의 파일 권한까지 모두 변경할 수 있습니다.

 

 

 

'파일 소유자 변경하기'

 

chown [변경할 소유자] [변경할 파일]

마지막으로 파일의 소유자 변경입니다.

파일 소유자 변경은 'chown' 명령어를 통해 할 수 있고, [변경할 소유자] 부분에 ". 그룹 이름" 형식을 사용한다면 소유자뿐만 아니라 소유 그룹도 변경할 수 있습니다.

 

 

 

 

< 참고 자료 >

 

리눅스에는 파일 권한이 왜 있고, 권한 조회는 어떻게 하는가? 그리고 파일을 실행한다는 것은

주로 개인이 사용하는 윈도우즈 운영체제와는 다르게 여러 사용자들에게 서비스를 제공해주는 서버에는 다중 사용자 운영체제(Multi-User Operating System)가 사용되는데 대표적인 것이 유닉스 운영

dogleg.co.kr