소유권과 권한

Chooooo·2025년 2월 8일
0

리눅스 정리

목록 보기
5/10

파일 소유권

리눅스에서 파일이 생성되면 루트 디렉토리 아래 어딘가에 존재한다. 그런데 리눅스는 여러 사용자의 수많은 파일이 루트 디렉토리에서 시작된 하나의 트리 안에 혼재돼 있다. 파일의 위치나 디렉토리 이름 같은 정보로는 파일 소유자를 판단할 수 없다. 그래서 리눅스의 모든 파일에는 소유권이 설정돼 있다.

파일 소유권이란

파일이 생성되는 순간, 파일을 생성한 사용자와 그룹이 소유권을 가지도록 설정된다. 내 파일도 있지만, 우리 파일도 있다는 뜻.

  • 물론 소유권은 변경할 수 있다.

파일 소유권 변경하기

정확히는 파일의 소유자와 소유 그룹을 변경할 수 있다. 파일의 소유권은 chown 명렁어로 변경한다.
기본 형식 : chown [옵션] 사용자[:그룹] 파일

왜 리눅스 시스템은 파일마다 소유권을 설정하게 했을까 ? -> 이는 파일의 소유 여부에 따라 파일 권한을 다르게 설정할 수 있기 때문.

파일 권한

리눅스의 파일 권한은 읽기(r), 쓰기(w), 실행(w) 세 가지로 구성된다. 이러한 권한은 파일 소유자, 그룹, 기타 사용자별로 각각 다르게 설정할 수 있다.

권한의 종류

권한설명
읽기 권한(r)파일의 내용을 읽을 수 있는 권한
쓰기 권한(w)파일의 내용을 수정할 수 있는 권한
실행 권한(x)파일을 실행할 수 있는 권한
하이픈(-)해당 권한이 없음을 나타냄

파일마다 권한을 조합해 설정할 수 있다. 한 파일에 설정한 권한을 모든 사용자에게 동일하게 적용한다면 멀티 유저 시스템인 리눅스에서는 여러 보안 문제가 발생할 수 있다. 그래서 리눅스에서는 파일 권한을 파일의 소유자(user), 소유 그룹(group), 일반 사용자(other) 별로 따로 설정한다.

파일 권한은 ls -l 명령어를 사용하면 파일의 상세 정보와 함께 권한을 확인할 수 있다.

-rwxr-xr-- 1 user group 4096 Feb 8 10:00 file.txt

첫 번째 문자는 파일의 유형을 나타낸다. 일반 파일은 하이픈(-)으로 디렉토리는 d로 표시된다. 위와 같은 경우 일반 파일이라 첫 글자 -처리, 이후 나오는 9개의 문자는 세 그룹으로 나뉘어 각각의 권한을 나타낸다.

파일 권한은 3글자로 구성되며, 권한이 있으면 해당하는 영문자를 표시하고, 권한이 없으면 하이픈(-)으로 표시한다. 순서대로 3글자씩 각각 소유자/소유그룹/일반 사용자의 권한이다.

  • 여기서 일반 사용자는 소유자와 소유 그룹에 속하지 않는 사용자를 말한다.

첫 번째 그룹(rwx) : 파일 소유자의 권한을 나타낸다. 위 예시에서 소유자는 읽기(r), 쓰기(w), 실행(x) 모든 권한을 가지고 있다.

두 번째 그룹(r-x): 소유 그룹의 권한을 나타낸다. 예시에서는 읽기(r)와 실행(x) 권한만 있고, 쓰기 권한은 없음(-)을 보여준다.

세 번째 그룹(r--): 기타 사용자의 권한을 나타냄. 이는 소유자나 소유 그룹에 속하지 않은 모든 사용자를 의미하는데, 예시에서는 읽기(r) 권한만 있고, 쓰기와 실행 권한은 없다.

파일 권한 변경하기

chmod(change mode) 명령어로 변경할 수 있다. chmod 명령어는 파일이나 디렉토리의 접근 권한을 변경하는 데 사용
기본형식 : chmod [옵션] 권한 파일

권한 변경 방식은 크게 두 가지로 나눌 수 있다.

