리눅스

[LINUX] 파일/디렉토리 권한 chmod, chown

노랑파랑 2025. 4. 24. 14:33
반응형

리눅스 시스템을 사용하다 보면 한 번쯤은 'Permission denied'라는 메시지를 보게된다. 파일을 열려고 하거나, 스크립트를 실행하려고 하거나, 특정 디렉토리에 파일을 저장하려고 할 때... 원인은 바로 파악될 수 밖에 없는 파일 또는 디렉토리 권한 문제!

서버에서 권한은 시스템의 보안과 안정성을 유지하는 아주 기본적인 요소이다. 누가 어떤 파일이나 디렉토리에 접근해서 무엇(읽기, 쓰기, 실행)을 할 수 있는지 정의해두는 것. 최근 서버 버전업을 하면서 자주 권한을 변경하게되어 관련해서 정리하게 되었다.

 

파일/디렉토리 권한의 기본 구조 (소유자, 그룹, 기타)

리눅스에서 각 파일 및 디렉토리는 세 가지 **주체(Subject)**에 대한 권한 설정을 가진다.

  1. 소유자 (Owner / User - u): 해당 파일 또는 디렉토리를 처음 생성한 사용자 (또는 소유자가 변경된 사용자).
  2. 그룹 (Group - g): 해당 파일 또는 디렉토리가 속한 그룹의 멤버. 여러 사용자를 하나의 그룹으로 묶어 권한을 관리할 때 유용하게 쓰인다.
  3. 기타 사용자 (Others - o): 해당 파일의 소유자도 아니고, 해당 파일이 속한 그룹의 멤버도 아닌 나머지 모든 사용자.
  4. (참고) 모든 사용자 (All - a) : ugo 전체, 모든 사용자. 기본값

그리고 각 주체에 대해 다음과 같은 세 가지 **권한(Permission)**을 설정할 수 있다. 대부분 서버를 잠깐 만지는 정도라면 이 권한 설정이 대부분 일 것으로 생각된다.

  • 읽기 (Read - r): 파일 내용을 읽거나, 디렉토리 내 파일 목록을 볼 수 있는 권한.
  • 쓰기 (Write - w): 파일 내용을 변경하거나 삭제하고, 디렉토리에 파일을 생성/삭제할 수 있는 권한.
  • 실행 (Execute - x): 파일(스크립트나 프로그램)을 실행하거나, 디렉토리로 이동하여 접근할 수 있는 권한.

 

 

ls -l 명령어로 권한 확인하기

터미널에서 ls -l 명령어를 입력하면 현재 디렉토리의 파일 및 디렉토리 목록과 함께 상세 정보가 표시된다. 여기서 가장 첫 번째 열에 나타나는 10개의 문자가 바로 해당 파일/디렉토리의 권한 정보이다.

-rw-r--r-- 1 user1 groupA 1024  4월 24 10:00 my_file.txt
drwxr-xr-x 2 user1 groupA 4096  4월 24 10:05 my_directory
[파일 타입][소유자 권한][그룹 권한][기타 사용자 권한]
  • 첫 번째 문자: 파일 타입. -는 일반 파일, d는 디렉토리, l은 심볼릭 링크 등을 의미.
  • 두 번째부터 네 번째 문자: 소유자(user)에 대한 rwx 권한을 순서대로 표시. 권한이 있으면 해당 문자가 표시되고, 없으면 -로 표시된다. (예: rw-는 소유자는 읽기/쓰기 권한이 있지만 실행 권한은 없다는 뜻.)
  • 다섯 번째부터 일곱 번째 문자: 그룹(group)에 대한 rwx 권한을 순서대로 표시. (예: r--는 그룹 멤버는 읽기 권한만 있다는 뜻.)
  • 여덟 번째부터 열 번째 문자: 기타 사용자(others)에 대한 rwx 권한을 순서대로 표시. (예: r--는 기타 사용자는 읽기 권한만 있다는 뜻.)

위 예시에서 my_file.txt의 권한 -rw-r--r--는 다음과 같이 해석한다.

  • -: 일반 파일
  • rw-: 소유자(user1)는 읽기, 쓰기 권한 있음 (실행 권한 없음)
  • r--: 그룹(groupA)은 읽기 권한만 있음
  • r--: 기타 사용자(others)는 읽기 권한만 있음

