chmod (Change Mode)
chmod는 파일이나 디렉터리의 읽기(Read), 쓰기(Write), 실행(Execute) 권한을 변경하는 명령어입니다. 리눅스 보안 관리에서 가장 중요한 명령어 중 하나입니다.
1. 권한 계산법 (8진수 모드)
각 권한은 비트(Bit) 값에 대응하며, 이 값들을 더하여(OR 연산) 최종 권한을 결정합니다.
- 4 (Read, r): 읽기 권한
- 2 (Write, w): 쓰기 권한
- 1 (Execute, x): 실행 권한
이 숫자들을 합쳐서 세 자리 숫자로 표현합니다 (소유자 / 그룹 / 기타 사용자). * 7 (4+2+1): 모든 권한 (rwx) * 6 (4+2): 읽기 및 쓰기 (rw-) * 5 (4+1): 읽기 및 실행 (r-x)
2. 기본 사용법
chmod [옵션] 모드 파일명
3. 주요 옵션 및 활용 예시
| 명령어 | 설명 |
|---|---|
chmod 777 file |
모든 사용자에게 모든 권한 부여 (매우 위험) |
chmod 755 script.sh |
소유자는 모든 권한, 나머지는 읽기/실행만 (일반적인 실행 파일) |
chmod 644 file.txt |
소유자는 읽기/쓰기, 나머지는 읽기만 (일반적인 문서 파일) |
chmod -R 700 dir |
Recursive. 디렉터리와 그 내부의 모든 파일 권한을 한 번에 변경 |
문자를 이용한 변경 (Symbolic Mode)
chmod u+x file: user(소유자)에게 execute 권한을 + 추가chmod g-w file: group에서 write 권한을 - 제거chmod o=r file: others는 read 권한만 가지도록 설정
4. [보너스] C언어 비트 연산과의 관계
리눅스 커널 내부에서 chmod 7은 비트 OR 연산으로 처리됩니다.
$4 (100_2) \ | \ 2 (010_2) \ | \ 1 (001_2) = 7 (111_2)$
C언어 코드로 표현하면 다음과 같습니다:
// 읽기(4)와 쓰기(2) 권한을 합치는 과정
int permission = S_IRUSR | S_IWUSR; // 4 | 2 = 6