리눅스에서 패키지 매니저로 프로그램을 설치하고 나면 드디어 나만의 서버 환경이 조금씩 갖춰지는 기분이 듭니다. 그런데 기쁨도 잠시, 새로 설치한 웹서버 폴더에 파일을 업로드하거나 특정 설정 파일을 수정하려고 할 때 터미널 창에 Permission denied(권한 거부)라는 차가운 메시지가 뜨며 명령어가 먹히지 않는 상황을 마주하게 됩니다. 내가 산 컴퓨터고 내가 만든 파일인데 도대체 왜 접근할 수 없다는 걸까요?
이 현상을 이해하려면 리눅스의 핵심 보안 뼈대인 '소유권(Ownership)'과 '권한(Permission)'의 개념을 알아야 합니다. 리눅스는 태생부터 수많은 사람이 하나의 컴퓨터에 동시에 접속해 사용하는 '다중 사용자 시스템'을 기반으로 설계되었습니다. 다른 사람이 내 중요한 파일을 훔쳐보거나 지우지 못하도록 방어벽을 쳐둔 것인데, 이 규칙이 초보자에게는 커다란 장벽처럼 느껴지곤 합니다. 오늘 이 방어벽의 암호 같은 규칙을 아주 쉽게 풀어드리겠습니다.
1. 터미널에서 마주하는 암호문: rwxrwxrwx의 비밀
앞서 배운 ls -al 명령어를 입력하면 파일 이름 왼쪽에 -rw-r--r-- 또는 drwxr-xr-x 같은 정체불명의 알파벳 10글자가 붙어 있는 것을 보셨을 겁니다. 이것이 바로 그 파일의 '권한'을 나타내는 리눅스의 성적표입니다.
이 10글자는 일정한 규칙에 따라 쪼개어 읽으면 금방 이해할 수 있습니다. 맨 첫 글자는 이 대상이 파일인지 폴더인지를 알려줍니다. -로 시작하면 일반 파일이고, d로 시작하면 디렉토리(Directory, 폴더)라는 뜻입니다.
그 뒤에 남은 9글자는 3글자씩 3그룹으로 묶어서 읽습니다.
첫 번째 3글자: 파일을 만든 '소유자(User)'의 권한
두 번째 3글자: 소유자가 속한 '그룹(Group)'의 권한
세 번째 3글자: 그 외 '나머지 제3자(Others)'의 권한
그리고 각 그룹 안에 들어가는 알파벳 r, w, x는 각각 다음과 같은 행동 허가를 의미합니다.
r(Read): 파일을 읽거나 폴더 안의 파일 목록을 볼 수 있는 권한w(Write): 파일 내용을 수정하거나 폴더 안에 새 파일을 만들고 지울 수 있는 권한x(Execute): 프로그램이나 스크립트 파일을 실행할 수 있는 권한 (폴더의 경우 그 폴더 안으로 진입할 수 있는 권한)
만약 어떤 파일의 권한이 -rwxr-xr-- 이라면, 소유자는 읽고 쓰고 실행(rwx)할 수 있고, 같은 그룹 멤버들은 읽고 실행(r-x)만 가능하며, 지나가는 제3자는 오직 읽기(r--)만 가능하다는 뜻이 됩니다. 하이픈(-)은 해당 권한이 없음을 뜻합니다.
2. 숫자로 소유권을 통제하는 마법: chmod 명령어
파일의 권한이 어떻게 구성되어 있는지 알았으니, 이제 내 필요에 맞게 권한을 수정하는 방법을 배울 차례입니다. 이때 사용하는 명령어가 바로 Change Mode의 약자인 chmod입니다.
문자로 권한을 바꿀 수도 있지만, 실무에서는 숫자를 더 많이 사용합니다. r은 4점, w는 2점, x는 1점이라는 점수가 부여되어 있습니다. 권한을 줄 때는 이 점수들을 더한 합산 숫자를 사용합니다.
rwx(4+2+1) = 7rw-(4+2+0) = 6r-x(4+0+1) = 5r--(4+0+0) = 4
개발을 하다 보면 인터넷에서 "잘 안되면 chmod 777 파일명을 치세요"라는 글을 자주 보게 됩니다. 이 명령어는 소유자(7), 그룹(7), 제3자(7) 모두에게 읽고 쓰고 실행하는 권한을 전부 퍼주겠다는 의미입니다. 당장 에러는 해결되겠지만, 길거리에 있는 모든 사람에게 내 방 비밀번호를 알려주는 것과 다름없는 매우 위험한 보안 불감증 행동입니다. 웹서버의 일반적인 텍스트 파일이라면 chmod 644, 실행해야 하는 스크립트 파일이라면 chmod 755 정도로 필요한 만큼만 정밀하게 권한을 주는 것이 올바른 엔지니어의 자세입니다.
3. 주인을 바꾸는 명령어: chown (Change Owner)
권한(rwx)이 아무리 잘 열려 있어도, 파일의 주인이 내가 아니라면 수정을 못 하는 경우가 있습니다. 윈도우에서 다른 사람 계정으로 저장된 파일을 만질 때 경고창이 뜨는 것과 같습니다. 리눅스에서 파일이나 폴더의 주인을 통째로 바꾸고 싶을 때는 chown 명령어를 사용합니다.
예를 들어 웹서버 폴더인 /var/www/html은 기본적으로 시스템 관리자가 주인으로 되어 있어 일반 계정으로는 파일을 업로드할 수 없습니다. 이때 sudo chown ubuntu /var/www/html이라고 치면 해당 폴더의 주인이 ubuntu라는 사용자 계정으로 변경되어, 이후부터는 sudo를 붙이지 않고도 자유롭게 파일을 복사하고 수정할 수 있게 됩니다. 파일 소유권을 변경하는 것 역시 시스템의 질서를 바꾸는 행동이므로 반드시 명령어 앞에 관리자 권한인 sudo를 붙여야 실행됩니다.
권한 오류를 마주했을 때 초보자가 가져야 할 안전 팁
처음 리눅스를 다룰 때 Permission denied 에러가 나면 무조건 sudo를 붙여서 강제로 실행하거나, chmod 777로 권한을 다 열어버리는 무리수를 두기 쉽습니다. 저 역시 초보 시절에는 귀찮다는 이유로 모든 폴더를 777로 열어두었다가 해킹 테스트 봇에 의해 서버 파일들이 감염되는 혹독한 대가를 치른 적이 있습니다.
권한 에러가 발생하면 먼저 ls -l을 입력해 현재 그 파일의 주인이 누구인지, 나에게 주어져 있는 권한이 r이나 w 중 무엇이 빠져 있는지 차분하게 눈으로 확인하는 습관을 지녀야 합니다. 주인이 잘못되어 있다면 chown으로 주인을 내 계정으로 가져오고, 실행 권한이 없다면 chmod +x를 통해 딱 실행 권한만 추가해 주는 방식으로 문제를 우아하게 해결해 나가는 것이 안전하고 견고한 서버를 만드는 첫걸음입니다.
👉 핵심 요약
리눅스 파일 권한은 소유자(User), 그룹(Group), 제3자(Others) 순서로
r(읽기),w(쓰기),x(실행) 권한이 부여됩니다.chmod명령어와 숫자 조합(r=4, w=2, x=1)을 이용하면 파일과 폴더의 접근 권한을 안전하게 제어할 수 있습니다.모든 권한을 여는
chmod 777은 보안상 매우 위험하므로 사용을 지양하고 필요한 권한만 최소한으로 부여해야 합니다.파일의 근본적인 주인을 변경할 때는
chown명령어를 사용하며, 시스템 권한을 조정하는 작업이므로sudo가 필요합니다.
👉 다음편 예고
파일의 권한과 소유권까지 통제할 수 있게 되었으니, 이제 내 컴퓨터에서 어떤 프로그램들이 살아 움직이고 있는지 감시할 때가 되었습니다. 다음 글에서는 리눅스의 작업 관리자 역할을 하는 '백그라운드 프로세스 관리와 필수 모니터링 명령어(ps, top, kill)'에 대해 명쾌하게 다루어 보겠습니다.
리눅스 실습을 하다가 Permission denied 에러를 만나 당황했던 적이 있으신가요? 아니면 chmod 777을 무심코 사용해 본 경험이 있으신지 여러분의 이야기를 댓글로 공유해 주세요!
0 댓글