리눅스를 처음 접하면서 가장 당황스러운 순간은 내가 만든 파일인데도 "건드리지 마!"라고 거부당할 때다. 윈도우에서는 파일을 만들면 당연히 실행하고 수정할 수 있었지만, 리눅스는 주인에게도 엄격하다. 오늘은 내가 직접 만든 쉘 스크립트가 실행되지 않아 쩔쩔맸던 경험과 함께, 리눅스의 보안 핵심인 권한(Permission) 설정에 대해 다뤄보려 한다.
1. 나의 경험담: "내가 주인인데 왜 안 돼?"
WSL2 환경에서 개발 공부를 하던 중, 반복되는 명령어를 줄이기 위해 간단한 자동화 스크립트(hello.sh)를 만들었다. 기분 좋게 실행 명령어를 입력했는데, 돌아온 대답은 냉정했다.
bash: ./hello.sh: Permission denied
분명 내가 만든 파일이고, 내용도 완벽한데 '권한이 거부되었다'니? 처음에는 파일이 깨진 줄 알고 몇 번이나 다시 만들었지만 결과는 같았다. 리눅스는 단순히 파일을 만드는 것과 그 파일을 **'실행할 수 있는 권한'**을 부여하는 것을 철저히 분리해서 관리한다는 사실을 그때야 깨달았다.
2. Before: 태어났지만 움직일 수 없는 파일
실험을 위해 텍스트를 출력하는 간단한 스크립트를 만들고 상태를 확인해 보았다.
실험 코드:
# 1. 쉘 스크립트 파일 생성
echo "echo '안녕하세요, 리눅스 권한 테스트 중입니다!'" > hello.sh
# 2. 파일 권한 상태 확인
ls -l hello.sh
# 3. 실행 시도 (에러 발생 예정)
./hello.sh
현재 파일의 상태를 ls -l로 확인해보니 -rw-r--r--라고 표시되었다. 맨 앞의 세 글자(rw-)는 나(소유자)에게 읽기(r)와 쓰기(w) 권한은 있지만, 실행(x) 권한이 빠져 있음을 의미한다.
![Image 1: A Linux terminal screen. At the top, 'ls -l hello.sh' shows permissions as '-rw-r--r--'. Below, the user tries to run './hello.sh' and a bright red 'Permission denied' error message appears. The user feels frustrated.] (▲ Before: 파일은 존재하지만 실행 권한(x)이 없어 거부당하는 모습. 리눅스에서는 파일의 용도에 맞는 '자격'이 필요하다.)
3. Action: 권한의 마법사 chmod 등판
이때 필요한 명령어가 바로 **chmod (Change Mode)**다. 파일의 성격에 맞게 권한을 변경해주는 도구다. 가장 대중적으로 쓰이는 두 가지 방법을 사용해 보았다.
- 방법 1 (직관적): chmod +x hello.sh (실행 권한을 추가한다)
- 방법 2 (숫자 이용): chmod 755 hello.sh (주인은 모든 권한, 나머지는 읽고 실행만)
나는 가장 확실한 방법인 755 설정을 선택했다. 여기서 '7'은 읽기(4)+쓰기(2)+실행(1)을 모두 합친 숫자다.
4. After: 드디어 봉인이 풀리다
권한을 변경한 후 다시 실행해 보았다. 결과는 어땠을까?
수정 및 확인 코드:
# 권한 부여 (실행 권한 추가)
chmod 755 hello.sh
# 변경된 권한 확인
ls -l hello.sh
# 다시 실행 시도
./hello.sh
![Image 2: The same terminal. After typing 'chmod 755 hello.sh', the 'ls -l' output now shows '-rwxr-xr-x' (notice the 'x' for execute). The user runs './hello.sh' again, and it successfully prints '안녕하세요, 리눅스 권한 테스트 중입니다!' in green text.] (▲ After: 권한이 -rwxr-xr-x로 바뀌며 'x'가 추가되었다. 이제 터미널은 내 명령을 거부하지 않고 반갑게 인사말을 출력한다.)
5. 실험을 마치며: 리눅스가 깐깐한 이유
처음에는 "귀찮게 왜 이런 단계를 거쳐야 하나" 싶었지만, 곰곰이 생각해보니 이것이 리눅스를 안전하게 만드는 핵심이었다. 만약 인터넷에서 내려받은 아무 파일이나 기본적으로 실행 권한을 가지고 있다면, 실수로 바이러스나 악성 스크립트를 실행해 시스템을 망가뜨릴 위험이 크기 때문이다.
오늘 배운 인사이트:
- 리눅스 권한의 3요소: 읽기(r), 쓰기(w), 실행(x).
- ls -l의 중요성: 파일의 이름만 보지 말고, 그 파일이 가진 '자격'을 먼저 확인하자.
- chmod는 책임이다: 권한을 준다는 것은 그 파일의 실행 결과도 내가 책임진다는 뜻이다.
"Permission Denied"는 에러가 아니라, 시스템이 나에게 보내는 **"이 파일을 실행해도 괜찮은지 한 번 더 확인해봐"**라는 안전 메시지였던 셈이다. 이제 권한의 원리를 이해했으니, 다음 시간에는 여러 사용자가 함께 쓰는 서버에서 파일의 주인을 아예 바꿔버리는 chown의 세계로 떠나보자.
'IT' 카테고리의 다른 글
| [리눅스 기초 #6] 터미널에서 파일 읽기: cat으로 쏟아내고 more로 끊어보기 (0) | 2026.01.26 |
|---|---|
| [리눅스 기초 #5] "내 집인데 왜 못 들어가?" : chown으로 파일 소유권 되찾기 (0) | 2026.01.26 |
| [리눅스 기초 #3] 검은 미로 속에서 길을 잃다: 나침반(pwd)과 탐지기(find, cat)로 보물 찾기 (0) | 2026.01.25 |
| [리눅스 기초 #2] 휴지통 없는 세상: rm 명령어의 냉혹함과 복구 불가능한 상실의 경험 (0) | 2026.01.25 |
| [리눅스 기초 #1] 검은 화면의 공포를 이기다: ls와 cd로 첫 번째 나만의 공간 만들기 (1) | 2026.01.25 |