소개
이번 실습에서는 Linux 파일 권한의 세계를 깊이 있게 살펴봅니다. chown, touch, chmod라는 세 가지 핵심 명령어를 다룰 예정입니다. 이 도구들은 Linux 시스템에서 파일과 디렉터리에 대한 접근 권한을 관리하는 데 매우 중요합니다. 실습을 마치면 파일을 생성하고, 소유권을 변경하며, 파일 권한을 수정하는 방법을 확실히 익히게 될 것입니다. 이 명령어들을 이해하면 시스템 내 파일의 읽기, 쓰기, 실행 권한을 직접 제어할 수 있게 됩니다.
새 파일 생성하기
먼저 touch 명령어를 사용하여 새 파일을 생성해 보겠습니다. 이 다재다능한 명령어는 새로운 빈 파일을 만들거나 기존 파일의 타임스탬프를 업데이트할 때 사용합니다. 파일을 "터치(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
이 출력 내용을 분석해 보겠습니다:
-rw-rw-r--는 파일 권한을 나타냅니다(4단계에서 자세히 다룹니다). 첫 번째 문자는 파일 유형을 나타냅니다(일반 파일은-, 디렉터리는d등). 나머지 문자들은 소유자, 그룹, 기타 사용자에 대한 읽기, 쓰기, 실행 권한을 나타냅니다.- 첫 번째
labex는 파일의 현재 소유자입니다. 파일을 소유한 사용자 이름입니다. - 두 번째
labex는 파일의 현재 그룹입니다. 그룹은 권한을 공유할 수 있는 사용자들의 집합입니다. 0은 파일 크기(바이트 단위)입니다. 파일이 비어 있으므로 크기는 0입니다.Jul 29 15:11은 마지막 수정 날짜와 시간입니다.example.txt는 파일 이름입니다.
이제 파일의 소유권을 root 사용자로 변경해 보겠습니다. root는 Linux 시스템의 관리자 계정이며 특별한 권한을 가집니다.
sudo chown root:root example.txt
이 명령어의 의미는 다음과 같습니다:
sudo는 루트 권한으로 명령어를 실행합니다. 비밀번호를 입력하라는 메시지가 나타날 수 있습니다.chown은 시스템 보안에 영향을 줄 수 있는 강력한 명령어이므로 높은 권한이 필요합니다.sudo없이 실행하면 "Permission denied" 오류가 발생합니다.chown은 소유권을 변경하는 명령어입니다.root:root는 새로운 소유자와 그룹을 지정합니다(둘 다 root로 설정). 구문은owner:group입니다.example.txt는 대상 파일입니다.
변경 사항을 확인해 봅시다:
ls -l example.txt
이제 소유자와 그룹이 모두 root로 변경된 것을 확인할 수 있습니다:
-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt
여전히 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/subdir는new-dir디렉터리와 그 하위 디렉터리인subdir를 생성합니다.-p옵션은 필요에 따라 상위 디렉터리를 생성하도록mkdir에 지시합니다.-p가 없으면new-dir이 존재하지 않을 경우new-dir/subdir생성은 실패합니다.echo "Hello, world" > new-dir/file1.txt는new-dir디렉터리 안에file1.txt라는 파일을 생성하고 "Hello, world"라는 텍스트를 씁니다.>기호는 리디렉션에 사용되며,echo명령어의 출력을 지정된 파일로 보냅니다.echo "Another file" > new-dir/subdir/file2.txt는 마찬가지로new-dir/subdir디렉터리 안에file2.txt를 생성하고 텍스트를 씁니다.
이제 현재 소유권을 확인해 봅시다:
ls -lR new-dir
ls -lR은 new-dir의 내용을 재귀적으로 나열합니다. -R 옵션(recursive)은 ls가 new-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은 읽기 권한: 소유자가 파일을 열고 읽을 수 있습니다.w는 쓰기 권한: 소유자가 파일을 수정할 수 있습니다.x는 실행 권한: 소유자가 파일을 실행할 수 있습니다(프로그램이나 스크립트인 경우).-는 해당 권한이 거부되었음을 의미합니다.
- 다음 세 문자(
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) 권한을 부여합니다: 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' > script.sh
echo 'echo "Hello, World"' >> script.sh
이 명령어들은 두 가지 작업을 수행합니다:
- 첫 번째
echo명령어는script.sh를 생성하고 첫 번째 줄인#!/bin/bash를 씁니다. 이 줄을 셰뱅(shebang)이라고 하며, Linux에게 Bash로 스크립트를 실행하라고 지시합니다. - 두 번째
echo명령어는>>를 사용하여 파일 끝에 새 줄을 추가합니다.echo "Hello, World"를 작성하며, 스크립트가 실행될 때Hello, World가 출력됩니다.
파일에 두 줄이 포함되어 있는지 확인하려면 다음을 사용하세요:
cat script.sh
다음과 같이 보여야 합니다:
#!/bin/bash
echo "Hello, World"
이제 초기 권한을 확인해 봅시다:
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는 사용자(소유자)를 의미합니다. 다른 옵션으로는 그룹을 위한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 파일 권한 관리를 위한 필수 명령어들을 살펴보았습니다:
touch를 사용하여 새 파일을 생성하고 기존 파일을 업데이트했습니다.chown을 사용하여 파일 및 디렉터리 소유권을 변경하는 방법과 디렉터리 구조 전체에 대한 재귀적 변경 방법을 배웠습니다.chmod를 숫자 및 기호 표기법으로 사용하여 파일과 디렉터리 권한을 수정하고, 소유자/그룹/기타 사용자에 대한 권한 수준을 이해했습니다.- 스크립트 실행을 위해 실행 권한이 필요한 경우 등 권한이 중요한 실제 사례들을 확인했습니다.
chmod를 위한 숫자 표기법과 기호 표기법의 차이점, 그리고 각각이 언제 더 적절한지 알아보았습니다.
이 명령어들은 Linux 시스템에서 보안을 유지하고 접근을 제어하는 데 매우 중요합니다. 특히 sudo를 사용할 때는 권한 변경 시 항상 주의하십시오. 잘못된 변경은 시스템 보안과 기능에 심각한 결과를 초래할 수 있습니다. 명령어를 실행하기 전에 항상 다시 확인하고, 변경 사항이 미칠 영향을 이해하십시오.



