파일 권한 관리

LinuxBeginner
지금 연습하기

소개

이 실습에서는 Linux 파일 권한의 세계를 깊이 있게 살펴봅니다. 우리는 세 가지 핵심 명령어인 chown, touch, chmod를 탐구할 것입니다. 이 도구들은 Linux 시스템에서 파일과 디렉토리에 대한 접근을 제어하는 데 매우 중요합니다. 실습을 마칠 때쯤이면 파일 생성, 소유권 변경, 권한 수정에 대해 확실히 이해하게 될 것입니다. 이러한 명령어들을 숙달하면 시스템에서 누가 파일을 읽고, 쓰고, 실행할 수 있는지 완벽하게 제어할 수 있습니다.

이 과정은 단계별 안내를 통해 학습과 실습을 돕는 가이드 실습입니다. 각 단계를 주의 깊게 따라가며 직접 경험을 쌓아보세요. 통계에 따르면 이 실습은 초급 수준이며, 92%의 완료율과 학습자들로부터 99%의 긍정적인 평가를 받았습니다.

새 파일 생성하기

먼저 touch 명령어를 사용하여 새 파일을 만들어 보겠습니다. 이 다재다능한 명령어는 비어 있는 새 파일을 생성하거나 기존 파일의 타임스탬프를 업데이트할 수 있습니다. 파일을 "터치"하여 새로 존재하게 만들거나 마지막 접근 시간을 갱신하는 빠른 방법이라고 생각하면 됩니다.

먼저, 올바른 디렉토리에 있는지 확인하세요. 우리는 project 디렉토리에서 작업할 것입니다.

cd ~/project

cd 명령어는 "디렉토리 변경 (change directory)"을 의미합니다. ~ 기호는 사용자의 홈 디렉토리를 나타내며, /project는 이동하려는 하위 디렉토리를 지정합니다. 만약 project 디렉토리가 존재하지 않는다면 이 명령어는 실패할 것입니다. 확실하지 않을 때는 디렉토리를 먼저 생성하는 것이 좋지만, 이 실습 환경에서는 이미 디렉토리가 생성되어 있을 것입니다.

이제 example.txt라는 이름의 새 파일을 만들어 보겠습니다.

touch example.txt

이 명령어는 현재 디렉토리에 example.txt라는 빈 파일을 생성합니다. 파일이 제대로 생성되었는지 확인하려면 ls 명령어를 사용하세요.

ls

ls는 "목록 (list)"의 약자입니다. 현재 위치에 있는 파일과 디렉토리를 보여줍니다. 출력 결과에 example.txt가 보여야 합니다. 만약 보이지 않는다면 touch 명령어를 정확히 입력했는지, 그리고 현재 위치가 ~/project 디렉토리가 맞는지 다시 확인해 보세요.

파일 소유권 변경하기

파일을 생성했으니 이제 소유권을 변경하는 방법을 배워보겠습니다. chown 명령어를 사용하면 파일의 소유 사용자와 소유 그룹을 모두 수정할 수 있습니다. 소유권은 해당 파일을 누가 제어할 수 있는지를 결정합니다.

먼저 example.txt 파일의 현재 소유권을 확인해 봅시다.

ls -l example.txt

ls -l 명령어 (긴 형식으로 목록 표시) 는 권한, 소유자, 그룹을 포함한 파일의 상세 정보를 제공합니다. 다음과 유사한 출력이 나타날 것입니다.

-rw-rw-r-- 1 labex labex 0 Jul 29 15:11 example.txt

이 출력 내용을 분석해 보겠습니다.

  1. -rw-rw-r--는 파일 권한을 나타냅니다 (4 단계에서 더 자세히 다룹니다). 첫 번째 문자는 파일 유형을 나타냅니다 (-는 일반 파일, d는 디렉토리 등). 나머지 문자들은 소유자, 그룹, 기타 사용자에 대한 읽기, 쓰기, 실행 권한을 나타냅니다.
  2. 첫 번째 labex는 파일의 현재 소유자입니다. 파일을 소유한 사용자 이름입니다.
  3. 두 번째 labex는 파일의 현재 소유 그룹입니다. 그룹은 권한을 공유할 수 있는 사용자들의 집합입니다.
  4. 0은 바이트 단위의 파일 크기입니다. 파일이 비어 있으므로 크기는 0 입니다.
  5. Jul 29 15:11은 마지막 수정 날짜와 시간입니다.
  6. example.txt는 파일 이름입니다.

