리눅스 chmod 명령어 사용법 - 권한 8진수 표기와 실전 예제
이 명령어를 언제 쓰는가
배포 스크립트를 받아서 실행하려는데 Permission denied가 뜨거나, 웹서버(nginx, apache)가 업로드 디렉터리에 파일을 못 쓰거나, SSH 접속 시 UNPROTECTED PRIVATE KEY FILE 경고로 로그인이 막히는 상황이 chmod를 꺼내는 순간이다.
chmod는 파일과 디렉터리의 접근 권한(퍼미션)을 바꾼다. 리눅스 서버 사고의 상당수가 잘못된 chmod에서 시작하므로, 무엇을 왜 여는지 알고 써야 한다.
기본 형식
chmod [옵션] 모드 파일...
- 모드 — 8진수(
644) 또는 기호(u+x) 두 가지 표기를 쓴다. - 파일 — 여러 개를 나열하거나 글로브(
*.sh)를 쓸 수 있다.
8진수는 읽기 4, 쓰기 2, 실행 1을 더한 값을 소유자·그룹·기타 순으로 세 자리로 적는다. 644는 소유자 읽기+쓰기(6), 그룹과 기타는 읽기만(4)이다. ls -l로 확인하면 이렇게 보인다.
$ ls -l app.conf
-rw-r--r-- 1 deploy deploy 1024 Aug 25 10:12 app.conf
자주 쓰는 옵션
| 옵션 | 의미 | 예시 |
|---|---|---|
-R | 디렉터리 하위 전체에 재귀 적용 | chmod -R 755 /var/www/html |
-v | 바꾼 파일을 모두 출력 | chmod -v 600 id_rsa |
-c | 실제로 값이 바뀐 것만 출력 | chmod -Rc g+w logs/ |
--reference=파일 | 다른 파일과 같은 권한으로 맞춤 | chmod --reference=old.conf new.conf |
u g o a | 대상: 소유자 / 그룹 / 기타 / 전체 | chmod g+w report.csv |
+ - = | 권한 추가 / 제거 / 지정 | chmod o= secret.txt |
X(대문자) | 디렉터리이거나 이미 실행 가능한 파일에만 x 부여 | chmod -R u+rwX,go+rX src/ |
--reference와 -c는 GNU coreutils 전용이다. macOS/BSD chmod에는 둘 다 없고 -v의 동작도 다르다.
실전 예제
1. 받아온 배포 스크립트에 실행 권한을 준다.
chmod +x deploy.sh
./deploy.sh
2. SSH 개인키 권한 오류를 잡는다. 개인키가 그룹·기타에 열려 있으면 ssh가 아예 사용을 거부한다.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub ~/.ssh/known_hosts
chmod 600 ~/.ssh/authorized_keys
3. 웹 문서 루트를 디렉터리 755 / 파일 644로 정리한다. 재귀 chmod 한 방으로는 이 구분이 안 되므로 find로 나눈다.
find /var/www/html -type d -exec chmod 755 {} +
find /var/www/html -type f -exec chmod 644 {} +
4. 팀 공유 디렉터리에 setgid를 걸어 새 파일이 항상 같은 그룹으로 생기게 한다.
chgrp devteam /srv/share
chmod 2775 /srv/share
앞자리 2가 setgid다. 이후 ls -ld /srv/share는 drwxrwsr-x로 보인다. s가 setgid 표시다.
5. 다른 사람은 아무것도 못 보게 닫는다.
chmod go= /etc/myapp/secrets.env
함정과 주의점
chmod 777은 해결책이 아니다. 권한 문제가 나면 반사적으로 777을 주는 경우가 많은데, 이는 서버의 아무 계정이나 그 파일을 고쳐 쓸 수 있게 만드는 것이다. 원인은 대부분 권한 비트가 아니라 소유자다. 먼저ls -l로 소유자를 보고chown으로 고쳐야 한다. 특히 PHP 업로드 디렉터리를 777로 두면 웹셸 업로드로 이어진다.chmod -R 755 ~/.ssh는 SSH를 망가뜨린다. 개인키까지755가 되어 ssh가UNPROTECTED PRIVATE KEY FILE로 사용을 거부한다. 서버 쪽에서는 홈 디렉터리나~/.ssh,authorized_keys가 그룹·기타에 쓰기까지 열리면(775,777등) sshd의StrictModes가 공개키 인증을 조용히 건너뛴다. "키를 넣었는데 자꾸 비밀번호를 묻는다"의 대표 원인이다.- 재귀 실행 권한은 소문자 x가 아니라 대문자 X를 쓴다.
chmod -R a+x dir/는 이미지와 설정 파일까지 전부 실행 파일로 만든다.chmod -R a+X dir/는 디렉터리와 원래 실행 가능하던 파일만 건드린다. chmod -R을/나/usr에 실수로 걸면 복구가 어렵다. 재귀 옵션을 쓸 때는 명령을 치기 전에 대상 경로를ls -ld로 한 번 확인하는 습관을 들인다.
함께 보면 좋은 명령어
chown— 권한 비트보다 소유자가 원인인 경우가 더 많다.umask— 새로 만들어지는 파일의 기본 권한을 정한다.ls -l— 바꾸기 전후를 확인하는 기본 도구.getfacl / setfacl— 소유자·그룹·기타 세 칸으로 부족할 때 쓰는 세밀한 권한.