리눅스 권한 체계의 이해
리눅스는 유닉스의 전통을 이어받아 강력한 파일 권한 시스템을 가지고 있다. 모든 파일과 디렉토리는 소유자, 그룹, 그리고 그 외 사용자에 대한 읽기, 쓰기, 실행 권한을 각각 지정할 수 있다. 이러한 권한 체계는 다중 사용자 시스템에서 보안과 자원 공유를 가능하게 한다.
기본 권한의 구성
리눅스의 권한은 세 가지 기본 요소로 구성된다. 읽기(r), 쓰기(w), 실행(x)이다. 이 권한들은 소유자, 그룹, 기타 사용자 각각에 대해 독립적으로 설정할 수 있다. 파일 목록을 볼 때 보이는 -rwxr-xr– 와 같은 표기는 이러한 권한의 조합을 나타낸다.
첫 번째 문자는 파일의 종류를 나타낸다. 일반 파일은 -, 디렉토리는 d, 링크는 l로 표시된다. 그 뒤의 9개 문자는 3개씩 세 그룹으로 나뉘어 각각 소유자, 그룹, 기타 사용자의 권한을 나타낸다.
chmod 명령어의 두 가지 표현
chmod는 change mode의 약자로, 파일의 권한을 변경하는 명령어다. 권한 변경은 숫자 모드와 문자 모드 두 가지 방식으로 가능하다.
숫자 모드는 읽기(4), 쓰기(2), 실행(1)의 합으로 권한을 표현한다. 예를 들어 755는 소유자에게 모든 권한(7=4+2+1), 그룹과 기타 사용자에게 읽기와 실행 권한(5=4+0+1)을 부여한다.
문자 모드는 더 직관적인 방식으로 권한을 지정할 수 있다. u(user), g(group), o(others), a(all)와 같은 대상 지정자와 +, -, = 연산자를 조합하여 사용한다.
권한의 실제 의미
각 권한이 실제로 의미하는 바를 이해하는 것이 중요하다. 파일과 디렉토리에 따라 같은 권한이라도 다른 의미를 가진다.
파일의 경우:
- 읽기(r): 파일의 내용을 볼 수 있다
- 쓰기(w): 파일의 내용을 수정할 수 있다
- 실행(x): 파일을 프로그램으로 실행할 수 있다
디렉토리의 경우:
- 읽기(r): 디렉토리 내용을 볼 수 있다
- 쓰기(w): 디렉토리에 파일을 생성하거나 삭제할 수 있다
- 실행(x): 디렉토리로 이동할 수 있다
특수 권한의 이해
기본 권한 외에도 리눅스는 세 가지 특수 권한을 제공한다. 이들은 보다 복잡한 권한 제어를 가능하게 한다.
SUID(Set User ID)는 실행 파일에 설정되며, 파일이 실행될 때 소유자의 권한으로 실행되게 한다. 대표적인 예로 passwd 명령어가 있다. 일반 사용자가 자신의 암호를 변경할 수 있는 것은 SUID 덕분이다.
SGID(Set Group ID)는 주로 디렉토리에 사용된다. SGID가 설정된 디렉토리에서 생성되는 파일은 디렉토리의 그룹을 상속받는다. 이는 팀 프로젝트 디렉토리 같은 공유 공간에서 유용하다.
Sticky Bit는 공유 디렉토리에서 중요한 역할을 한다. 이 권한이 설정된 디렉토리에서는 파일을 생성한 사용자만이 해당 파일을 삭제할 수 있다. /tmp 디렉토리가 대표적인 예다.
권한 관리의 실제
실제 시스템 관리에서 권한 설정은 매우 중요하다. 잘못된 권한 설정은 보안 취약점이 되거나 시스템 오작동의 원인이 될 수 있다.
가장 흔한 권한 조합:
- 644: 일반 파일의 기본 권한. 소유자만 수정 가능하고 다른 사용자는 읽기만 가능하다.
- 755: 실행 파일이나 디렉토리의 일반적인 권한. 소유자는 모든 권한을, 다른 사용자는 읽기와 실행 권한을 가진다.
- 600: 민감한 설정 파일에 사용. 소유자만 읽고 쓸 수 있다.
- 777: 모든 사용자에게 모든 권한을 준다. 보안상 위험하므로 특별한 경우가 아니면 사용하지 않는다.
권한 관리의 모범 사례
효과적인 권한 관리를 위한 핵심 원칙:
- 최소 권한의 원칙을 따른다. 필요한 최소한의 권한만을 부여한다.
- 정기적으로 권한을 검토한다. 특히 중요한 시스템 파일과 디렉토리의 권한을 점검한다.
- 공유 디렉토리는 신중하게 관리한다. SGID와 Sticky Bit를 적절히 활용한다.
- 스크립트와 실행 파일의 권한은 특별히 주의한다. 실행 권한은 필요한 경우에만 부여한다.