리눅스 특수 권한 및 umask 관리

LinuxBeginner
지금 연습하기

소개

이 실습에서는 협업 공간의 보안을 유지하기 위해 리눅스 환경에서 특수 권한과 umask 설정을 관리하는 방법을 배웁니다. 새로 생성되는 파일에 부여되는 기본 권한을 제어하는 방법과, 공유 디렉터리 내에서 다른 사용자가 파일을 함부로 삭제하지 못하도록 보호하는 스티키 비트 (sticky bit) 와 같은 특수 권한 비트의 활용법을 살펴봅니다.

먼저 새로운 사용자 그룹과 디렉터리를 생성하고 적절한 소유권과 권한을 할당하여 가상의 공유 환경을 준비하는 것으로 시작합니다. 그 다음, umask 값을 수정하여 더 엄격한 기본 권한을 적용하고 새 파일을 생성하여 그 효과를 확인합니다. 마지막으로 공유 디렉터리에 스티키 비트를 설정하고 적용 여부를 확인하여, 공유 공간 내에서 오직 파일 소유자만이 자신의 파일을 삭제할 수 있도록 보장하는 보안 설정을 완료합니다.

이 실습은 학습과 연습을 돕기 위해 단계별 지침을 제공하는 가이드 실습입니다. 각 단계를 완료하고 실무 경험을 쌓으려면 지침을 주의 깊게 따르십시오. 통계 데이터에 따르면 이 실습은 초급 수준이며 100%의 수료율을 기록하고 있습니다. 또한 학습자들로부터 99%의 긍정적인 평가를 받았습니다.

환경 준비 및 디렉터리 접근

이 단계에서는 특수 파일 권한을 관리하기 위한 환경을 준비합니다. 연구 팀을 위한 공유 워크스테이션을 가정한 전용 디렉터리를 만드는 과정이 포함됩니다. 새로운 사용자 그룹과 디렉터리를 생성한 후, 적절한 소유권과 권한을 할당하겠습니다. 모든 작업은 프로젝트 디렉터리인 ~/project에서 수행됩니다.

먼저 research라는 이름의 새 그룹을 생성합니다. 이 그룹은 공유 디렉터리에 접근할 수 있는 팀원들을 나타냅니다. 그룹 생성은 관리자 작업이므로 sudo groupadd 명령어를 사용합니다.

sudo groupadd research

다음으로, ~/project 디렉터리 안에 RandD라는 이름의 새 디렉터리를 생성합니다. 이 디렉터리는 이번 실습의 주요 작업 공간이 됩니다.

mkdir ~/project/RandD

이제 새로 만든 RandD 디렉터리의 그룹 소유권을 research 그룹으로 변경합니다. 이를 위해 chgrp 명령어를 사용합니다.

sudo chgrp research ~/project/RandD

소유자 (labex 사용자) 와 research 그룹의 구성원만 이 디렉터리에 접근할 수 있도록 권한을 설정합니다. chmod 명령어와 숫자 코드 770을 사용하겠습니다. 이 코드는 사용자 (소유자) 와 그룹에게는 읽기, 쓰기, 실행 권한 (rwx, 즉 4+2+1=7) 을 부여하고, 나머지 사용자 (others) 에게는 아무런 권한 (---, 즉 0) 도 주지 않습니다.

chmod 770 ~/project/RandD

ls -ld 명령어를 사용하여 디렉터리의 권한과 소유권을 확인할 수 있습니다. -l 옵션은 상세 목록 형식을 제공하며, -d 옵션은 디렉터리 내부 내용이 아닌 디렉터리 자체의 정보를 표시합니다.

ls -ld ~/project/RandD

권한 (drwxrwx---), 소유자 (labex), 그룹 (research) 을 확인하는 다음과 유사한 출력이 나타나야 합니다.

drwxrwx--- 2 labex research 4096 Dec 12 10:30 /home/labex/project/RandD

마지막으로 현재 위치를 RandD 디렉터리로 이동합니다. 이후 단계의 작업들은 이곳에서 진행됩니다.

cd ~/project/RandD

이제 작업 환경 설정이 성공적으로 완료되었습니다.

umask 027을 이용한 기본 파일 권한 제한

이 단계에서는 umask 명령어를 사용하여 새로 생성되는 파일의 기본 권한을 제어하는 방법을 배웁니다. 파일을 생성할 때 시스템은 기본 권한 세트를 할당합니다. 종종 이러한 기본값은 "기타 사용자 (Other)"가 내 파일을 읽을 수 있게 허용하는 등 보안상 너무 관대한 경우가 많습니다. 보안이 중요한 RandD 디렉터리와 같은 환경에서는 이를 제한해야 합니다.

