리눅스(Linux)나 우분투(Ubuntu) 서버를 운영하다 보면 웹 서버를 구동하거나, 특정 스크립트를 실행할 때 ‘Permission denied(권한 거부)’라는 에러 메시지를 자주 마주하게 됩니다. 윈도우에서는 파일을 더블클릭하면 대부분 바로 실행되지만, 다중 사용자 환경을 기반으로 설계된 리눅스는 보안을 위해 파일과 디렉터리마다 접근할 수 있는 권한을 매우 엄격하게 통제하기 때문입니다.
이러한 권한 문제를 해결하고 서버의 보안을 유지하기 위해 반드시 마스터해야 하는 두 가지 핵심 명령어가 있습니다. 바로 파일의 권한을 변경하는 chmod와 소유자를 변경하는 chown입니다. 본 가이드에서는 리눅스 권한 체계의 구조를 이해하고, 실무에서 바로 쓸 수 있는 두 명령어의 올바른 활용법을 상세히 정리합니다.
1. 리눅스 파일 권한 구조 이해하기 (ls -l 읽는 법)
명령어를 배우기 전에, 리눅스가 권한을 어떻게 표시하는지 아는 것이 먼저입니다. 터미널에 ls -l을 입력하면 파일 이름 앞에 -rwxr-xr-- 같은 복잡한 문자열이 나타납니다. 이 10자리의 문자열은 다음과 같은 의미를 가집니다.
첫 번째 글자: 파일 유형
-: 일반 파일 (텍스트, 실행 파일 등)d: 디렉터리 (폴더)
나머지 9글자: 3글자씩 세 그룹으로 나누는 권한
9개의 문자는 왼쪽부터 차례대로 소유자(User), 그룹(Group), 기타 사용자(Others)의 권한을 나타냅니다.
- r (Read): 읽기 권한. 파일 내용을 보거나 디렉터리 내부 목록을 볼 수 있는 권한입니다.
- w (Write): 쓰기 권한. 파일 내용을 수정하거나 디렉터리 내에 파일을 생성/삭제할 수 있는 권한입니다.
- x (Execute): 실행 권한. 프로그램을 실행하거나 디렉터리 안으로 진입(
cd)할 수 있는 권한입니다. -: 권한 없음 표시입니다.
예를 들어 -rwxr-xr-- 이라면, 일반 파일이며 소유자는 읽기/쓰기/실행(rwx)이 모두 가능하고, 그룹 사용자는 읽기/실행(r-x)만 가능하며, 제3자인 기타 사용자는 오직 읽기(r--)만 가능하다는 뜻입니다.
2. 파일 권한 변경하기: chmod (Change Mode)
chmod 명령어는 파일이나 디렉터리의 읽기, 쓰기, 실행 권한을 변경할 때 사용합니다. 권한을 지정하는 방법은 ‘8진수 숫자 방식’과 ‘심볼릭 문자 방식’ 두 가지가 있습니다. 실무에서는 직관적이고 빠른 숫자 방식을 훨씬 많이 사용합니다.
8진수 숫자를 이용한 권한 변경 (추천)
각 권한 문자를 숫자로 환산하여 더한 값을 세 자리 숫자로 지정합니다.
r(읽기) = 4w(쓰기) = 2x(실행) = 1-(권한 없음) = 0
만약 소유자에게 rwx(4+2+1=7), 그룹에게 rx(4+0+1=5), 기타 사용자에게 rx(4+0+1=5) 권한을 주고 싶다면 합산한 숫자인 755를 명령어 뒤에 적어줍니다.
Bash
chmod 755 script.sh
실무에서 자주 쓰이는 대표적인 숫자 조합은 다음과 같습니다.
- chmod 755 [파일명] : 일반적인 실행 파일이나 디렉터리에 부여합니다. 소유자는 모든 권한을 갖고, 나머지는 읽기와 실행만 가능합니다.
- chmod 644 [파일명] : 일반적인 웹 문서나 이미지, 텍스트 파일에 부여합니다. 소유자는 읽기/쓰기가 가능하고 나머지는 읽기만 가능합니다.
- chmod 600 [파일명] : SSH 키 파일처럼 본인 외에는 절대 보면 안 되는 핵심 보안 파일에 설정합니다. 소유자만 읽기/쓰기가 가능합니다.
기호를 이용한 심볼릭 문자 방식
숫자 대신 대상(u:소유자, g:그룹, o:기타, a:전체)과 연산자(+, -, =), 권한(r, w, x)을 조합하여 직관적으로 변경하는 방법입니다.
- 소유자에게 실행 권한 추가하기:Bash
chmod u+x script.sh - 기타 사용자의 쓰기 권한 제거하기:Bash
chmod o-w document.txt - 그룹의 권한을 읽기 전용으로 고정하기:Bash
chmod g=r sample.txt
3. 파일 소유자 및 그룹 변경하기: chown (Change Owner)
권한이 아무리 잘 잡혀 있어도 파일의 주인이 누구냐에 따라 접근 여부가 갈립니다. chown 명령어는 파일이나 디렉터리의 소유자와 소유 그룹을 변경할 때 사용합니다. 시스템의 핵심 권한을 다루므로 보통 명령어 앞에 sudo를 붙여 관리자 권한으로 실행해야 합니다.
소유자만 변경하기
파일의 소유자를 ubuntu라는 사용자 계정으로 바꾸고 싶을 때 사용합니다.
Bash
sudo chown ubuntu app.log
소유자와 그룹을 한 번에 변경하기
콜론(:) 또는 마침표(.)를 기준으로 앞에는 사용자 아이디, 뒤에는 그룹 이름을 적어주면 두 가지를 동시에 바꿀 수 있습니다. 파일의 소유자를 adminuser로, 그룹을 developers로 변경하는 예시입니다.
Bash
sudo chown adminuser:developers index.html
4. 실무 필수: 하위 폴더 및 파일 일괄 변경 (-R 옵션)
프로젝트 폴더를 통째로 업로드했거나, 특정 디렉터리 내부 전체의 권한을 한 번에 수정해야 할 때가 있습니다. 파일이 수백 개라면 하나씩 바꿀 수 없으므로, 이럴 때는 대문자 -R(Recursive) 옵션을 사용하여 하위 디렉터리와 그 안에 포함된 모든 파일까지 재귀적으로 일괄 적용합니다.
디렉터리 내 모든 파일 권한 일괄 변경
Bash
chmod -R 755 /var/www/html/my_project
위 명령어를 실행하면 my_project 폴더 자체를 포함해 그 내부에 존재하는 모든 하위 폴더와 파일들의 권한이 755로 한 번에 변경됩니다.
디렉터리 내 모든 파일 소유자 일괄 변경
Bash
sudo chown -R ubuntu:ubuntu /var/www/html/my_project
웹 서버(Nginx 등) 루트 디렉터리의 권한을 특정 사용자 계정으로 완전히 이관할 때 가장 자주 쓰이는 실무 패턴 중 하나입니다.
결론: 안전한 서버 운영의 기반, 권한 관리
리눅스 환경에서 ‘Permission denied’ 에러가 발생했을 때, 귀찮다는 이유로 혹은 작동되게 만들겠다는 목적으로 모든 권한을 개방하는 chmod 777 명령어를 남발하는 초보자들이 많습니다. 하지만 이는 해커에게 내 서버의 대문을 활짝 열어주는 것과 다름없는 매우 위험한 행위입니다.
오늘 배운 권한 구조를 명확히 이해하고, 각 파일과 서비스의 목적에 맞게 chmod로 필요한 최소한의 접근 모드를 설정하며, chown으로 올바른 프로세스 주인을 지정해 주는 것이 중요합니다. 이 단단한 보안 습관이 안정적이고 건강한 인프라 서버를 운영하는 첫걸음이 됩니다.