chmod는 유닉스(Unix) 및 유닉스 계열 운영 체제에서 사용되는 셸 명령어로, 파일이나 디렉터리의 접근 권한(퍼미션)을 설정하거나 변경하는 기능을 수행한다. 명칭은 change mode의 축약어에서 유래하였다.
개요
chmod 명령어는 AT&T 벨 연구소에서 개발되었으며, 1971년 11월 3일 AT&T 유닉스 버전 1에서 최초로 등장하였다. 이후 리눅스(Linux), macOS, FreeBSD 등 모든 유닉스 계열 운영 체제에서 표준 명령어로 자리 잡았으며, 오늘날까지 널리 사용되고 있다.
권한 체계
유닉스 계열 시스템에서 파일과 디렉터리의 권한은 세 가지 사용자 클래스로 구분된다.
- u (user): 파일의 소유자
- g (group): 파일의 그룹에 속한 사용자
- o (others): 소유자나 그룹 구성원이 아닌 기타 사용자
- a (all): 위 세 클래스 모두 (ugo와 동일)
각 클래스에 대해 부여할 수 있는 기본 권한은 다음과 같다.
- r (read): 읽기 권한. 파일의 내용을 읽거나 디렉터리 내 목록을 확인할 수 있다.
- w (write): 쓰기 권한. 파일이나 디렉터리의 내용을 수정할 수 있다.
- x (execute): 실행 권한. 파일을 실행하거나 디렉터리로 접근할 수 있다.
사용 방식
chmod는 크게 두 가지 방식으로 권한을 지정한다.
1. 기호 모드 (Symbolic Mode)
레퍼런스(사용자 클래스), 연산자, 모드의 조합으로 표현한다.
| 연산자 | 설명 |
|---|---|
+ |
지정된 클래스에 권한을 추가 |
- |
지정된 클래스에서 권한을 제거 |
= |
지정된 클래스의 권한을 정확히 설정 |
사용 예시:
$ chmod ug+rw sample # 소유자와 그룹에 읽기, 쓰기 권한 추가
$ chmod a-rwx sample # 모든 사용자의 모든 권한 제거
$ chmod u=rw,go= sample # 소유자에게만 읽기, 쓰기 설정, 나머지는 권한 제거
2. 8진법 모드 (Octal Mode)
각 권한에 숫자 값을 대응시켜 세 자리 또는 네 자리 8진수로 표현한다.
| 권한 | 숫자 값 |
|---|---|
| r (읽기) | 4 |
| w (쓰기) | 2 |
| x (실행) | 1 |
각 클래스별로 해당 권한의 숫자 값을 합산하여 한 자리로 나타낸다. 예를 들어 소유자에게 rwx(4+2+1=7), 그룹에게 rx(4+1=5), 기타 사용자에게 rx(4+1=5)를 부여하려면 chmod 755 파일명과 같이 입력한다.
주요 8진법 모드 예시:
chmod 644 파일: 소유자 rw, 그룹 r, 기타 rchmod 755 파일: 소유자 rwx, 그룹 rx, 기타 rxchmod 777 파일: 모든 사용자에게 모든 권한 부여 (보안상 권장되지 않음)chmod 0 파일: 모든 사용자의 모든 권한 제거
주요 옵션
- -R: 재귀적으로 디렉터리 내부의 모든 파일과 하위 디렉터리의 권한을 함께 변경한다.
- -v: 자세한 모드로, 실행 중인 모든 파일을 출력한다.
특별 모드
chmod는 기본 권한 외에도 특별한 모드를 설정할 수 있다.
- s (setuid/setgid): setuid는 파일 실행 시 소유자의 권한으로 실행되도록 하고, setgid는 그룹의 권한으로 실행되도록 한다.
- t (sticky bit): 스티키 비트가 설정된 디렉터리에서는 파일의 소유자만 자신의 파일을 삭제할 수 있다.
관련 명령어
- chown: 파일이나 디렉터리의 소유권을 변경하는 명령어
- chgrp: 파일이나 디렉터리의 그룹을 변경하는 명령어
- ls -l: 현재 파일의 권한 상태를 확인하는 명령어
보안 참고사항
chmod 777과 같이 모든 사용자에게 모든 권한을 부여하는 방식은 시스템 보안에 취약점을 만들 수 있으므로 실무에서는 권장되지 않는다. 필요한 최소한의 권한만을 부여하는 것이 일반적인 보안 원칙이다.