이제 파일의 소유권을 root 사용자로 변경해 보겠습니다. root는 Linux 시스템의 관리자 계정이며 특별한 권한을 가집니다.

sudo chown root:root example.txt

이 명령어의 역할은 다음과 같습니다.

  • sudo는 root 권한으로 명령어를 실행합니다. 비밀번호 입력을 요청받을 수 있습니다. chown은 시스템 보안에 영향을 줄 수 있는 강력한 명령어이므로 승인된 권한이 필요합니다. sudo 없이 실행하면 "Permission denied(권한 거부)" 오류가 발생합니다.
  • chown은 소유권을 변경하는 명령어입니다.
  • root:root는 새로운 소유자와 그룹을 지정합니다 (둘 다 root 로 설정). 구문은 소유자:그룹 형식입니다.
  • example.txt는 대상 파일입니다.

변경 사항을 확인해 봅시다.

ls -l example.txt

이제 소유자와 그룹이 모두 root로 변경된 것을 확인할 수 있습니다.

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

여전히 root 대신 labex가 보인다면, chown 명령어를 실행할 때 sudo를 사용했는지와 비밀번호를 정확히 입력했는지 확인하세요.

디렉토리 소유권 변경하기

chown 명령어는 디렉토리 전체와 그 안의 모든 내용물에 대한 소유권도 변경할 수 있습니다. 실제로 어떻게 작동하는지 확인해 봅시다. 이는 모든 파일과 하위 디렉토리가 동일한 소유자를 갖도록 보장해야 하는 복잡한 디렉토리 구조를 관리할 때 특히 유용합니다.

먼저, 몇 개의 파일이 포함된 새 디렉토리를 만들어 보겠습니다.

mkdir -p new-dir/subdir
echo "Hello, world" > new-dir/file1.txt
echo "Another file" > new-dir/subdir/file2.txt

명령어들을 분석해 보겠습니다.

  • mkdir -p new-dir/subdirnew-dir 디렉토리와 그 안의 subdir 하위 디렉토리를 생성합니다. -p 옵션은 필요한 경우 상위 디렉토리를 자동으로 생성하도록 mkdir에 지시합니다. -p가 없다면 new-dir이 존재하지 않을 경우 하위 디렉토리 생성에 실패합니다.
  • echo "Hello, world" > new-dir/file1.txtnew-dir 디렉토리 안에 file1.txt라는 파일을 만들고 "Hello, world"라는 텍스트를 씁니다. > 기호는 리다이렉션에 사용되며, echo 명령어의 출력을 지정된 파일로 보냅니다.
  • echo "Another file" > new-dir/subdir/file2.txt는 유사하게 new-dir/subdir 디렉토리 안에 file2.txt 파일을 만들고 내용을 씁니다.

이제 현재 소유권을 확인해 봅시다.

ls -lR new-dir

ls -lRnew-dir의 내용을 재귀적으로 나열합니다. -R 옵션 (recursive) 은 lsnew-dir 내의 모든 파일과 하위 디렉토리, 그리고 그 내부의 내용까지 모두 표시하게 합니다.

다음과 같은 결과가 나타날 것입니다.

new-dir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 labex labex 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file2.txt

이는 new-dir 디렉토리, 하위 디렉토리 subdir, 그리고 파일 file1.txt, file2.txt가 모두 labex 소유임을 보여줍니다.

이제 new-dir과 그 안의 모든 내용물의 소유권을 root 사용자로 변경해 보겠습니다.

sudo chown -R root:root new-dir

이 명령어에서:

  • -R 옵션은 chown이 재귀적으로 작동하여 new-dir 내의 모든 파일과 하위 디렉토리의 소유권을 변경하도록 합니다. 이는 매우 중요합니다. -R이 없으면 new-dir 디렉토리 자체의 소유권만 변경되고, 그 안의 파일들은 여전히 labex 소유로 남게 됩니다.