umask(사용자 파일 생성 모드 마스크) 명령어는 새 파일이나 디렉터리가 생성될 때 기본 권한에서 제거할 권한을 지정합니다.

  • 파일의 경우, 기본 권한은 666(rw-rw-rw-) 입니다.
  • 디렉터리의 경우, 기본 권한은 777(rwxrwxrwx) 입니다.

여기서는 umask027로 설정하겠습니다. 이 값은 시스템에 다음과 같은 권한을 제거하도록 지시합니다.

  • 사용자 (소유자): 0 - 제거되는 권한 없음.
  • 그룹: 2 - 쓰기 권한 제거.
  • 기타 사용자: 7 (4+2+1) - 읽기, 쓰기, 실행 권한 모두 제거.

즉, 새로 생성되는 모든 파일은 666 - 027 = 640(rw-r-----) 권한을 갖게 되며, 새로 생성되는 모든 디렉터리는 777 - 027 = 750(rwxr-x---) 권한을 갖게 됩니다.

먼저 쉘 프롬프트에 umask 027을 입력하여 현재 터미널 세션의 기본 권한을 변경합니다. 여전히 ~/project/RandD 디렉터리에 있는지 확인하십시오.

umask 027

다음으로, 명령어만 입력하여 umask의 새로운 값을 확인합니다.

umask

명령어는 새로운 umask 값을 표시해야 합니다. 맨 앞의 0 은 특수 권한 (나중에 배울 스티키 비트 등) 이 마스크에 포함되지 않았음을 나타냅니다.

027

현재 세션에 대한 기본 파일 생성 권한을 성공적으로 변경했습니다. 다음 단계에서는 파일을 생성하여 이 새로운 umask가 어떻게 적용되는지 관찰해 보겠습니다.

파일 생성 및 새로운 umask 권한 확인

이 단계에서는 파일을 직접 생성하여 새로운 umask 설정을 실습해 봅니다. 이를 통해 이전 단계에서 구성한 기본 권한이 자동으로 적용되어, 승인되지 않은 접근으로부터 새 문서가 어떻게 보호되는지 확인할 수 있습니다. 현재 위치는 계속해서 ~/project/RandD 디렉터리여야 합니다.

touch 명령어를 사용하여 schedule.odt라는 이름의 빈 파일을 생성해 보겠습니다. touch 명령어는 빈 파일을 만들거나 기존 파일의 타임스탬프를 업데이트하는 간단한 방법입니다.

touch schedule.odt

파일이 생성되었으므로 이제 권한을 확인해야 합니다. ls -l 명령어를 사용하여 schedule.odt에 대한 상세 정보를 표시합니다.

ls -l schedule.odt

다음과 유사한 출력이 표시됩니다. 가장 중요한 부분은 파일의 권한을 보여주는 첫 번째 열입니다.

-rw-r----- 1 labex research 0 Dec 12 10:35 schedule.odt

권한 문자열 -rw-r-----를 분석해 보겠습니다.

  • 첫 번째 문자 -는 이것이 일반 파일임을 나타냅니다.
  • 다음 세 문자 rw-사용자(소유자) 의 권한으로, 읽기와 쓰기가 가능함을 의미합니다. 이는 숫자 값 6에 해당합니다.
  • 그 다음 세 문자 r--그룹의 권한으로, 읽기 전용임을 의미합니다. 이는 숫자 값 4에 해당합니다.
  • 마지막 세 문자 ---기타 사용자의 권한으로, 아무런 권한이 없음을 의미합니다. 이는 숫자 값 0에 해당합니다.

이 권한 (640) 은 시스템의 기본 파일 권한인 666umask027을 적용한 직접적인 결과입니다. 의도한 대로 umask가 그룹의 쓰기 권한과 기타 사용자의 모든 권한을 성공적으로 제거했습니다.

chmod 1771을 이용한 디렉터리 스티키 비트 설정

이 단계에서는 공유 디렉터리에서 흔히 발생하는 문제를 해결해 보겠습니다. 현재 상태에서는 research 그룹의 구성원이라면 누구나 ~/project/RandD 디렉터리 내의 모든 파일을 삭제할 수 있습니다. 심지어 다른 사용자가 만든 파일도 삭제가 가능합니다. 이는 디렉터리에 대한 쓰기 권한이 파일의 생성뿐만 아니라 삭제 권한까지 포함하기 때문입니다. 실수로 또는 악의적으로 파일이 삭제되는 것을 방지하기 위해 "스티키 비트 (sticky bit)"라고 불리는 특수 권한을 설정하겠습니다.