my_directory의 권한 drwxr-xr-x는 다음과 같이 해석한다.

  • d: 디렉토리
  • rwx: 소유자(user1)는 읽기, 쓰기, 실행(디렉토리 접근) 권한 있음
  • r-x: 그룹(groupA)은 읽기, 실행 권한만 있음 (쓰기 권한 없음 - 디렉토리 내 파일 생성/삭제 불가)
  • r-x: 기타 사용자(others)는 읽기, 실행 권한만 있음

rwx 권한의 의미 (파일 vs 디렉토리)

[중요!] 여기서 많이 헷갈리는 부분은 x (실행) 권한과 w (쓰기) 권한이 파일과 디렉토리에서 다르게 해석된다는 점이다.

권한 파일에서의 의미 디렉토리에서의 의미
r 파일 내용 읽기 디렉토리 내 파일 및 하위 디렉토리 목록 확인
w 파일 내용 변경, 파일 삭제 디렉토리 내 파일/하위 디렉토리 생성 및 삭제
x 실행 가능한 파일일 경우 실행 해당 디렉토리로 이동 가능, 디렉토리 내 파일 접근 가능

특히 디렉토리에서 r 권한만 있으면 그 안에 어떤 파일/디렉토리가 있는지 목록만 볼 수 있고, x 권한이 있어야만 그 디렉토리 안으로 이동하거나 안에 있는 파일에 접근할 수 있다. w 권한은 그 디렉토리 안의 내용을 변경(파일 생성/삭제)할 수 있게 해준다.

 

 

chmod 명령어로 권한 변경하기

chmod 명령어는 파일 또는 디렉토리의 권한을 변경할 때 사용한다. 권한을 변경하는 방법은 크게 심볼릭 모드8진수(숫자) 모드 두 가지가 있다. 둘 다 같은 결과를 얻을 수 있지만, 상황/개인에 따라 더 편리한 모드를 선택하여 사용하면 된다.

* 특정 권한 조합을 한 번에 설정할 때는 8진수 모드가 간편하고, 기존 권한에 특정 권한만 추가/제거할 때는 심볼릭 모드가 편리.

 

심볼릭 모드 (Symbolic Mode)

권한 대상을 지정하는 문자(u, g, o, a)와 권한을 추가(+), 제거(-), 설정(=)하는 연산자를 조합하여 사용한다.

chmod [대상][연산자][권한] 파일/디렉토리

 

  • 대상: u (user), g (group), o (others), a (all - ugo 전체, 기본값)
  • 연산자: + (권한 추가), - (권한 제거), = (해당 권한으로 설정하고 나머지는 모두 제거)
  • 권한: r (읽기), w (쓰기), x (실행)

 

예시

# chmod u+x script.sh 파일의 소유자에게 실행 권한을 추가.
-rw-r--r-- 1 user1 groupA 500  4월 24 10:10 script.sh
$ chmod u+x script.sh
-rwx-r--r-- 1 user1 groupA 500  4월 24 10:10 script.sh

# chmod go-w my_file.txt 파일의 그룹과 기타 사용자에게서 쓰기 권한을 제거.
-rw-rw-r-- 1 user1 groupA 1024  4월 24 10:00 my_file.txt
$ chmod go-w my_file.txt
-rw-r--r-- 1 user1 groupA 1024  4월 24 10:00 my_file.txt

# chmod a=rw file.txt: file.txt 
# 파일의 소유자, 그룹, 기타 사용자 모두에게 읽기, 쓰기 권한으로 설정하고
# 다른 권한(실행)은 모두 제거. (chmod =rw file.txt와 같이 'a'를 생략하고 사용하기도 한다.)
-rwxr-xr-x 1 user1 groupA 200  4월 24 10:15 file.txt
$ chmod a=rw file.txt
-rw-rw-rw- 1 user1 groupA 200  4월 24 10:15 file.txt

 

8진수 모드 (Octal Mode)