변경 사항을 확인해 봅시다.

ls -lR new-dir

이제 다음과 같이 표시되어야 합니다.

new-dir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 root root 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file2.txt

보시는 것처럼 디렉토리와 모든 내용물의 소유권이 root 로 변경되었습니다. 이는 디렉토리 구조 내에서 광범위한 소유권 변경을 수행할 때 -R 옵션이 얼마나 강력한지 보여줍니다.

파일 권한 변경하기

Linux 에서 파일 권한은 일련의 문자나 숫자로 표현됩니다. 이러한 권한을 읽고 변경하는 방법을 알아보겠습니다. 권한을 이해하는 것은 파일을 안전하게 보호하고 무단 접근을 방지하는 데 필수적입니다.

먼저 example.txt 파일의 현재 권한을 확인해 봅시다.

ls -l example.txt

다음과 같은 내용을 볼 수 있습니다.

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

-rw-rw-r-- 부분이 파일 권한을 나타냅니다. 여기서 숫자 표기법과 심볼릭 (문자) 표기법이 등장합니다. 내용을 분석해 보겠습니다.

  • 첫 번째 문자 (-) 는 이것이 일반 파일임을 나타냅니다. 다른 일반적인 표시로는 디렉토리를 뜻하는 d, 심볼릭 링크를 뜻하는 l 등이 있습니다.
  • 다음 세 문자 (rw-) 는 소유자의 권한을 나타냅니다 (읽기와 쓰기는 가능하지만 실행은 불가능).
    • r은 읽기 (read) 권한: 소유자가 파일을 열고 읽을 수 있습니다.
    • w은 쓰기 (write) 권한: 소유자가 파일을 수정할 수 있습니다.
    • x는 실행 (execute) 권한: 소유자가 파일을 실행할 수 있습니다 (프로그램이나 스크립트인 경우). -는 해당 권한이 없음을 의미합니다.
  • 다음 세 문자 (rw-) 는 그룹의 권한입니다. 위와 동일한 의미를 갖지만 파일 소유 그룹의 구성원들에게 적용됩니다.
  • 마지막 세 문자 (r--) 는 기타 사용자 (나머지 모든 사람) 를 위한 것입니다. 소유자도 아니고 그룹 구성원도 아닌 사용자들에게 적용됩니다.

이제 chmod 명령어를 사용하여 이 권한들을 변경해 보겠습니다. chmod는 "모드 변경 (change mode)"의 약자로, 권한을 수정할 수 있게 해줍니다. 먼저 숫자 표기법부터 시작해 보겠습니다.

sudo chmod 700 example.txt

이 명령어에서:

  • 700은 권한의 숫자 표현입니다.
    • 첫 번째 숫자 (7) 는 소유자의 권한을 나타냅니다.
    • 두 번째 숫자 (0) 는 그룹의 권한을 나타냅니다.
    • 세 번째 숫자 (0) 는 기타 사용자의 권한을 나타냅니다.

각 숫자는 0 에서 7 사이이며, 읽기 (4), 쓰기 (2), 실행 (1) 권한의 값을 더해서 계산합니다.

  • 4: 읽기 권한
  • 2: 쓰기 권한
  • 1: 실행 권한
  • 0: 권한 없음

따라서 7(첫 번째 숫자) 은 소유자에게 읽기 (4) + 쓰기 (2) + 실행 (1) = 7 권한을 부여합니다.
0(두 번째 숫자) 은 그룹에게 아무런 권한도 주지 않습니다 (0+0+0=0).
0(세 번째 숫자) 은 기타 사용자에게 아무런 권한도 주지 않습니다 (0+0+0=0).

결과적으로 700은 소유자에게는 읽기, 쓰기, 실행 권한을 주고, 그룹과 기타 사용자에게는 아무런 권한도 주지 않음을 의미합니다.

변경 사항을 확인해 봅시다.

ls -l example.txt

이제 다음과 같이 표시되어야 합니다.

-rwx------ 1 root root 0 Jul 29 15:11 example.txt

소유자는 이제 rwx(읽기, 쓰기, 실행) 권한을 갖게 되었고, 그룹과 기타 사용자는 아무런 권한이 없습니다.