문자 모드를 사용한 권한 변경

문자 모드는 권한을 변경할 대상과 변경할 권한을 문자로 지정하는 것. 기본 구조는
chmod 대상자(u,g,o,a) 변경연산자(+,-,=) 권한(r,w,x) 파일명

대상자 의미

  • u : 사용자(user)
  • g : 그룹(group)
  • o : 기타 사용자(others)
  • a : 모든 사용자(all)

변경 연산자 의미

    • : 권한 추가
    • : 권한 제거
  • = : 권한 지정

숫자 모드를 사용한 권한 변경

숫자 모드는 8진수를 사용하여 권한을 한 번에 지정한다. 각 권한에 해당하는 숫자는

  • 4 : 읽기 권한(r)
  • 2 : 쓰기 권한(w)
  • 1 : 실행 권한(x)

이러한 숫자들을 조합하여 원하는 권한을 설정할 수 있다. 예를 들어

  • 755: 소유자는 모든 권한, 그룹과 기타는 읽기와 실행 권한
  • 644: 소유자는 읽기와 쓰기 권한, 그룹과 기타는 읽기 권한만
  • 777: 모든 사용자에게 모든 권한 부여 (보안상 권장하지 않음)
  • 600: 소유자만 읽기와 쓰기 가능, 다른 사용자는 접근 불가

chmod 명령어의 주요 옵션들

옵션설명
-R(--recursive)디렉토리 내의 모든 하위 파일과 디렉토리에 대해 권한 변경을 적용
-v(--verbose)실행되는 모든 파일에 대해 진행 상황 출력. 권한이 변경되는 파일들을 확인하고 있을 때 사용
-c(--changes)실제로 변경된 파일에 대해서만 결과 출력

실제 사용 예시

chmod 755 file.txt : 소유자에게 모든 권한(7), 그룹과 기타 사용자에게 읽기,쓰기 부여(5)
chmod 644 file.txt : 소유자에게 읽기,쓰기(6), 그룹과 기타 사용자에게 읽기 권한만

파일 권한 변경에 있어 일반적으로 숫자 모드를 사용하는 것이 베스트 프랙티스이다.

또한 일반적인 워크플로우는
1. 현재 권한 확인
현재 설정된 권한을 확인하는 가장 기본적인 방법은 ls -l -> 파일의 상세 정보와 함께 현재 권한을 보여준다. 또는 특정 파일만 확인하고 싶다면 stat 명령어를 사용할 수 있다.

$ ls -l file.txt
-rw-r--r-- 1 user group 4096 Feb 8 10:00 file.txt

$ stat file.txt
  File: file.txt
  Size: 4096      	Blocks: 8          IO Block: 4096   regular file
Access: (0644/-rw-r--r--)  Uid: ( 1000/   user)   Gid: ( 1000/   group)
...
  1. 원하는 권한으로 변경
chmod 755 file.txt

디렉토리 권한

위 예시에서는 파일을 읽고,쓰고,실행할 수 있는 파일 권한을 공부했음. 그 동안 ls 명령어를 실행하는 과정을 유심히 봤다면 디렉토리에도 권한이 부여된 것을 알 수 있다. 디렉토리에서 읽기,쓰기,실행 권한은 어떤 의미인가 ? 해당 권한이 있으면 어떤 일을 할 수 있는가 ?

디렉토리 권한이란

디렉토리 권한은 일반 파일의 권한과는 의미가 조금 다름.
디렉토리의 읽기 권한은 해당 디렉토리에 있는 파일 목록을 읽을 수 있는 권한이다. 실행 권한은 해당 디렉토리에 들어가 디렉토리 안에 있는 파일에 접근할 수 있는 권한이다.쓰기 권한은 그 자체만으로는 의미 없고, 실행 권한이 있어야 의미가 있다. 실행 권한과 쓰기 권한이 있으면 해당 디렉토리 안에서 파일 생성, 삭제, 파일 이름 바꾸기 등 변경 작업을 할 수 있다.

  • 실행 권한은 있고, 쓰기 권한이 없으면 파일 변경 작업이 불가능
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글