리눅스 권한과 chmod — permission denied 끝내기
"permission denied" — 리눅스 쓰다 보면 꼭 만나는 그 메시지. 사실 무서운 게 아니라, 그냥 "이 파일은 네 거 아니야"라는 안내예요.
리눅스를 좀 쓰다 보면 반드시 만납니다 — Permission denied. 스크립트를 실행하려는데, 파일을 고치려는데, 폴더에 들어가려는데 "권한 없음"이라고 거부당하는 그 순간. 처음엔 당황스럽지만, 사실 이건 리눅스가 "여러 사람이 같이 쓰는 컴퓨터"로 설계됐기 때문에 생기는, 아주 합리적인 장치예요.
이 글은 그 권한 시스템을 한 번에 정리합니다 — ls -l이 보여주는 drwxr-xr-x 같은 암호 해독, "누가 무엇을 할 수 있나"의 규칙, 그걸 바꾸는 chmod(기호 방식·숫자 방식), 소유자를 바꾸는 chown, 그리고 "permission denied" 떴을 때 체크 순서까지. 26편 입문 시리즈 9편이고, 끝나면 그 메시지가 더는 무섭지 않을 거예요.
~/linux-practice에서 실습합니다. 시스템 파일(/etc 등)의 권한은 구경만 하고, 바꾸는 실습은 연습 폴더 안에서만 하세요.
ls -l 한 줄 해독 — drwxr-xr-x가 뭔가
먼저 권한이 어떻게 표시되는지 봅니다. 연습 폴더에서:
맨 앞 그 10글자가 권한입니다. -rw-r--r--를 쪼개보면:
- 1번째 글자 = 종류.
-면 일반 파일,d면 디렉토리(폴더),l이면 링크. 그래서 폴더는drwxr-xr-x처럼d로 시작해요. - 나머지 9글자 = 3글자씩 3묶음. [소유자][그룹][기타] 순서. 각 묶음은 항상
r(읽기)·w(쓰기)·x(실행) 자리이고, 권한이 없으면-.
그러니까 -rw-r--r--는 "일반 파일 / 소유자는 읽고+쓰기(rw-) / 그룹은 읽기만(r--) / 기타도 읽기만(r--)". drwxr-xr-x는 "폴더 / 소유자 rwx / 그룹 r-x / 기타 r-x". 그 뒤의 jspark jspark는 소유자 이름과 그룹 이름입니다(보통 사용자명과 같은 이름의 그룹이 자동 생김).
ls -l의 맨 앞 10글자 = [종류][소유자 rwx][그룹 rwx][기타 rwx]. r=읽기, w=쓰기, x=실행, -=없음. 이것만 읽을 줄 알면 절반 끝.r·w·x가 파일과 폴더에서 각각 뭘 뜻하나
헷갈리는 지점 하나 — r·w·x가 파일일 때와 폴더일 때 의미가 살짝 다릅니다:
| 권한 | 파일에서 / 폴더에서 |
|---|---|
| r (읽기) | 파일: 내용을 볼 수 있음(cat·less). 폴더: 그 안에 뭐가 있는지 목록을 볼 수 있음(ls). |
| w (쓰기) | 파일: 내용을 고칠 수 있음(편집·저장). 폴더: 그 안에 파일을 만들거나 지우거나 이름 바꿀 수 있음. |
| x (실행) | 파일: 프로그램·스크립트로 실행할 수 있음. 폴더: 그 폴더 안으로 들어갈 수 있음(cd). — 폴더는 x 없으면 못 들어감! |
그래서 폴더는 보통 r과 x가 세트로 다닙니다(r-x = 들어가서 목록 보기). 스크립트 파일은 x가 있어야 ./내스크립트.sh로 실행되고요 — 이게 "스크립트 만들었는데 실행이 안 돼요"의 99% 원인입니다(셸 스크립트는 시리즈 21편).
chmod — 권한 바꾸기 (기호 방식 · 숫자 방식)
chmod(change mode)가 권한을 바꾸는 명령입니다. 두 가지 표기법이 있어요 — 둘 다 결과는 같으니 편한 걸 쓰면 됩니다.
① 기호 방식 — "누구에게 무엇을 더하거나 빼라"
패턴: chmod [대상][+ 또는 -][권한] 파일. 대상은 u(소유자)·g(그룹)·o(기타)·a(전부), 권한은 r·w·x. +는 추가, -는 제거. 직관적이죠.
② 숫자 방식 — 한 번에 통째로 지정
이건 처음엔 암호 같지만 알고 나면 빠릅니다. r=4, w=2, x=1로 보고, 한 묶음의 권한을 더해서 한 자리 숫자로 만들어요. 그걸 [소유자][그룹][기타] 세 자리로 씁니다:
| 숫자 | 의미 (r=4 w=2 x=1) |
|---|---|
| 7 | 4+2+1 = rwx (다 됨) |
| 6 | 4+2 = rw- (읽기+쓰기) |
| 5 | 4+1 = r-x (읽기+실행 — 폴더에 흔함) |
| 4 | 4 = r-- (읽기만) |
| 0 | --- (아무것도 안 됨) |
외울 건 사실상 둘 — 755(실행되는 것: 스크립트·폴더)와 644(평범한 파일). 나머지는 필요할 때 위 표 보고 계산하면 됩니다.
chown — 소유자 바꾸기, 그리고 sudo와의 관계
chmod가 "권한"이라면 chown(change owner)은 "주인"을 바꿉니다. 보통 sudo가 필요해요(남의 파일을 내 거로 가져오는 거니까).
여기서 중요한 연결고리 — 그동안 sudo를 "관리자 권한으로"라고만 알고 썼죠? 이제 그 의미가 명확해집니다: sudo는 "권한 검사를 건너뛰고 관리자(root)로 실행"입니다. 그래서 permission denied가 떴을 때 sudo를 붙이면 되는 거예요. 다만 — 함부로 sudo를 남발하지 마세요. "내 파일인데 권한이 꼬였나?"를 먼저 의심하는 게 순서고, sudo는 시스템 파일을 정말 건드려야 할 때만. (sudo를 누가 쓸 수 있는지는 다음 10편 "사용자·그룹"에서.)
실전 — "permission denied" 만났을 때 체크 순서
이 메시지를 만나면 당황 말고 순서대로:
ls -l 그파일— 권한과 소유자를 본다. 맨 앞 10글자, 그리고 소유자 이름.- 내가 그 소유자인가? 맞으면 → 소유자 권한 자리(2~4번째 글자)를 본다.
x가 없어서 실행이 안 되는 거면chmod u+x 그파일.w가 없어서 못 고치는 거면chmod u+w. - 폴더에 못 들어가는 거면 → 그 폴더(와 위 폴더들)에
x권한이 있는지 확인.chmod u+x 폴더. - 내 파일이 아니거나 시스템 파일이면 → 정말 건드려야 하는 게 맞나 다시 생각. 맞으면
sudo를 붙이거나, 소유권 자체가 잘못된 거면sudo chown으로 바로잡기.
sudo chmod -R 777 폴더" — 절대 하지 마세요. 777은 "아무나 읽고 쓰고 실행"이라 보안 구멍이 됩니다. 특히 ~/.ssh나 웹 서버 폴더에 777 주면 동작 자체가 거부되기도 해요(너무 열려 있어서). 권한 문제는 "딱 필요한 만큼만" 주는 게 정답입니다 — 755·644·600 중에서.ls -l 맨 앞 10글자 = [종류][소유 rwx][그룹 rwx][기타 rwx]. r/w/x는 파일과 폴더에서 의미가 다름(폴더는 x=들어가기). chmod u+x(기호) 또는 chmod 755(숫자, r4 w2 x1)로 권한 바꾸기 — 외울 건 755·644·600. sudo chown 이름:그룹 파일로 주인 바꾸기. sudo=권한 검사 건너뛰기(남발 금지). chmod 777 절대 금지.시리즈 흐름
- 1~5편 입문 묶음 ✔ 6편 파일 명령어 ✔ 7편 텍스트 명령어 ✔ 8편 nano ✔
- 9편 — 권한과 chmod (이 글) ✔
- 10편 — 사용자·그룹 관리 (사용자 추가·그룹·
sudo권한 — 권한의 "누구" 쪽) - 11편 — apt / 12편 — 파이프·리다이렉션 / 13편 — vim / 14편 — 프로세스 관리 …
오늘 할 일: ~/linux-practice에서 touch t.sh → ls -l t.sh(권한 확인) → chmod u+x t.sh → 다시 ls -l(앞 글자가 바뀐 거 확인) → chmod 644 t.sh로 되돌리기. x가 붙고 빠지는 걸 눈으로 보면 머리에 박힙니다. 10편에서 만나요. (권한 표기 전체는 우분투 위키 File Permissions에도 정리돼 있어요.)
우분투·리눅스 입문 시리즈
이제 "permission denied"가 안 무섭습니다. 10편 "리눅스 사용자·그룹 관리"로 이어집니다.
다음 편은 JUNAI 블로그에서 이어 보세요.