파일 권한과 소유자 (chmod, chown)
리눅스는 다중 사용자 시스템입니다. 여러 사람이 같은 서버를 사용하기 때문에, "누가 이 파일을 읽고 쓰고 실행할 수 있는가"를 명확히 정해야 합니다. 이것이 파일 권한 시스템입니다. Bash 스크립트를 작성할 때 "왜 이 스크립트가 실행이 안 되지?"라는 문제의 대부분은 권한 설정을 빠뜨렸기 때문입니다.
rwx 권한 이해하기
ls -l 출력의 첫 번째 컬럼이 권한입니다.
ls -l backup.sh
-rwxr-xr-- 1 ubuntu developers 1024 Apr 24 09:00 backup.sh
이 10개의 문자를 읽는 방법입니다.
- rwx r-x r--
│ │ │ │
│ │ │ └── 기타(others): 읽기만 가능
│ │ └────── 그룹(group): 읽기, 실행 가능
│ └────────── 소유자(user): 읽기, 쓰기, 실행 가능
└──────────── 파일 종류: -는 일반 파일, d는 디렉토리, l은 심볼릭링크
각 권한의 의미입니다.
| 기호 | 의미 | 파일에서 | 디렉토리에서 |
|---|---|---|---|
r |
read (읽기) | 파일 내용 읽기 | 파일 목록 보기 |
w |
write (쓰기) | 파일 내용 수정 | 파일 생성/삭제 |
x |
execute (실행) | 프로그램으로 실행 | 디렉토리 진입(cd) |
- |
권한 없음 | — | — |
Bash 스크립트 파일에는 반드시 실행 권한(x)이 있어야 ./script.sh로 실행할 수 있습니다.
chmod — 권한 변경
chmod(change mode)로 파일 권한을 변경합니다. 두 가지 표기법을 사용합니다.
기호 표기법
# 소유자에게 실행 권한 추가chmod u+x backup.sh# 그룹에서 쓰기 권한 제거chmod g-w backup.sh# 기타 사용자에게 읽기와 실행 권한 추가chmod o+rx backup.sh# 모든 사용자에게 실행 권한 추가chmod a+x backup.sh
기호 표기법 규칙입니다.
| 대상 | 기호 | 의미 |
|---|---|---|
| u | user | 소유자 |
| g | group | 그룹 |
| o | others | 기타 사용자 |
| a | all | 모든 사용자 |
| 연산 | 기호 | 의미 |
|---|---|---|
| + | 추가 | 권한 부여 |
| - | 제거 | 권한 삭제 |
| = | 설정 | 정확히 해당 권한으로 설정 |
숫자 표기법
숫자 표기법은 8진수로 권한을 표현합니다. 각 권한은 숫자로 대응됩니다.
r = 4, w = 2, x = 1
세 자리 숫자가 각각 소유자, 그룹, 기타 사용자의 권한을 나타냅니다.
755 = rwxr-xr-x
7(rwx) 5(r-x) 5(r-x)
644 = rw-r--r--
6(rw-) 4(r--) 4(r--)
자주 사용하는 권한 조합입니다.
| 숫자 | 기호 | 일반 사용 용도 |
|---|---|---|
755 |
rwxr-xr-x |
실행 가능한 스크립트, 디렉토리 |
644 |
rw-r--r-- |
일반 파일, 설정 파일 |
600 |
rw------- |
개인 키, 패스워드 파일 |
777 |
rwxrwxrwx |
모든 권한 (보안상 비권장) |
# 스크립트에 실행 권한 부여 (가장 자주 사용)chmod 755 backup.sh# 확인ls -l backup.sh
-rwxr-xr-x 1 ubuntu ubuntu 1024 Apr 24 09:00 backup.sh
# 디렉토리와 하위 파일 모두 권한 변경 (-R)chmod -R 755 ~/scripts/
chown과 chgrp — 소유자와 그룹 변경
# 파일 소유자 변경 (root 권한 필요)sudo chown www-data backup.sh# 소유자와 그룹 동시 변경sudo chown ubuntu:developers backup.sh# 디렉토리와 하위 내용 모두 변경 (-R)sudo chown -R ubuntu:ubuntu ~/projects/
ls -l backup.sh
-rwxr-xr-x 1 ubuntu developers 1024 Apr 24 09:00 backup.sh
# 그룹만 변경sudo chgrp www-data /var/www/html/
umask — 기본 권한 설정
파일을 새로 만들 때 적용되는 기본 권한은 umask로 결정됩니다. umask는 최대 권한에서 차감할 값을 지정합니다.
umask
0022
디렉토리의 최대 권한은 777, 파일의 최대 권한은 666(실행 권한 제외)입니다. 여기서 umask 값을 빼면 실제 기본 권한이 나옵니다.
디렉토리: 777 - 022 = 755 (rwxr-xr-x)
파일: 666 - 022 = 644 (rw-r--r--)
umask를 변경하려면 다음과 같이 합니다.
# 보안이 필요한 환경에서 그룹과 기타 사용자 권한 모두 차단umask 077touch private.txtls -l private.txt
-rw------- 1 ubuntu ubuntu 0 Apr 24 09:30 private.txt
umask는 현재 쉘 세션에만 적용됩니다. 영구적으로 변경하려면 ~/.bashrc에 추가해야 합니다.
권한 시스템을 이해했으니, 다음 장에서는 표준 입출력과 파이프라인을 활용해 명령어들을 연결하는 방법을 살펴봅니다.