디렉토리 권한 변경하기

디렉토리의 권한을 변경하는 것은 파일의 경우와 매우 유사하게 작동합니다. 새 디렉토리를 만들고 권한을 수정하는 연습을 해봅시다. 디렉토리 권한은 누가 디렉토리의 내용을 나열할 수 있는지, 디렉토리 안에 새 파일을 만들 수 있는지, 그리고 이미 존재하는 파일에 접근할 수 있는지를 제어합니다.

먼저, 새 디렉토리를 만들고 표준이 아닌 권한을 설정해 보겠습니다.

mkdir ~/test-dir
chmod 700 ~/test-dir

이제 현재 권한을 확인해 봅시다.

ls -ld ~/test-dir

ls -l에서 -d 옵션은 디렉토리 내부의 내용이 아니라 디렉토리 자체를 나열하도록 지시합니다. -d가 없으면 ls는 현재 비어 있는 test-dir 내부의 파일들을 보여주려 할 것입니다. 다음과 같이 출력되어야 합니다.

drwx------ 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

맨 앞의 d는 이것이 디렉토리임을 나타냅니다. rwx------는 소유자가 읽기, 쓰기, 실행 권한을 가지며 그룹과 기타 사용자는 권한이 없음을 나타냅니다. 디렉토리의 경우 각 권한의 의미는 다음과 같습니다.

  • 읽기 권한 (r): ls 명령어를 사용하여 디렉토리의 내용을 볼 수 있습니다.
  • 쓰기 권한 (w): 디렉토리 내에 새 파일이나 하위 디렉토리를 생성할 수 있습니다.
  • 실행 권한 (x): 디렉토리 내의 파일이나 하위 디렉토리에 접근할 수 있습니다 (즉, cd로 들어갈 수 있음).

이제 권한을 변경해 보겠습니다.

chmod -R 755 ~/test-dir

이 명령어에서:

  • -R은 모든 파일과 하위 디렉토리에 권한 변경을 재귀적으로 적용합니다 (현재 디렉토리는 비어 있지만 습관을 들이는 것이 좋습니다). 나중에 파일을 추가할 경우를 대비해 디렉토리를 다룰 때는 이 옵션을 포함하는 것이 좋습니다.
  • 755는 소유자에게 읽기, 쓰기, 실행 권한을 주고, 그룹과 기타 사용자에게는 읽기와 실행 권한만 부여합니다.

755를 분석하면 다음과 같습니다.

  • 소유자 (7): 읽기 (4) + 쓰기 (2) + 실행 (1) = 7
  • 그룹 (5): 읽기 (4) + 실행 (1) = 5
  • 기타 사용자 (5): 읽기 (4) + 실행 (1) = 5

변경 사항을 확인해 봅시다.

ls -ld ~/test-dir

이제 다음과 같이 표시되어야 합니다.

drwxr-xr-x 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

이는 권한이 소유자만 접근 가능했던 상태 (700) 에서, 소유자는 모든 권한을 갖고 다른 사람들은 읽고 실행할 수 있는 상태 (755) 로 변경되었음을 명확히 보여줍니다. 이제 누구나 test-dir의 내용을 나열하고 내부 파일에 접근할 수 있지만, 오직 소유자만이 새 파일을 만들거나 기존 파일을 수정할 수 있습니다.

심볼릭 표기법으로 권한 관리하기

숫자 표기법은 간결하지만, 단 하나의 권한만 변경하고 싶을 때는 심볼릭 (문자) 표기법이 더 직관적일 수 있습니다. 심볼릭 표기법은 문자를 사용하여 사용자, 그룹, 기타 사용자를 나타내고 연산자를 사용하여 권한을 추가하거나 제거합니다.

먼저, 내용이 포함된 새 스크립트 파일을 만들어 보겠습니다.

cd ~/project
echo '#!/bin/bash\necho "Hello, World"' > script.sh