각 권한(r, w, x)에 숫자를 부여하고, 소유자/그룹/기타 사용자의 권한을 각각 3자리 숫자로 표현하는 방식.

  • r (읽기) = 4
  • w (쓰기) = 2
  • x (실행) = 1
  • 권한 없음 = 0

각 주체(소유자, 그룹, 기타)의 권한 숫자를 더해서 해당 주체의 권한 코드를 만들어서 사용한다.

권한 8진수 설명
--- 0 권한 없음
--x 1 실행 권한만
-w- 2 쓰기 권한만
-wx 3 쓰기, 실행 권한
r-- 4 읽기 권한만
r-x 5 읽기, 실행 권한
rw- 6 읽기, 쓰기 권한
rwx 7
읽기, 쓰기, 실행 권한
chmod [세 자리 숫자] 파일/디렉토리
# chmod 755 script.sh: 소유자는 rwx(7), 그룹은 r-x(5), 기타 사용자는 r-x(5)으로 설정. 
# 스크립트 파일에 가장 흔하게 부여하는 권한.
-rw-r--r-- 1 user1 groupA 500  4월 24 10:10 script.sh
$ chmod 755 script.sh
-rwxr-xr-x 1 user1 groupA 500  4월 24 10:10 script.sh

# chmod 644 my_file.txt: 소유자는 rw-(6), 그룹은 r--(4), 기타 사용자는 r--(4) 권한으로 설정.
# 일반적인 데이터 파일에 가장 흔하게 부여하는 권한.
-rw-rw-r-- 1 user1 groupA 1024  4월 24 10:00 my_file.txt
$ chmod 644 my_file.txt
-rw-r--r-- 1 user1 groupA 1024  4월 24 10:00 my_file.txt

# chmod 700 confidential_directory: 소유자는 rwx(7), 그룹과 기타 사용자는 아무 권한 없음(0)으로 설정.
# 소유자 외에는 접근을 완전히 차단하는 경우에 사용.

 

-R 옵션: 하위 파일/디렉토리까지 한 번에 변경

디렉토리의 권한을 변경할 때, 그 안에 있는 모든 하위 파일과 디렉토리의 권한까지 동일하게 변경하고 싶다면 chmod 명령어에 -R 옵션을 추가.

chmod -R 755 my_directory

 

 

chown과 chgrp 명령어로 소유자/그룹 변경하기

chown 명령어는 파일 또는 디렉토리의 소유자를 변경할 때 사용.

chgrp 명령어는 그룹을 변경할 때 사용.

일반적으로 소유자만 변경할 때는 chown을, 그룹만 변경할 때는 chgrp를 사용하는 것으로 보이지만, chown 명령어로 소유자와 그룹을 동시에 변경할 수도 있다.

* chmod와 마찬가지로 chown, chgrp 명령어에도 -R 옵션을 붙이면 하위 파일/디렉토리까지 재귀적으로 소유자/그룹을 변경할 수 있다.
chown [새 소유자] 파일/디렉토리
chown [새 소유자]:[새 그룹] 파일/디렉토리 # 소유자와 그룹 동시에 변경
chgrp [새 그룹] 파일/디렉토리
# chown user2 my_file.txt: my_file.txt 파일의 소유자를 user2로 변경
-rw-r--r-- 1 user1 groupA 1024  4월 24 10:00 my_file.txt
$ chown user2 my_file.txt
-rw-r--r-- 1 user2 groupA 1024  4월 24 10:00 my_file.txt


# chown user3:groupB my_directory
# my_directory 디렉토리의 소유자를 user3으로, 그룹을 groupB로 동시에 변경
drwxr-xr-x 2 user1 groupA 4096  4월 24 10:05 my_directory
$ chown user3:groupB my_directory
drwxr-xr-x 2 user3 groupB 4096  4월 24 10:05 my_directory


# chgrp groupC file.txt: file.txt 파일의 그룹을 groupC로 변경
반응형

'리눅스' 카테고리의 다른 글

[LINUX] 로그 검색하기, 단어 검색  (0) 2024.06.19
[LINUX] 심볼릭 링크 생성, 삭제, 수정  (1) 2023.10.11