들어가기
이전 글들에서는 리눅스에서 파일과 디렉터리를 다루는 방법을 중심으로 살펴봤습니다.
이번 글에서는 그 파일과 디렉터리에 누가, 무엇을, 어디까지 할 수 있는지를 제어하는 핵심 개념인 파일 시스템 권한(File System Permissions) 을 정리합니다.
리눅스는 기본적으로 멀티 유저 시스템입니다.
혼자 쓰는 서버라 하더라도, 권한 개념은 보안과 안정성을 지탱하는 가장 기본적인 장치입니다.
이 장은 이후 사용자 관리, 보안 설정, 서버 운영 전반의 토대가 됩니다.
File Ownership
리눅스의 모든 파일과 디렉터리는 소유자(owner) 와 그룹(group) 을 가집니다.
권한 판단의 출발점은 항상 이 두 가지입니다.
chown : 파일의 소유자 및 그룹 변경
chown 명령어는 파일 또는 디렉터리의 소유자와 그룹을 변경할 때 사용합니다.
bashchown [옵션] 소유자:그룹 대상
기본 예제
bash# 소유자를 test 유저로 변경
chown test /tmp/backup/susan
# 그룹만 cloud로 변경
chown :cloud /tmp/backup/susan
# 소유자와 그룹을 동시에 변경
chown hpe:cloud /tmp/backup/susan
재귀적 변경 (-R)
bash# 하위 파일과 디렉터리까지 모두 변경
chown -R hpe:cloud /tmp/backup/susan
운영 환경에서는 특정 디렉터리 트리 전체의 소유권을 변경해야 하는 경우가 많기 때문에 -R 옵션은 자주 사용됩니다.
File and Directory Permissions
권한(permission)은 누가 무엇을 할 수 있는지를 정의하는 규칙입니다.
권한이 없다면 파일을 읽을 수도, 수정할 수도, 실행할 수도 없습니다.
ls -l 또는 ls -al 명령을 실행하면 왼쪽에 10자리 문자열이 출력됩니다.
plaindrwxr-xr-x
이 문자열 안에 파일 타입과 권한 정보가 모두 들어 있습니다.
파일 타입 (첫 번째 문자)
| 문자 | 의미 |
|---|---|
| d | 디렉터리 (directory) |
| - | 일반 파일 (regular file) |
| l | 심볼릭 링크 |
| b | 블록 디바이스 |
| c | 문자 디바이스 |
| s | 소켓 |
| p | 네임드 파이프 (FIFO) |
보완 설명
-
디렉터리(d)
- 다른 파일을 담는 컨테이너
cd,ls명령의 대상
-
일반 파일(-)
- 텍스트, 바이너리, 실행 파일 포함
-
심볼릭 링크(l)
- 다른 파일이나 디렉터리를 가리키는 참조
-
블록/문자 디바이스
/dev아래에서 주로 확인
-
소켓 / 파이프
- 프로세스 간 통신 용도
rwx 권한 구조
plaindrwxr-xr-x
│ └── others
│ └──── group
└──────── owner
| 위치 | 의미 |
|---|---|
| 첫 글자 | 파일 타입 |
| 1~3 | 소유자(owner) 권한 |
| 4~6 | 그룹(group) 권한 |
| 7~9 | 기타 사용자(others) 권한 |
r / w / x 권한 의미
| 권한 | 파일(File) | 디렉터리(Directory) |
|---|---|---|
| r | 파일 내용 읽기 | 목록 조회(ls) |
| w | 파일 수정 | 파일 생성·삭제·이름 변경 |
| x | 파일 실행 | 디렉터리 접근(cd) |
디렉터리에서 삭제 권한은 파일이 아니라 상위 디렉터리의 w 권한으로 결정된다는 점이 중요합니다.
Permission 숫자 표기법 (Octal)
리눅스 권한은 8진수로 표현할 수 있습니다.
실무에서는 이 방식이 가장 많이 사용됩니다.
기본 비트 값
| 값 | 의미 |
|---|---|
| 4 | r |
| 2 | w |
| 1 | x |
조합 예시
| 숫자 | 권한 | 의미 |
|---|---|---|
| 7 | rwx | 읽기·쓰기·실행 |
| 6 | rw- | 읽기·쓰기 |
| 5 | r-x | 읽기·실행 |
| 4 | r– | 읽기 |
| 0 | — | 없음 |
3자리 권한 예시
| 숫자 | 의미 |
|---|---|
| 755 | 소유자 전체, 나머지 읽기·실행 |
| 700 | 소유자만 접근 |
| 644 | 일반 파일 기본값 |
| 777 | 모두 전체 권한 (주의 필요) |
chmod : 권한 변경
숫자 방식
bashchmod 644 file.txt
chmod 755 script.sh
문자 방식
bashchmod u+x file
chmod g-w file
chmod o=r file
chmod a+rx file
| 대상 | 의미 |
|---|---|
| u | 소유자 |
| g | 그룹 |
| o | 기타 사용자 |
| a | 전체 |
디렉터리 삭제 권한 실습 개념
파일을 삭제할 수 있는지는 파일 권한이 아니라 디렉터리 권한으로 판단됩니다.
쓰기(w) 권한이 없는 디렉터리에서는 파일을 생성하거나 삭제할 수 없습니다.
이 개념은 보안 사고에서 매우 중요하게 작용합니다.
SUID / SGID / Sticky Bit
일반적인 rwx 권한 외에, 권한 동작 자체를 변경하는 특수 퍼미션이 존재합니다.
| 비트 | 의미 |
|---|---|
| SUID | 실행 시 파일 소유자 권한으로 실행 |
| SGID | 실행 시 파일 그룹 권한으로 실행 |
| Sticky Bit | 공용 디렉터리 보호 |
대표 예시
bash-rwsr-xr-x /bin/passwd
drwxrwxrwt /tmp
SUID
- 실행한 사용자가 누구든 파일 소유자 권한으로 실행
- 대표 사례:
passwd
SGID
- 실행 시 파일의 그룹 권한으로 동작
- 디렉터리에 적용 시 하위 파일이 동일 그룹을 상속
Sticky Bit
- 공용 디렉터리에서 파일 삭제 제한
- 본인 소유 파일만 삭제 가능
특수 퍼미션 설정 방법
문자 방식
bashchmod u+s file # SUID
chmod g+s file # SGID
chmod o+t dir # Sticky Bit
숫자 방식
| 값 | 의미 |
|---|---|
| 4xxx | SUID |
| 2xxx | SGID |
| 1xxx | Sticky Bit |
bashchmod 4755 file
chmod 2770 dir
chmod 1777 /tmp
마무리
파일 시스템 권한은 단순한 문법이 아니라, 리눅스 보안 모델의 핵심입니다.
이 개념을 정확히 이해하지 못하면 사용자 관리, 서비스 운영, 보안 설정 모두 흔들릴 수 있습니다.