소개
이 실습에서는 Linux 의 파일 권한을 살펴봅니다. chown, touch, chmod라는 세 가지 기본 명령을 사용합니다. 이 도구는 Linux 시스템에서 파일과 디렉터리에 대한 액세스를 관리하는 데 중요합니다. 실습을 마치면 파일 생성, 파일 소유권 변경, 파일 권한 수정 방법을 이해하게 됩니다. 이러한 명령을 사용하면 시스템에서 누가 파일을 읽고, 쓰고, 실행할 수 있는지 제어할 수 있습니다.
새 파일 만들기
먼저 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는 root 권한으로 명령을 실행합니다. 비밀번호를 입력하라는 메시지가 표시될 수 있습니다.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
여전히 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/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파일을 만들고 "Another file"이라는 텍스트를 기록합니다.
이제 현재 소유권을 확인합니다.
ls -lR new-dir
ls -lR은 new-dir의 내용을 재귀적으로 표시합니다. -R 옵션은 new-dir 안의 모든 파일과 하위 디렉터리 및 그 내용을 표시하도록 ls에 지시합니다.
다음과 비슷한 출력이 표시되어야 합니다.
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안의 모든 파일과 하위 디렉터리의 소유권을 변경합니다. 이 옵션이 없으면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 옵션은 디렉터리의 내용이 아니라 디렉터리 자체를 표시하도록 ls에 지시합니다. -d가 없으면 현재 비어 있는 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를 사용할 때는 권한을 변경하는 작업에 항상 주의해야 합니다. 잘못된 변경은 시스템 보안과 기능에 큰 영향을 줄 수 있습니다. 명령을 실행하기 전에 항상 다시 확인하고, 변경 사항의 영향을 이해한 후 실행합니다.



