리눅스의 문지기, 권한 이해하기
리눅스 서버의 보안과 직결되는 파일 및 디렉터리 권한의 개념을 이해하고, chmod와 chown 명령어로 권한을 관리하는 방법을 배웁니다.
우리가 윈도우나 맥을 개인용으로 쓸 때는 크게 느끼지 못하지만, 서버용 운영체제인 리눅스는 본래 '여러 사람이 동시에 접속해서 사용하는 환경'을 전제로 만들어졌습니다. 그렇기 때문에 내 파일에 남이 함부로 접근하지 못하게 막고, 반대로 웹사이트 방문자에게는 그림 파일을 보여주기 위해 읽기 권한을 열어주는 치밀한 '문지기 시스템'이 필요합니다. 이번 시간에는 리눅스의 핵심 보안 개념인 '권한(Permission)'을 읽는 법과, 이를 수정하는 `chmod`, `chown` 명령어에 대해 완벽하게 이해해 봅시다.
외계어 같은 문자열 해독하기: r, w, x
이전에 배웠던 `ls -la` 명령어를 터미널에 쳐보면 파일 이름 왼쪽에 `-rw-r--r--` 또는 `drwxr-xr-x` 같은 알 수 없는 알파벳의 나열이 보입니다. 처음엔 암호 같지만, 한 번만 원리를 알면 아주 직관적인 권한 표시표입니다.
가장 앞에 있는 첫 번째 글자는 파일의 종류를 나타냅니다. `-`는 일반 파일, `d`는 디렉터리(Directory, 폴더)라는 뜻입니다. 중요한 것은 그 뒤에 이어지는 9개의 글자입니다. 이 9자리는 3개씩 끊어서 다음의 세 그룹에 대한 권한을 의미합니다.
- 소유자 (User): 파일을 처음 만든 주인의 권한
- 그룹 (Group): 소유자가 속한 조직(팀)의 권한
- 나머지 (Others): 주인이 아닌 제3자, 즉 외부 접속자나 일반 대중의 권한
정의
권한의 3가지 요소 (Read, Write, Execute)
각 그룹(3자리)은 항상 '읽기, 쓰기, 실행' 순서로 권한 여부를 표시합니다.
- r (Read, 읽기): 파일 내용을 볼 수 있는 권한. 폴더의 경우 안의 파일 목록을 볼 수 있음.
- w (Write, 쓰기): 파일 내용을 수정하거나 지울 수 있는 권한. 폴더의 경우 내부에 파일을 만들거나 지울 수 있음.
- x (Execute, 실행): 프로그램이나 스크립트 파일을 실행시킬 수 있는 권한. 폴더의 경우 cd 명령어로 그 폴더 안으로 들어갈 수 있는 권한.
권한이 없다면 해당 알파벳 자리에 하이픈(-)이 표시됩니다.
권한 문자열 해독 예시
`ls -la` 결과가 `-rwxr-xr--` 일 때:
- 첫 글자 `-`: 일반 파일입니다.
- 다음 세 글자 `rwx`: 소유자는 읽고(`r`), 쓰고(`w`), 실행(`x`)할 수 있는 모든 권한을 가집니다.
- 다음 세 글자 `r-x`: 그룹 사람들은 읽고(`r`), 실행(`x`)은 할 수 있지만, 수정(`w` 자리의 `-`)은 불가능합니다.
- 마지막 세 글자 `r--`: 나머지 일반인은 오직 내용을 읽기(`r`)만 가능합니다.
권한을 바꾸는 주문: `chmod`
웹 서버를 운영하다 보면 바이브코딩으로 만든 특정 스크립트 파일을 실행해야 할 때가 있습니다. 하지만 처음 만든 파일은 기본적으로 '실행(x)' 권한이 빠져있어서 `Permission denied(권한 거부)` 에러를 뿜어냅니다. 이때 파일의 권한을 변경해 주는 명령어가 `chmod`입니다.
`chmod`는 Change Mode의 약자입니다. 권한을 변경할 때 리눅스 관리자들은 주로 0부터 7까지의 '숫자'를 조합하여 사용합니다. 읽기(r)는 4, 쓰기(w)는 2, 실행(x)은 1이라는 고유의 점수를 가집니다. 이 점수들을 합쳐서 권한을 표현합니다.
- `r` + `w` + `x` = 4 + 2 + 1 = 7 (모든 권한 있음)
- `r` + `w` + `-` = 4 + 2 + 0 = 6 (읽고 쓰기만 가능)
- `r` + `-` + `x` = 4 + 0 + 1 = 5 (읽고 실행만 가능)
- `r` + `-` + `-` = 4 + 0 + 0 = 4 (읽기만 가능)
이 숫자를 소유자, 그룹, 나머지 순서대로 세 자리 숫자로 만들어 명령어 뒤에 붙입니다.
실무에서 가장 많이 쓰는 chmod 권한 숫자 3대장
| 숫자 조합 | 알파벳 표기 | 언제 사용하는가? |
|---|---|---|
| chmod 755 | rwxr-xr-x | 웹사이트의 폴더나 실행 스크립트. 주인은 다 할 수 있고, 남들은 읽고 실행(폴더 진입)만 가능. |
| chmod 644 | rw-r--r-- | 웹사이트의 일반 파일(HTML, CSS, 이미지). 주인은 수정할 수 있고, 남들은 웹 브라우저를 통해 읽을 수만 있음. |
| chmod 777 | rwxrwxrwx | 모든 사람이 다 읽고 쓰고 실행 가능. 보안상 극도로 취약하므로 임시 테스트 외에는 절대 사용하지 마세요. |
실행 명령은 `chmod 755 script.sh` 처럼 사용합니다. 만약 권한 거부 에러가 났다고 해서 무작정 숫자 `777`을 부여하는 것은, 우리 집 현관문 비밀번호를 없애고 지나가는 아무나 물건을 가져가도록 방치하는 것과 같으니 각별히 주의해야 합니다.
집주인을 바꾸는 명의 이전: `chown`
파일이 어떤 권한을 가지고 있는지도 중요하지만, 그 파일의 진짜 주인이 누구인지도 매우 중요합니다. 웹 서버 프로그램(예: Nginx, Apache)은 종종 `www-data`라는 이름의 특수한 시스템 계정으로 돌아갑니다. 만약 관리자인 내가 직접 만든 파일을 웹 서버가 수정해야 한다면, 웹 서버 계정은 주인이 아닌 '나머지(Others)'로 취급되어 쓰기 권한이 거부됩니다.
이때 파일의 소유자 자체를 다른 사람에게 넘겨주는 명령어가 `chown`입니다. `chown`은 Change Owner의 약자입니다.
기본 사용법은 `chown [새로운소유자]:[새로운그룹] [파일이름]`입니다. 만약 `upload`라는 폴더의 주인을 웹 서버 계정인 `www-data`로 넘겨주고 싶다면 다음과 같이 입력합니다. (폴더 전체 주인을 바꿀 때는 `-R` 옵션을 사용합니다)
$ sudo chown -R www-data:www-data upload/절대 권력자: root와 sudo
위의 `chown` 예시 명령어 앞에 `sudo`라는 단어가 붙은 것을 보셨나요? 리눅스에는 모든 파일에 접근하고 어떤 권한이든 뺏거나 줄 수 있는 절대 권력의 최고 관리자 계정이 있는데, 이를 루트(root) 계정이라고 부릅니다.
일반 사용자 계정으로 로그인해 있더라도, 명령어 앞에 `sudo` (SuperUser DO)를 붙이면 잠시 동안 그 명령어 하나에 대해서만 절대 권력자인 root의 힘을 빌려서 실행하게 됩니다. 남의 파일 주인을 뺏어서 남에게 넘기는 `chown` 같은 행위는 평범한 사용자는 할 수 없고, 오직 최고 관리자(sudo)만이 허락할 수 있기 때문입니다.
서버 권한 관리의 핵심 철학
- 1에러가 난다고 무조건 chmod 777을 남발하지 않는다. 꼭 필요한 최소한의 권한(보통 644나 755)만 부여한다.
- 2서버의 중요 설정 파일을 건드리거나 시스템 서비스를 껐다 켤 때는 항상 명령어 앞에 sudo를 붙여서 관리자 권한을 행사해야 한다.
- 3웹 서버가 이미지를 업로드받아 저장해야 하는 폴더는, 해당 폴더의 소유자(chown)를 웹 서버 시스템 계정으로 맞추어 정상적인 쓰기가 가능하게 한다.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.내가 만든 'server.py'라는 파일에 대해 나(소유자)는 모든 권한(읽기/쓰기/실행)을 가지고, 내 그룹과 나머지 일반인들은 파일의 내용을 읽고 실행만 할 수 있게(쓰기 불가) 권한을 변경하려고 합니다. 알맞은 명령어는 무엇인가요?
3줄 요약
- 1리눅스 파일 권한은 소유자, 그룹, 나머지 세 부류에 대해 읽기(r, 4), 쓰기(w, 2), 실행(x, 1) 여부를 숫자로 조합하여 관리합니다.
- 2chmod 명령어는 이 숫자 조합(예: 755, 644)을 이용해 파일의 접근 권한을 안전하게 변경하는 필수 도구입니다.
- 3chown 명령어를 통해 파일의 명의(소유자)를 변경할 수 있으며, 이처럼 시스템에 중대한 영향을 미치는 작업 앞에는 최고 관리자의 권한을 빌리는 sudo를 붙여야 합니다.