Devin.KR
로그인

리눅스 chmod 명령어 사용법 - 권한 8진수 표기와 실전 예제

개발자 조회 1

이 명령어를 언제 쓰는가

배포 스크립트를 받아서 실행하려는데 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/sharedrwxrwsr-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 — 소유자·그룹·기타 세 칸으로 부족할 때 쓰는 세밀한 권한.