이 명령어는 두 가지 작업을 수행합니다.

  1. script.sh라는 새 파일을 생성합니다. .sh 확장자는 일반적으로 쉘 스크립트에 사용됩니다. 쉘 스크립트는 순차적으로 실행되는 일련의 명령어들을 담고 있는 실행 파일입니다.
  2. 파일에 두 줄의 내용을 씁니다.
    • #!/bin/bash(쉬뱅이라고 부름) 은 시스템에 이 파일이 bash 스크립트임을 알려줍니다. 쉬뱅 라인은 스크립트를 실행하는 데 사용될 인터프리터를 지정합니다. 여기서는 Bash 인터프리터의 경로인 /bin/bash입니다.
    • echo "Hello, World"는 스크립트가 실행될 때 "Hello, World"를 출력하는 명령어입니다.
    • \n은 줄바꿈 문자로, 두 명령어가 파일 내에서 서로 다른 줄에 위치하도록 합니다.

이제 초기 권한을 확인해 봅시다.

ls -l script.sh

다음과 유사한 결과가 나타날 것입니다.

-rw-rw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

보시는 것처럼 처음에는 소유자와 그룹에게 읽기 및 쓰기 권한이 있고, 기타 사용자에게는 읽기 권한만 있습니다. 프로그램을 실행하는 데 필요한 실행 권한이 없습니다.

스크립트를 실행해 봅시다.

./script.sh

스크립트에 실행 권한이 없기 때문에 "Permission denied" 오류가 발생할 것입니다. ./ 부분은 쉘에게 현재 디렉토리에 있는 스크립트를 실행하라고 지시하는 것입니다.

이제 심볼릭 표기법을 사용하여 소유자에게 실행 권한을 추가해 보겠습니다.

chmod u+x script.sh

이 명령어에서:

  • u는 사용자 (소유자, user) 를 가리킵니다. 다른 옵션으로는 그룹을 뜻하는 g, 기타 사용자를 뜻하는 o, 그리고 모두 (사용자, 그룹, 기타 사용자) 를 뜻하는 a가 있습니다.
  • +x는 실행 권한을 추가합니다. + 기호는 권한을 추가하고, - 기호는 권한을 제거합니다.

따라서 u+x는 "소유자에게 실행 권한을 추가하라"는 의미입니다.

변경 사항을 확인해 봅시다.

ls -l script.sh

이제 다음과 같이 표시되어야 합니다.

-rwxrw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

소유자는 이제 rwx(읽기, 쓰기, 실행) 권한을 갖게 되었습니다.

이제 스크립트를 다시 실행해 봅시다.

./script.sh

이번에는 "Hello, World"라는 출력이 정상적으로 나타날 것입니다.

이 예제는 스크립트에 실행 권한을 추가해야 하는 이유와 권한 추가 전후의 차이를 명확히 보여줍니다. 심볼릭 표기법을 사용하면 전체 숫자 값을 다시 계산할 필요 없이 특정 권한만 쉽게 수정할 수 있습니다.

요약

이 실습에서는 파일 권한을 관리하기 위한 필수 Linux 명령어들을 살펴보았습니다.

  1. touch를 사용하여 새 파일을 생성하고 기존 파일의 시간을 업데이트했습니다.
  2. chown을 사용하여 파일과 디렉토리의 소유권을 변경하는 방법을 배웠으며, 전체 디렉토리 구조에 대한 재귀적 변경 방법도 익혔습니다.
  3. chmod의 숫자 표기법과 심볼릭 표기법을 모두 사용하여 파일 및 디렉토리 권한을 수정하고, 소유자, 그룹, 기타 사용자에 대한 서로 다른 권한 수준을 이해했습니다.
  4. 스크립트 실행을 위해 실행 권한이 필요한 경우와 같이 권한이 중요한 실제 사례를 확인했습니다.
  5. chmod의 숫자 표기법과 심볼릭 표기법의 차이점과 각각 어떤 상황에 더 적합한지 정리했습니다.

이 명령어들은 Linux 시스템의 보안을 유지하고 접근을 제어하는 데 매우 중요합니다. 권한을 변경할 때, 특히 sudo를 사용할 때는 항상 주의해야 합니다. 잘못된 변경은 시스템 보안과 기능에 중대한 영향을 미칠 수 있기 때문입니다. 명령어를 실행하기 전에 항상 다시 한번 확인하고, 여러분이 만드는 변경 사항이 어떤 결과를 초래할지 충분히 이해하시기 바랍니다.