리눅스 권한 체계의 이해

리눅스는 유닉스의 전통을 이어받아 강력한 파일 권한 시스템을 가지고 있다. 모든 파일과 디렉토리는 소유자, 그룹, 그리고 그 외 사용자에 대한 읽기, 쓰기, 실행 권한을 각각 지정할 수 있다. 이러한 권한 체계는 다중 사용자 시스템에서 보안과 자원 공유를 가능하게 한다.

기본 권한의 구성

리눅스의 권한은 세 가지 기본 요소로 구성된다. 읽기(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: 모든 사용자에게 모든 권한을 준다. 보안상 위험하므로 특별한 경우가 아니면 사용하지 않는다.

권한 관리의 모범 사례

효과적인 권한 관리를 위한 핵심 원칙:

  1. 최소 권한의 원칙을 따른다. 필요한 최소한의 권한만을 부여한다.
  2. 정기적으로 권한을 검토한다. 특히 중요한 시스템 파일과 디렉토리의 권한을 점검한다.
  3. 공유 디렉토리는 신중하게 관리한다. SGID와 Sticky Bit를 적절히 활용한다.
  4. 스크립트와 실행 파일의 권한은 특별히 주의한다. 실행 권한은 필요한 경우에만 부여한다.