chmod는 무엇을 하나요?
chmod(change mode)는 파일이나 폴더를 누가 읽고, 쓰고, 실행할 수 있는지 정하는 Linux 및 Unix 명령어입니다. 모든 파일에는 세 가지 권한 세트가 있습니다: 소유자용, 그룹용, 그리고 나머지 모든 사용자(기타 사용자)용입니다. 위 계산기는 이 9개의 체크박스를 chmod가 요구하는 숫자나 문자로 바꾸고, 반대로도 변환합니다.
chmod에 모드를 주는 방법은 두 가지입니다. chmod 755 script.sh처럼 8진수로 주거나, chmod u+x script.sh처럼 기호 형식으로 줍니다. 파일 권한은 파일 소유자나 root만 바꿀 수 있습니다.

Linux 파일 권한의 작동 방식
각 권한에는 값이 있습니다: 읽기 = 4, 쓰기 = 2, 실행 = 1. 클래스별로 더하면 0부터 7까지의 숫자 하나가 되고, 이 세 숫자를 소유자, 그룹, 기타 사용자 순서로 씁니다. 따라서 rwx는 4+2+1 = 7, r-x는 4+0+1 = 5, rwxr-xr-x는 755입니다.
ls -l을 실행하면 같은 내용을 -rwxr-xr-x처럼 문자로 볼 수 있습니다. 첫 문자는 파일 유형(-는 일반 파일, d는 디렉터리, l은 심볼릭 링크)이고, 그 뒤로 소유자, 그룹, 기타 사용자의 rwx 세 묶음이 이어집니다. 대시는 해당 권한이 꺼져 있다는 뜻입니다.
이 문자들은 파일과 폴더에서 의미가 조금 다릅니다:
파일: 열어서 내용을 읽습니다. 폴더: ls로 안에 있는 이름 목록을 봅니다.
파일: 내용을 변경합니다. 폴더: 안에서 파일을 만들고, 삭제하고, 이름을 바꿉니다(폴더의 실행 권한도 필요). 파일을 삭제할 수 있는지는 파일이 아니라 폴더의 쓰기 권한에 달려 있습니다.
파일: 프로그램이나 스크립트로 실행합니다. 폴더: cd로 들어가고 안의 파일을 이름으로 엽니다. 읽기 권한만 있고 실행 권한이 없으면 폴더 안의 이름은 볼 수 있지만 아무것도 열 수 없습니다.
u는 파일 소유자, g는 그룹, o는 나머지 모든 사용자입니다. Linux는 나에게 해당하는 첫 번째 클래스만 적용합니다: 내가 소유자라면 그룹과 기타 사용자 권한이 더 많이 허용하더라도 나에게는 적용되지 않습니다.
Advertisement
자주 쓰는 chmod 권한과 사용 시기
아래 모드로 실제 상황 대부분을 해결할 수 있습니다. 대부분은 계산기의 프리셋 버튼으로도 제공됩니다.
대부분 파일의 기본값입니다: 웹 페이지, 이미지, 비밀이 아닌 설정 파일. 소유자는 편집할 수 있고 나머지는 읽기만 할 수 있습니다.
디렉터리, 그리고 누구나 실행할 수 있는 프로그램이나 스크립트의 기본값입니다. 소유자만 변경할 수 있습니다.
소유자만 읽고 쓸 수 있습니다. SSH 개인 키, .env 파일, API 토큰 등 비밀번호가 들어 있는 모든 파일에 사용하세요.
소유자만 폴더를 열거나 목록을 볼 수 있습니다. ~/.ssh와 개인 스크립트 폴더의 표준입니다.
소유자는 편집하고, 한 그룹(예: 웹 서버 그룹)은 읽을 수 있으며, 그 외에는 아무도 파일을 볼 수 없습니다.
소유자는 모든 권한을 갖고, 그룹은 폴더를 열고 읽을 수 있으며, 기타 사용자는 접근할 수 없습니다.
소유자와 그룹 모두 편집할 수 있습니다. 여러 사용자가 그룹을 공유하는 팀 서버에서 흔히 씁니다.
소유자와 그룹은 안에서 파일을 만들고 삭제할 수 있고, 기타 사용자는 보기만 할 수 있습니다.
소유자만 읽을 수 있고 아무도 쓸 수 없습니다. AWS는 다운로드한 .pem 키 페어를 SSH에 사용하기 전에 chmod 400을 실행하라고 안내합니다.
시스템의 모든 사용자와 프로세스가 읽고, 변경하고, 실행할 수 있습니다. 다음 섹션에서 설명하듯 올바른 해결책인 경우는 거의 없습니다.
chmod 755 vs 644 vs 777
755와 644의 차이는 실행 비트뿐입니다: 755는 누구나 파일을 실행하거나 폴더를 열 수 있게 하고, 644는 그렇지 않습니다. 그래서 일반적인 규칙이 폴더는 755, 파일은 644입니다: 폴더는 들어가려면 실행 권한이 필요하지만, 대부분의 파일은 실행될 일이 없어야 합니다.
777은 웹 서버 사용자를 포함해 시스템의 모든 계정에 쓰기 권한을 줍니다. 서버의 사이트나 스크립트 하나만 해킹되어도 공격자가 파일을 변경하거나 바꿔치기하고, 페이지에 악성 코드를 넣거나 백도어를 심을 수 있습니다. "Permission denied" 오류가 날 때 진짜 해결책은 대개 777이 아니라 올바른 소유자(chown)나 그룹을 지정하는 것입니다.
가장 흔한 경우의 권장 권한은 다음과 같습니다:
웹사이트 파일(HTML, PHP, 이미지):
644. 웹사이트 폴더:755. WordPress와 대부분의 호스팅 제어판이 권장하는 설정입니다.wp-config.php 등 데이터베이스 비밀번호가 담긴 파일: WordPress는 서버의 다른 사용자가 읽지 못하도록
440또는400을 권장합니다.600이나640도 소유자가 편집할 수 있으면서 파일을 비공개로 유지합니다.웹 서버가 써야 하는 업로드나 캐시 폴더:
777을 쓰는 대신 웹 서버 그룹에 쓰기 권한을 주거나(775) 웹 서버 사용자를 소유자로 지정하세요.~/.ssh 폴더:
700. 개인 키(id_ed25519,id_rsa):600또는400. authorized_keys:600. 공개 키(.pub):644.실행하려는 셸 스크립트:
755, 본인만 실행해야 한다면700.chmod +x script.sh는 다른 비트는 건드리지 않고 실행 권한만 추가합니다.
Advertisement
SSH 키의 "Permissions 0644 are too open" 오류 해결
SSH는 다른 사용자가 읽을 수 있는 개인 키를 무시하고 WARNING: UNPROTECTED PRIVATE KEY FILE!에 이어 Permissions 0644 for '/home/you/.ssh/id_rsa' are too open을 출력합니다. chmod 600 ~/.ssh/id_rsa(또는 chmod 400)를 실행한 뒤 다시 접속하세요. 서버 쪽에서는 기본 설정인 StrictModes yes일 때 authorized_keys 파일, ~/.ssh, 홈 폴더 중 하나라도 그룹이나 기타 사용자가 쓸 수 있으면 SSH 데몬이 authorized_keys를 무시합니다.
권한이 올바른데도 접속이 실패한다면 서버에서 22번 포트가 열려 있는지 확인하세요.
특수 권한: Setuid, Setgid, Sticky Bit
맨 앞에 붙는 네 번째 숫자는 세 가지 특수 비트를 추가합니다: 4 = setuid, 2 = setgid, 1 = sticky. 다른 숫자처럼 더해지므로 6755는 setuid와 setgid를 합친 것입니다. ls -l에서는 실행 문자 자리에 표시됩니다: 소유자나 그룹 위치에는 s, 기타 사용자 위치에는 t.
Linux의 특이점 하나: GNU chmod 755 dir(및 chmod 0755 dir)은 디렉터리에 이미 설정된 setuid나 setgid 비트를 그대로 둡니다. 이를 지우려면 chmod g-s dir(두 비트 모두라면 chmod a-s dir)처럼 명시하거나, chmod 00755 dir처럼 다섯 자리를 사용하세요.
setuid가 설정된 프로그램은 실행한 사용자가 아니라 파일 소유자의 권한으로 실행됩니다. 대부분의 Linux 시스템에서 /usr/bin/passwd는 4755(-rwsr-xr-x)이므로 일반 사용자도 root 소유의 비밀번호 파일을 갱신할 수 있습니다. Linux는 셸 스크립트와 디렉터리의 setuid를 무시합니다.
프로그램에 설정하면 파일의 그룹 권한으로 실행됩니다. 폴더에서 더 유용한데, 안에서 새로 만든 파일은 폴더의 그룹을 갖고 새 하위 폴더는 setgid를 물려받습니다. 2775는 팀 공유 폴더의 대표적인 모드입니다.
폴더에 설정하면 누구나 쓸 수 있는 폴더라도 파일 소유자, 폴더 소유자, root만 그 안의 파일을 삭제하거나 이름을 바꿀 수 있습니다. 그래서 /tmp가 1777(drwxrwxrwt)입니다. Linux는 파일의 sticky bit(스티키 비트)를 무시합니다.
ls -l의 대문자 S나 T는 특수 비트는 설정되었지만 같은 위치의 실행 비트는 설정되지 않았다는 뜻입니다. 예를 들어 4644는 rwSr--r--, 1666은 rw-rw-rwT로 표시됩니다.
Advertisement
기호 모드: u, g, o, a와 +, -, =
기호 모드는 현재 권한을 기준으로 상대적으로 변경하며, 단순한 8진수로는 이렇게 할 수 없습니다. 세 부분으로 구성됩니다: 대상(u 소유자, g 그룹, o 기타 사용자, a 전체), 연산자(+ 추가, - 제거, = 정확히 지정), 권한(r, w, x, 그리고 s와 t). 여러 변경은 공백 없이 쉼표로 구분합니다.
대상 문자 없이 chmod +x file을 쓰면 세 클래스 모두에 적용되며, umask가 막는 비트는 제외됩니다. 일반적인 umask 022에서는 a+x와 같습니다.
chmod u+x deploy.sh: 소유자가 스크립트를 실행할 수 있게 하고 다른 것은 바꾸지 않습니다.chmod go-w report.txt: 그룹과 기타 사용자의 쓰기 권한을 제거합니다.chmod o= secrets.txt: 기타 사용자의 모든 권한을 없앱니다.chmod a+r index.html: 모두가 파일을 읽을 수 있습니다.chmod u=rwx,g=rx,o=rx app: 755를 기호로 쓰는 방법입니다. 계산기는 어떤 모드든 이 형식으로 보여 줍니다.chmod -R u=rwX,go=rX public_html: 대문자 X는 폴더와 이미 실행 가능한 파일에만 실행 권한을 추가하므로, 폴더는 755, 일반 파일은 644가 됩니다.
umask: 새 파일의 기본 권한
umask는 새 파일과 폴더가 갖는 권한을 결정합니다. 대부분의 프로그램은 파일을 666(rw-rw-rw-), 폴더를 777로 만들고, umask에 설정된 비트를 모두 끕니다. 흔히 쓰는 umask 022에서는 새 파일이 644, 새 폴더가 755가 됩니다.
umask는 뺄셈이 아니라 비트 마스크입니다. umask 027에서 파일은 640이 되는데, 666에서 027을 자릿수별로 빼면 유효한 모드조차 나오지 않습니다. 계산기의 Umask 탭을 열면 어떤 값이든 결과를 볼 수 있습니다.
022: 파일 644, 폴더 755. 일반적인 기본값입니다.002: 파일 664, 폴더 775. 그룹이 내가 만든 파일을 편집할 수 있으며, 사용자마다 개인 그룹이 있는 환경에서 흔합니다.027: 파일 640, 폴더 750. 기타 사용자에게는 아무 권한도 없어 서버에 적합합니다.077: 파일 600, 폴더 700. 완전히 비공개입니다.umask로 현재 값을,umask -S로 문자 형식을 확인하고,umask 027로 현재 셸의 값을 바꿀 수 있습니다. 계속 유지하려면 이 명령을~/.bashrc나~/.profile에 추가하세요.
Advertisement
chmod 계산기 사용 방법
소유자, 그룹, 기타 사용자의 읽기, 쓰기, 실행을 체크하거나 644, 755 같은 프리셋을 클릭하세요. 각 행에 해당 숫자가 바로 표시됩니다.
750이나 2775 같은 8진수를 입력하거나 rwxr-x--- 같은 기호 문자열을 붙여 넣으세요. drwxr-sr-x 같은 전체 ls -l 문자열도 되며, 파일 유형이 함께 표시됩니다.
Setuid, Setgid, Sticky를 체크하면 4자리 모드가 나옵니다. sticky bit 없이 누구나 쓸 수 있는 모드에는 경고가 표시됩니다.
파일이나 폴더 이름을 입력하고, 디렉터리 전체에 적용하려면 재귀를 체크한 뒤 숫자형 또는 기호형 chmod 명령어를 복사하세요. 페이지 주소에 모드가 저장되므로(예: ?mode=750) 북마크하거나 공유할 수 있습니다.
chmod 명령어 예시
Linux나 macOS 터미널에서 실행하세요. 파일이 다른 사용자나 root 소유라면 앞에 sudo를 붙이세요.
chmod +x deploy.sh # 실행 권한 추가
chmod 755 deploy.sh # 또는 전체 모드 지정
./deploy.shfind /var/www/html -type d -exec chmod 755 {} +
find /var/www/html -type f -exec chmod 644 {} +chmod -R 755 folder # 파일도 실행 가능해짐
chmod -R u=rwX,go=rX folder # 폴더 755, 파일 644chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/id_ed25519.pubstat -c '%a %n' file # Linux: 644 file
stat -f '%Lp %N' file # macOS: 644 file
stat -f '%Mp%Lp %N' file # macOS, 특수 비트 포함: 0644 filechgrp developers /srv/project
chmod 2775 /srv/project # 새 파일은 developers 그룹을 가짐더 많은 개발자 도구
개발자와 시스템 관리자를 위한 다른 무료 도구도 모두 브라우저에서 사용할 수 있습니다. 파일이나 레코드에 고유 ID가 필요하다면 UUID 생성기를 사용해 보세요.