최재영의 개발 일지
GitHubLinkedIn

리눅스 파일 권한

Linux1분 읽기

권한의 기본 구조

리눅스는 다중 사용자 시스템으로 설계되었기 때문에 파일 권한 시스템이 매우 중요하다.

리눅스의 파일 권한은 세 가지 종류가 있다.

  1. 소유자(User): 파일을 생성한 사용자
  2. 그룹(Group): 파일에 연결된 사용자 그룹
  3. 기타(Others): 소유자나 그룹에 속하지 않은 다른 모든 사용자

그리고 각 종류는 세 가지 기본 권한을 가질 수 있다.

  1. 읽기(Read, r): 파일 내용을 읽거나, 디렉토리 내용을 볼 수 있다.
  2. 쓰기(Write, w): 파일 내용을 수정하거나, 디렉토리에 파일을 생성/삭제할 수 있다.
  3. 실행(Execute, x): 파일을 실행하거나, 디렉토리에 접근할 수 있다.

파일 권한

  • r: 파일의 내용을 읽고 복사할 수 있다
  • w: 파일의 내용을 수정하고 저장할 수 있다 (파일 삭제는 디렉토리 권한에 따라 결정된다)
  • x: 파일을 프로그램이나 스크립트로 실행할 수 있다

디렉토리의 권한

  • r: 디렉토리 내 파일 목록을 볼 수 있다 (ls 사용 가능, cd 사용 불가)
  • w: 디렉토리 내에 파일을 생성, 이름 변경, 삭제할 수 있다
  • x: 디렉토리에 접근할 수 있다 (cd 사용 가능, ls 사용 불가) 파일명을 정확히 안다면 파일에도 접근할 수 있다

특수 권한

SUID(Set User ID)

파일에 설정하면 해당 파일을 실행할 때, 실행하는 사용자의 권한이 아닌 파일 소유자의 권한으로 실행된다. 주로 일반 사용자가 관리자 권한이 필요한 특정 프로그램을 실행할 때 사용된다.

ls -l로 출력하면 소유자의 실행 권한 위치(3번째)에 s/S로 표시된다. (s는 소유자의 실행 권한이 x였을 때, S는 소유자의 실행 권한이 -였을 때)

SGID(Set Group ID)

파일에 설정하면 해당 파일을 실행할 때, 실행하는 사용자의 그룹 권한이 아닌 파일 그룹의 권한으로 실행된다. 디렉토리에 설정하면 해당 디렉토리 내에 생성되는 모든 파일이 디렉토리의 그룹을 상속받는다.

ls -l로 출력하면 그룹의 실행 권한 위치(6번째)에 s/S로 표시된다. (s는 그룹의 실행 권한이 x였을 때, S는 그룹의 실행 권한이 -였을 때)

Sticky Bit

주로 디렉토리에 설정한다. 디렉토리에 설정되면 소유자와 루트 사용자만 파일을 삭제할 수 있다. 각 사용자는 자신의 파일만 삭제할 수 있고, 다른 사람의 파일은 삭제할 수 없다. 이는 공유 디렉토리에서 사용자들이 서로의 파일을 함부로 삭제하지 못하게 하기 위함이다.

현대 리눅스 커널에서는 파일에 설정된 Sticky Bit는 무시된다.

ls -l로 출력하면 기타 사용자의 실행 권한 위치(9번째)에 s/S로 표시된다. (s는 기타 사용자의 실행 권한이 x였을 때, S는 기타 사용자의 실행 권한이 -였을 때)