chmod 명령어 사용법

파일과 디렉터리의 접근 권한을 변경하는 명령어입니다.

권한·보안 관리연결 실습 문제 12개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

chmod [옵션] 모드 파일...

chmod(change mode)는 파일과 디렉터리에 부여된 읽기(r), 쓰기(w), 실행(x) 권한을 소유자(u)·그룹(g)·기타 사용자(o) 단위로 바꾸는 명령어입니다. 권한은 644처럼 8진수 숫자 모드로 한 번에 지정하거나, u+x처럼 기호 모드로 일부만 더하고 뺄 수 있습니다. 변경 결과는 ls -l 출력의 첫 번째 열에서 확인합니다.

실무에서는 셸 스크립트에 실행 권한을 주거나, 설정 파일·키 파일을 소유자만 읽도록 제한할 때 사용합니다. 서비스가 "Permission denied"를 낼 때도 권한을 먼저 점검하는 경우가 많습니다. 디렉터리에서 x 권한은 내부로 진입(cd)하고 내부 항목에 접근할 수 있는 권한을 뜻하므로, 파일과 같은 기준으로 판단하면 안 됩니다.

리눅스마스터·RHCSA·LPIC 시험에서는 700/600/755/644 같은 숫자 모드 지정, -R 재귀 적용, setuid·setgid·sticky bit 같은 특수 권한이 자주 출제됩니다. 비공개 디렉터리 설정, 스크립트와 문서 권한 구분, 공유 디렉터리 sticky bit 설정이 대표적인 연습 주제입니다.

자주 쓰는 옵션

옵션의미
-R, --recursive지정한 디렉터리의 하위 항목까지 재귀적으로 권한을 적용합니다.chmod -R 755 /tmp/demo/www
-v, --verbose처리한 모든 파일에 대해 진단 메시지를 출력합니다(변경되지 않은 파일 포함).chmod -v 644 /tmp/demo/readme.txt
-c, --changes-v 와 비슷하지만 실제로 권한이 바뀐 파일만 출력합니다.chmod -c 600 /tmp/demo/plan.txt
-f, --silent, --quiet권한 변경 실패 시 오류 메시지를 대부분 출력하지 않습니다.chmod -f 640 /tmp/demo/app.conf
--reference=파일모드를 직접 쓰지 않고 기준 파일과 동일한 권한으로 맞춥니다.chmod --reference=/tmp/demo/a.txt /tmp/demo/b.txt
--preserve-root-R 사용 시 루트(/)에 대한 재귀 적용을 거부합니다. chmod 는 이 동작이 기본값이 아니므로 / 를 다룰 가능성이 있는 스크립트에서 명시하면 안전합니다.chmod -R --preserve-root 755 /tmp/demo/www
--help사용법과 지원 옵션 목록을 출력합니다.chmod --help
--versioncoreutils 버전 정보를 출력합니다(Rocky 8 기준 8.30).chmod --version

실무 예시

비공개 디렉터리와 파일 권한 지정

준비: mkdir -p /tmp/demo/secure; echo 'secret plan' > /tmp/demo/secure/plan.txt

$ chmod 700 /tmp/demo/secure && chmod 600 /tmp/demo/secure/plan.txt && ls -ld /tmp/demo/secure && ls -l /tmp/demo/secure/plan.txt
drwx------. 2 root root 22 Sep 16 10:40 /tmp/demo/secure
-rw-------. 1 root root 12 Sep 16 10:40 /tmp/demo/secure/plan.txt

디렉터리는 소유자만 접근(700), 내부 파일은 소유자만 읽고 쓰도록(600) 제한하는 기본 패턴입니다.

스크립트와 문서 권한 구분

준비: mkdir -p /tmp/demo/perm; printf '#!/bin/bash\necho run\n' > /tmp/demo/perm/run.sh; echo 'readme' > /tmp/demo/perm/readme.txt

$ chmod 755 /tmp/demo/perm/run.sh && chmod 644 /tmp/demo/perm/readme.txt && ls -l /tmp/demo/perm
total 8
-rw-r--r--. 1 root root  7 Sep 16 10:40 readme.txt
-rwxr-xr-x. 1 root root 21 Sep 16 10:40 run.sh

실행해야 하는 스크립트에는 x 권한을 주고, 문서는 읽기 전용으로 둡니다.