디렉터리에 스티키 비트가 적용되면 동작 방식이 변경됩니다. 디렉터리 내의 파일은 오직 파일의 소유자, 디렉터리의 소유자 또는 루트 (root) 사용자만이 삭제하거나 이름을 변경할 수 있게 됩니다. 이는 RandD 디렉터리와 같은 협업 환경에 매우 이상적입니다.

스티키 비트를 설정하기 위해 chmod 명령어와 4 자리 8 진수 숫자를 사용합니다. 명령어는 chmod 1771 RandD가 됩니다.

  • 첫 번째 숫자 1은 스티키 비트를 나타냅니다.
  • 이어지는 세 숫자 771은 표준 권한을 설정합니다: 사용자에게 rwx, 그룹에게 rwx, 기타 사용자에게 --x.

먼저 디렉터리의 권한을 수정하기 위해 RandD의 상위 디렉터리로 이동해야 합니다. 현재 ~/project/RandD에 있으므로 cd .. 명령어를 사용하여 한 단계 위인 ~/project로 이동합니다.

cd ..

이제 ~/project 디렉터리에서 RandD 디렉터리에 스티키 비트를 적용합니다.

chmod 1771 RandD

이제 RandD 디렉터리에 스티키 비트가 설정되었습니다. 마지막 단계에서는 ls -l 명령어를 사용하여 이 특수 권한이 어떻게 표시되는지 확인하고 그 효과를 검증하겠습니다.

ls -l을 이용한 스티키 비트 권한 확인

마지막 단계에서는 RandD 디렉터리에 스티키 비트가 올바르게 적용되었는지 확인합니다. ls -l 명령어는 스티키 비트와 같은 특수 권한을 시각적으로 표시해 줍니다. 현재 위치는 여전히 ~/project 디렉터리여야 합니다.

쉘 프롬프트에서 ls -ld RandD 명령어를 입력하여 디렉터리 자체의 권한을 확인합니다.

ls -ld RandD

출력 내용을 주의 깊게 살펴보십시오. 다음과 유사하게 보여야 합니다.

drwxrwx--t 2 labex research 4096 Dec 12 10:45 RandD

주요 변화는 권한 문자열 drwxrwx--t에 있습니다.

  • d는 디렉터리임을 나타냅니다.
  • 첫 번째 rwx는 사용자 (labex) 가 모든 권한을 가졌음을 보여줍니다.
  • 두 번째 rwxresearch 그룹이 모든 권한을 가졌음을 보여줍니다.
  • 마지막 부분인 --t가 바로 스티키 비트가 표시되는 곳입니다. 원래 "기타 사용자"의 실행 권한 (x) 이 있어야 할 자리에 t가 표시됩니다. 소문자 t는 스티키 비트와 기타 사용자의 실행 권한이 모두 설정되었음을 의미합니다. 이를 통해 chmod 1771 명령어가 성공적으로 적용되었음을 확인할 수 있습니다.

축하합니다! umask를 사용하여 안전한 기본 권한을 가진 공유 디렉터리를 구성하고, 스티키 비트를 설정하여 승인되지 않은 파일 삭제로부터 콘텐츠를 보호하는 데 성공했습니다.

요약

이 실습에서는 사용자 그룹을 위한 안전한 공유 디렉터리를 준비하는 방법을 배웠습니다. 이 과정에서 groupadd로 새 그룹을 생성하고, 디렉터리를 만든 후, chgrpchmod를 사용하여 올바른 그룹 소유권과 제한적인 권한 (770) 을 할당했습니다. 또한 특정 umask 값 (027) 을 설정하여 새로 생성되는 파일과 디렉터리의 기본 권한을 조작하는 연습을 했으며, 새 파일을 생성하고 권한을 검사하여 그 효과를 확인했습니다.

더 나아가, chmod 1771 명령어를 사용하여 공유 디렉터리에 스티키 비트를 적용함으로써 특수 권한을 탐구했습니다. 스티키 비트는 사용자가 자신이 소유한 파일만 삭제하거나 이름을 변경할 수 있도록 보장하여, 타인의 작업물이 실수로 또는 악의적으로 삭제되는 것을 방지하므로 협업 환경에서 필수적이라는 점을 배웠습니다. 마지막으로 ls -l을 사용하여 디렉터리 권한 문자열에서 t를 식별함으로써 스티키 비트가 올바르게 적용되었음을 검증했습니다.