리눅스 파일 권한
권한의 기본 구조
리눅스는 다중 사용자 시스템으로 설계되었기 때문에 파일 권한 시스템이 매우 중요하다.
리눅스의 파일 권한은 세 가지 종류가 있다.
- 소유자(User): 파일을 생성한 사용자
- 그룹(Group): 파일에 연결된 사용자 그룹
- 기타(Others): 소유자나 그룹에 속하지 않은 다른 모든 사용자
그리고 각 종류는 세 가지 기본 권한을 가질 수 있다.
- 읽기(Read,
r): 파일 내용을 읽거나, 디렉토리 내용을 볼 수 있다. - 쓰기(Write,
w): 파일 내용을 수정하거나, 디렉토리에 파일을 생성/삭제할 수 있다. - 실행(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는 기타 사용자의 실행 권한이 -였을 때)