기호 모드로 실행 권한 추가

준비: mkdir -p /tmp/demo; printf '#!/bin/bash\necho hello\n' > /tmp/demo/hello.sh; chmod 644 /tmp/demo/hello.sh

$ chmod u+x,go-w /tmp/demo/hello.sh && ls -l /tmp/demo/hello.sh
-rwxr--r--. 1 root root 23 Sep 16 10:40 /tmp/demo/hello.sh

기존 권한을 유지한 채 소유자에게만 실행 권한을 더하고, 그룹·기타 사용자의 쓰기 권한을 제거합니다. 설정 파일 644 에는 이미 g/o 쓰기 권한이 없으므로 go-w 는 결과를 바꾸지 않고 상태만 보장합니다.

디렉터리와 파일에 서로 다른 권한 적용

준비: mkdir -p /tmp/demo/permissions; echo a > /tmp/demo/permissions/auth.log; echo b > /tmp/demo/permissions/sudo.log

$ chmod 700 /tmp/demo/permissions && find /tmp/demo/permissions -type f -exec chmod 444 {} + && ls -ld /tmp/demo/permissions && ls -l /tmp/demo/permissions
drwx------. 2 root root 38 Sep 16 10:40 /tmp/demo/permissions
total 8
-r--r--r--. 1 root root 2 Sep 16 10:40 auth.log
-r--r--r--. 1 root root 2 Sep 16 10:40 sudo.log

디렉터리에는 700, 내부 파일에는 읽기 전용 444를 적용합니다. find -type f 로 파일만 골라야 문서에 실행 권한이 붙지 않습니다. 다만 444 는 그룹·기타 사용자에게도 읽기를 허용하므로, 로그처럼 비공개가 필요한 파일에는 400 또는 640 이 더 적절합니다.

공유 디렉터리에 sticky bit 설정

준비: mkdir -p /tmp/demo/dropbox

$ chmod 1777 /tmp/demo/dropbox && ls -ld /tmp/demo/dropbox
drwxrwxrwt. 2 root root 6 Sep 16 10:40 /tmp/demo/dropbox

네 자리 숫자의 맨 앞 1이 sticky bit 입니다. 권한 문자열 끝의 x 자리가 t 로 바뀌며, 누구나 파일을 만들 수 있지만 삭제·이름 변경은 해당 파일의 소유자, 디렉터리 소유자, root 만 할 수 있습니다. 1777 은 /tmp 처럼 모든 사용자가 공유해야 하는 디렉터리에만 사용하고, 특정 그룹만 쓰는 공유 공간이라면 2770(setgid) 처럼 범위를 좁히는 편이 안전합니다.

주의할 점

  • chmod -R 755 를 디렉터리에 그대로 적용하면 일반 문서에도 실행 권한이 붙습니다. find -type d / -type f 로 나눠 지정하세요.
  • 디렉터리에서 x 권한을 빼면 r 권한이 있어도 cd 하거나 내부 파일에 접근할 수 없습니다. 반대로 x 만 있고 r 이 없으면 경로를 알고 있는 파일에는 접근할 수 있지만 목록 조회는 불가능합니다.
  • 1777, 2775 처럼 네 자리에서 맨 앞은 특수 권한(setuid 4, setgid 2, sticky 1)입니다. 세 자리만 지정하면 디렉터리가 아닌 경우 기존 특수 권한이 사라질 수 있습니다.
  • chmod 777 은 모든 사용자에게 쓰기·실행을 허용하므로 문제 해결용으로도 사용하지 마세요. 접근이 막히면 소유자·그룹(chown), umask, SELinux 컨텍스트(ls -Z)를 먼저 확인하는 것이 순서입니다.
  • / 나 /etc, /usr 같은 시스템 경로에 -R 을 적용하면 시스템이 부팅·인증 불능 상태가 될 수 있습니다. --no-preserve-root 는 이런 보호 장치를 해제하는 옵션이므로 문서 예제로 실행하지 마세요.
  • chmod 는 권한만 바꿉니다. 소유자·그룹 변경은 chown, chgrp 를 써야 하며, 권한 변경은 파일 소유자와 root 만 할 수 있습니다.
  • 심볼릭 링크 자체의 모드는 chmod 로 바꿀 수 없으며, 링크가 가리키는 대상의 권한이 변경됩니다.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.