Computer >> 컴퓨터 >  >> 시스템 >> Linux

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

Linux는 탄생 초기부터 다중 사용자(multi-user) 환경을 지원하도록 설계된 운영체제입니다. 실제 운영 중인 시스템에는 수많은 사용자와 그룹이 존재하기 때문에, 같은 그룹에 속한 사용자들이 하나의 디렉토리를 공유해 사용하는 경우가 매우 흔합니다. 그런데 이렇게 디렉토리 안의 파일을 공유하다 보면 의도치 않은 문제가 발생하기 쉽습니다. 이번 글에서는 스티키 비트(Sticky Bit)를 활용해 공유 디렉토리의 파일 접근 권한을 세밀하게 조정하는 방법을 살펴보겠습니다.

설명을 위해 세 명의 사용자(john1, john2, john3)가 있는 시스템을 예로 들겠습니다. 세 사용자는 모두 공통 그룹인 "johns" 그룹의 멤버입니다.

"john1"이 "johns" 그룹의 모든 사용자가 함께 사용할 수 있도록 "shared-dir"라는 새 디렉토리를 생성했다고 가정해 보겠습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

ls 명령어로 "shared-dir"의 권한을 확인할 수 있으며, 출력 결과는 아래 표와 같이 해석할 수 있습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

현재 상태에서는 "john1"만 이 디렉토리의 내용을 읽고 쓸 수 있습니다. 하지만 공유 디렉토리의 취지에 맞게, 그룹의 모든 사용자가 "shared-dir"에 파일을 작성할 수 있도록 만들어야 합니다.

이를 위해 chmod 명령어로 권한을 수정합니다. 아래와 같이 "johns" 그룹의 모든 사용자에게 쓰기(write) 권한을 추가합니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

변경된 "shared-dir"의 권한을 다시 확인해 보면, 노란색으로 밑줄 친 부분에서 "johns" 그룹에 쓰기 권한이 부여된 것을 확인할 수 있습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

공유 디렉토리에 파일 추가하기

이제 "john1"이 "shared-dir"에 두 개의 파일(j1_file1.txt와 j1_file2.txt)을 추가합니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

이해를 돕기 위해 파일 이름의 첫 두 글자는 해당 파일을 생성한 사용자 이름과 동일하게 지었습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

마찬가지로 "john2" 역시 "shared-dir" 디렉토리에 파일을 쓸 수 있습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법 Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

현재 "shared-dir"에는 네 개의 파일이 존재합니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

현재 설정에는 어떤 문제가 있을까?

파일 "j1_file1.txt"는 "john1"이 생성했으므로 파일 소유자는 "john1"입니다. 그런데 "john2"가 로그인해 이 파일을 삭제하려고 시도하면, 놀랍게도 삭제가 가능합니다.

"john1"이 파일 소유자임에도 "john2"가 삭제할 수 있는 이유는, "johns" 그룹의 모든 멤버에게 쓰기 권한이 부여되었기 때문입니다.

이러한 상황은 바람직하지 않습니다. 모든 사용자가 디렉토리에 파일을 쓸 수 있되, 파일 삭제는 오직 해당 파일의 소유자만 할 수 있도록 하는 것이 이상적입니다. 과연 이것을 어떻게 구현할 수 있을까요?

스티키 비트(Sticky Bit) 소개

스티키 비트는 접근 권한이 있는 그룹에 쓰기 권한이 설정된 디렉토리에 부여할 수 있는 특수 권한입니다. 스티키 비트가 설정되면 그룹의 모든 멤버는 디렉토리에 파일을 쓸 수 있지만, 파일 삭제는 오직 그 파일을 생성한 사람, 즉 파일 소유자만 할 수 있습니다.

chmod 명령어에 +t 플래그를 사용하면 디렉토리에 스티키 비트를 설정할 수 있습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

업데이트된 권한은 아래와 같습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

이제 "john2"가 "john1"이 생성한 파일 "j1_file2.txt"를 삭제하려고 시도하면, 해당 작업은 허용되지 않습니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

만약 아래와 같이 "others(기타 사용자)"의 실행(execute) 권한을 제거하면:

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

권한 문자열의 "others" 영역에 대문자 "T"가 표시되며, 이는 디렉토리에 스티키 비트가 설정되어 있음을 나타냅니다. 이 경우에도 디렉토리에서의 스티키 비트 동작은 동일하게 유지됩니다.

Linux 스티키 비트 완벽 가이드: 공유 디렉토리 파일 권한 관리 방법

chmod 명령어의 숫자 표기법

chmod 명령어의 숫자 형식을 사용해서도 디렉토리에 스티키 비트를 설정할 수 있습니다.

chmod nxyz <file_name>

각 자리의 의미는 다음과 같습니다.

  • n = 1: 스티키 비트를 의미합니다. 다른 값은 다른 특수 권한(setuid, setgid 등)을 나타냅니다.
  • x : 파일 소유자(owner)에게 부여되는 권한
  • y : 해당 파일에 접근 권한이 있는 그룹(group)에 부여되는 권한
  • z : 기타 사용자(others)에게 부여되는 권한

"shared-dir"에 스티키 비트를 설정하려면 다음 명령어를 사용합니다.

chmod 1755 shared-dir

이 명령은 기존 기본 권한에 +t를 적용한 것과 동일한 결과를 만듭니다.

핵심 정리

  • 스티키 비트는 공유 디렉토리에서 파일 삭제 권한을 파일 소유자(및 root)로 제한하는 특수 권한입니다.
  • 설정 방법: chmod +t shared-dir 또는 chmod 1755 shared-dir
  • 권한 문자열 끝에 소문자 t(실행 권한 있음) 또는 대문자 T(실행 권한 없음)로 표시됩니다.
  • 대표적인 적용 사례로, 임시 파일을 저장하는 /tmp 디렉토리에 스티키 비트가 설정되어 있습니다.

마지막으로, 스티키 비트는 디렉토리에만 유효한 권한이라는 점을 기억하세요. 일반 파일에 적용하는 것은 의미가 없습니다.