본문 바로가기
💻Information Security

Root와 Web Root, 헷갈리는 '루트'란?

by Prof. Panda 2024. 1. 15.

Omar Ram on Unsplash

루트란?

루트(root)는 뿌리를 의미합니다. 나무의 뿌리, 식물의 뿌리가 될 수 있겠죠? 모든 식물은 뿌리(root)에서부터 시작합니다. 그러니까 컴퓨터 용어로 쓰이는 이 '루트'라는 개념도 '시작점'이나 '뿌리', 이런 관점에서 생각해보면 좋을 듯합니다. 컴퓨터, 특히 네트워크나 리눅스에서 쓰이는 루트 개념들에 대해서 구분하고 분별하기 위해 하나씩 정리해 보도록 하겠습니다. 

  • root 계정 - 모든 권한을 가진 리눅스 계정
  • root 폴더 - 리눅스 파일 시스템의 시작점
  • Web Root - 서버의 시작 지점 디렉토리

루트 계정(root user)

윈도우에는 '관리자(Administrator)' 라는 개념이 있습니다. 윈도우 OS내에서 강력한 권한을 가진 사용자를 말합니다. 대부분의 윈도우 유저라면 관리자 권한에 쉽게 접근하여 사용하기도 하며 윈도우에서는 관리자 권한이 있어도 할 수 없도록 막아 놓은 것들도 있어서 이 권한이 얼마나 강력한 것인지 실감이 안되기도 합니다. 하지만 리눅스의 경우 강력한 권한을 가진다는 것은 정말로 안 되는 것 빼고 모든 것을 할 수 있습니다. 이런 권한이 필요한 이유는 무엇일까요? 누군가는 시스템에 대한 절대적인 통제를 해야 결국에 관리가 되기 때문입니다. 윈도우의 '관리자'처럼 리눅스에도 root라는 기본 유저가 있습니다. 이 유저는 정말 리눅스 내에서 모든 권한을 가진 유저이며 uid(User ID)는 0을 가진 리눅스라는 세계의 신적인 존재입니다. 이 루트 유저의 권한을 '루트 권한(root)'이라고 부르며, sudo 명령어를 통해서 접근할 수도 있기 때문에 sudo 권한이라고 부르기도 합니다. Sudo의 경우 루트권한과 완전히 일치하지는 않지만 sudo 권한이 있다면 root 계정의 권한에 매우 유사하다고 볼 수 있으며 따라서 sudo 권한도 root 권한만큼 꼭 정해진 대상에게만 부여되어야 합니다. 리눅스에는 '루트 디렉터리(root directory)'라는 것도 있는데 이것과 헷갈리기 쉽습니다. 이제 루트 디렉토리에 대해서 알아볼까요?

 

루트 디렉토리(root directory)

"루트 디렉터리"를 루트 계정의 '홈 디렉터리'와 헷갈리기 쉽습니다. 방금 '루트' 계정에 대해서 알았으니 루트 디렉터리라면 루트 계정의 디렉터리(폴더)가 아닌가 생각하기 쉽습니다. 하지만, 루트 디렉터리라고 한다면 '모든 디렉터리의 뿌리'입니다. 디렉토리 루트라고 해야 되지 않나 싶은데, 이렇게 부르니 어쩔 수 없습니다. 모든 디렉터리의 뿌리란 무엇일까요? 윈도우에서는 "C:\" 이런 식으로 앞에 드라이브의 이름이 들어가지만, 리눅스에서는 " / " 이렇게 하나의 루트 디렉터리가 있고 드라이브가 구분되지는 않습니다. 윈도우와 리눅스의 파일 시스템이 다르기 때문인데요. 윈도우의 경우 드라이브의 물리적 구조를 중요하게 여긴 반면, 리눅스에서는 논리적인 구조를 먼저 생각했기 때문이라고 생각할 수 있습니다. 아무튼, 리눅스에서 모든 파일들의 시작은 바로 저 루트 디렉터리로부터 시작됩니다. 저 루트 디렉터리 안에는 리눅스 시스템의 모든 파일이 들어가 있습니다. 따라서, 루트 디렉터리를 삭제한다는 것은 리눅스를 포함한 컴퓨터 내의 모든 내용을 삭제한다는 의미이기도 합니다. 따라서 "루트 권한"으로 "루트 디렉터리"를 삭제한다면 컴퓨터를 진심으로 망가뜨릴 수 있겠습니다! 다른 사람의 컴퓨터를 저런 식으로 망가뜨린다면 감옥에서 당분간 복지혜택을 누릴 수 있겠죠? 참고로, 저는 그러고 싶지는 않습니다. 정리하자면, 루트 디렉터리란 루트 권한과 상관이 없으며, 리눅스의 파일시스템의 첫 시작점입니다.

 

웹 루트(Web Root), 웹 루트 디렉토리 

이제 웹 루트란, 루트를 웹 서버를 관리하는 입장에서 생각하면 됩니다. 바로, 웹 서버의 루트 디렉터리입니다. 왜 굳이 웹 루트라는 개념을 통해서 웹 서버의 루트 디렉터리와 리눅스의 루트 디렉터리를 구분하는 것일까요? 그것은 바로, 웹 서버의 시스템과 웹 서버의 공간을 구분, 분리하여서 서버의 본체인 시스템을 보호하기 위함입니다. 루트 권한은 시스템에 대한 모든 권한이 있다고 했었지요? 이 루트 권한을 다른 누군가가 웹 서버를 통해서 접근할 수 있다고 생각해 보세요. 끔찍하지 않나요? 따라서 그런 일이 벌어지지 않게 하기 위해서 시스템과 웹 서버를 분리시키는 동시에 웹 서버의 관리를 효율적으로 하기 위한 개념이기도 합니다. 웹 서버는 실행되면서 웹 루트라는 것도 정하거나 명시를 해둘 수 있는데, 이 웹 루트라고 지정된 곳에서부터 서버가 시작됩니다. 시스템이 아파트라면, 웹 서버는 그중에서 하나의 디렉터리를 가지고 시작하는 아파트의 거주 가구 정도로 생각할 수 있겠습니다. 많은 사람들이 사용하는 웹 서버 플로그램인 아파치에서는 기본 웹 루트가 바로 "/var/www/html"이 되겠습니다. 우리가 아파치로 만든 웹 사이트를 들어간다면 저기 /var/www/html 안에 있는 파일들을 열람할 수 있게 되는 것이지요. 따로 명시를 하거나 설정을 바꿔서 웹 루트 디렉토리를 바꿔줄 수도 있습니다. 하지만, 웹 루트 디렉터리와 시스템의 루트 디렉터리가 같지 않은 게 아무래도 좋겠죠? 

'💻Information Security' 카테고리의 다른 글

XSS(Cross Site Scripting)이란?  (0) 2024.01.18
SQL Injection이란?  (0) 2024.01.18
JSON과 JWT! (JSON Web Token)  (0) 2024.01.14
Database(DB)와 SQL의 개념과 필요성  (2) 2024.01.14
NAT(Network Address Translation?)란?  (1) 2024.01.13