mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-12-15 19:53:16

root


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
프로게임단에 대한 내용은 ROOT Gaming 문서
번 문단을
부분을
, 그 외 다른 루트에 대한 내용은 루트 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
1. 개요2. 특징3. Microsoft Windows4. 유사표현

1. 개요

리눅스 macOS와 같은 유닉스 계열의 운영체제에서 모든 권한을 가지고 있는 최고 관리자가 사용하는 ID를 의미하며, 최고 관리자인 사람 자체를 가리키기도 한다. User ID 번호는 0번. 유닉스 계열의 모든 운영체제에는 이 root 유저가 존재한다. macOS, 우분투처럼 root 계정을 기본 상태에서 사용할 수 없게 만든 경우라도 별도 옵션을 통해 활성화할 수 있으며[1], 유닉스 계열 OS에 root 계정이 없는 경우는 절대로 없다.

2. 특징

최고 관리자 root의 권력은 정말로 절대적인 존재이기 때문에 해당 운영체제모든 것을 제어할 권리를 가지게 된다. 여기서 말하는 모든 것에는 시스템을 파괴할 권한을 포함한다. 그것이 실수든 고의든 해킹이든 간에.

그렇기 때문에 일반적인 리눅스 운영체제에서는 기본적으로 컴퓨터 주인의 계정 또한 root보다 권한이 낮은 일반 사용자로 만들어지며, 시스템 관리 작업 등을 할 때에는 sudo 라는 명령을 사용해서 임시 root 권한을 얻도록 되어 있다. OS X의 경우에는 root 권한이 필요한 작업을 하기 전에 패스워드를 물어보는데 이건 sudo 명령에 GUI를 붙인 gsudo 명령이다.

참고로 sudo에 명령어 대신 셸을 집어넣으면 사용하면 루트셸로 진입할 수 있는데, 이 루트셸을 띄우는 것이 해커들의 궁극적 목표이기도 하다. 일단 루트셸의 # 프롬프트(일반 사용자는 보통 $ 프롬프트[2])를 띄운 순간부터 해당 컴퓨터는 사용자의 명령에 절대복종한다. 자살하라는 명령까지 군말 않고 따른다. 단 이렇게 root 권한을 획득했다고 하더라도 컴퓨터를 장악한 것일 뿐, 해당 컴퓨터가 속해 있는 네트워크 전체를 장악한 것은 아니다.[3] 네트워크를 장악하려면 라우터를 해킹해야 한다.

언뜻 보면 운영체제가 컴퓨터의 주인인 사용자의 권한을 제약하는 하극상을 연출하는 것처럼 보이지만 이는 안전과 보안을 위한 필수불가결한 조치이다.[4] 시스템 설정을 변경해서 항상 root 상태로 있을 수는 있는데 굉장히 위험하다. 예를 들어 rm -rf /를 일반 사용자 계정에서 실행하면 권한 없음 오류를 내면서 시스템이 거부하지만 root 계정일 경우에는 일말의 반문도 없이 그냥 실행해버릴 수 있다. 단 리눅스 시스템이 적당히 최신 버전이라면 rm 명령어에 최후 안전장치가 있어서 거부된다. no-preserve-root 스위치를 붙여야 그제야 실행한다.[5]no-preserve-root를 사용하라고 알려준다.] BSD 계열이라면 그런 거 없다.

일반적인 방법으로 root 계정 액세스가 허용되지 않는 OS, 특히 안드로이드에서 일반 사용자가 root 권한을 취득하는 것을 루팅(rooting)이라고 한다.

애플의 경우 루트리스라는 명목으로 root를 골탕 먹이는 것을 내놓았다. root 권한으로도 삭제가 불가능한 파일과 디렉터리를 만든 것. 근데, 이건 SELinux나 Windows의 SYSTEM 계정과 마찬가지 물건인지라... 물론 이 루트리스를 끄는 방법도 존재하기는 한다.
또한 애플의 경우 root 계정을 기본적으로 비활성화해 두었다. 설정의 사용자 설정에서 별도로 활성화해 준 후에야 해당 계정을 사용할 수 있다.

root가 운영체제 내에서는 가장 높은 권한이지만 컴퓨터 전체에서는 Ring()0이 root보다 높은 권한으로 커널, 그리고 커널에 붙은 드라이버가 Ring0으로 실행되고 일반 프로그램들은 Ring3에서 실행된다. 따라서 Ring0는 커널 모드(Kernel Mode), Ring3는 사용자 모드(User Mode)다. Ring는 CPU의 기능으로 보안, 안정성을 위해 커널와 사용자 영역을 분리한 것이다.[6] 또한 DOS 같은 구식 운영체제가 아닌 한 대부분의 운영체제에서는 일반적으로 커널 모드에 접근하는 기능이 일체 제공되지 않는다. root또한 사용자 모드의 명령어만 사용할 수 있다. 물론 커널모드에서 작동하는 커널 모듈을 설치, 제거하려면 당연하게도 root권한을 가지고 있어야 한다. 커널 모드에서 사용하는 커널 모듈은 프로세스가 분리된 일반 프로그램처럼 작동하는 게 아니라 일종의 애드온 같은 개념으로 커널에 통합되어 작동하는 형태라고 보면 된다.

3. Microsoft Windows

Windows의 경우 Administrator 그룹 계정이 여기에 해당되는데, Administrator가 아니면 일반 애플리케이션 소프트웨어 설치/제거조차 어려울 정도로 그야말로 아무것도 할 수 없기 때문에 Administrator를 안 쓰는 사람이 없다. 따라서 사용자 계정이 곧 root 계정이나 마찬가지다. 또한 컴퓨터 수리점에서 윈도우를 설치할 때 기본 로그인 계정을 Administrator 계정으로 한다. Windows 구성 자체가 모든 사용자들과 금고 열쇠를 공유하고 있었던 셈.

이 문제를 UAC Windows Vista 때 도입되면서 어느정도 해결하려고 했으나, UAC가 없던 이전 버전의 윈도우에 완전히 길들여질 대로 길들여졌던 유저들은 UAC 기능을 끄고 사용하기도 했다. 이 문제는 Windows 7 에서 일부 개선되고 Windows 8 부터는 Administrator 계정으로 로그온 하거나 강제로 레지스트리를 통해 UAC를 무력화한 경우 메트로 앱을 사용할 수 없도록 만들면서 UAC를 완전히 끄지 못하도록 정책을 변경하였다. Windows 10 Windows 10 1703까지만 하더라도 관리자 계정을 사용하면 설정 앱을 제외한 다른 앱들은 실행이 되지 않는데 방법이 있기는 하다.[7] 문제는 이 방법이 관리자 계정의 권한을 일반 사용자 계정과 동일하게 만들어주는 방법으로 Administrator 계정을 사용하더라도 UAC가 동작하도록 변경된다. 바꿔 말하자면 원천적으로 관리자 계정에서의 앱 실행은 무슨 수를 쓰더라도 불가능 했다. Windows 10 1803부터는 관리자 계정으로도 메트로 앱을 사용할 수 있게 변경되었지만, 사용자 계정 설정에서는 여전히 UAC를 완전히 끌 수 없기 때문에 억지로 꺼가면서 까지 사용하는 사용자는 거의 없어졌다.

그러나 여전히 많은 윈도우 프로그램들이 관리자 권한을 필수적으로 요구하고 있기 때문에 여전히 문제가 있다. PC방이나 학교의 공공 PC에도 관리자 계정이 열려있는것이 이런 이유 때문이다. 게임 하나 설치하려고 해도 Administrator 권한을 요구하기 때문에 그럴때마다 주인이 일일이 다 풀어줄수는 없기 때문이다.

Administrator 계정 말고는 SYSTEM이라는 계정이 있다. 시스템에서 최고 권한을 가진 계정으로 Administrator보다 상위 권한을 가진다. 이것만 본다면, Administrator를 아무나 쓰는 윈도우의 현실상 SYSTEM 계정이 윈도우에서 실질적인 root 계정 역할을 할 것 같지만, SYSTEM 계정은 원격 접속이 불가능하고, 윈도우가 부팅하는 과정에서 로그인이 되기 때문에 사용자가 일반적으로 이 계정을 사용하여 로그온을 할 수가 없다. 바꿔 말하자면 관리자 계정인 Administrator 계정 마냥 아무렇지도 않게 사용하는 것이 가능하도록 풀어놓게 되면 발생하는 폐해가 관리자 계정을 잘못 다루다가 발생하는 폐해보다 더 막심해진다는 의미다. 이러한 이유로 윈도우의 실질적인 root 계정은 Administrator 계정이 될 수밖에 없다. psexec를 이용해서 SYSTEM 권한으로 프로그램을 실행하거나[8], 그 외에도 권한상승 취약점을 악용하여 SYSTEM 권한을 쓸 수는 있다.[9] 참고로 이 계정은 NT AUTHORITY 그룹에 속해 있다.

SYSTEM 계정으로 프로그램을 실행시키는 방법은 서비스를 이용한 방법이 있는데, 서비스는 보통 SYSTEM 계정으로 실행되므로 서비스가 실행시키는 프로세스들은 SYSTEM 계정으로 실행된다. 다만 서비스는 Session 0에서 실행되므로 사용자와 상호작용할 수 없다. 즉 UI 프로그램을 실행하면 사용자에게 UI가 나오지 않는다. 이를 해결하려면 다른 Session로 실행시켜야 한다.

SYSTEM 계정으로 UI 프로그램을 실행시키는 방법은 보안 토큰을 복제해서 그 토큰으로 실행시키는 것이다. 다만 Administrator으로 실행되는 프로그램이 SYSTEM으로 실행되는 프로세스의 보안 토큰을 복제하려고 하면 액세스 거부로 실패한다.

로그온 화면에서 탐색기를 강제로 실행시키면 SYSTEM 계정으로 로그온할 수 있지만, 이 짓을 하면 CPU를 50% 정도 잡아먹는데다 제어판 등이 실행되지 않아 할 수 있는 게 없다. 그리고 로그온 프로세스인 LogonUI.exe를 강제로 꺼도 다시 실행이 된다. 주의할 점은, 이렇게 탐색기가 실행된 상태에서 로그인을 하면 사용자 설정이 영구적으로 망가져 나가서 재설치를 하지 않는 이상 복구가 사실상 불가능하다. 따라서 가상머신으로 테스트를 하는 게 아니면 이 짓을 절대로 하지 않는 게 좋다. 예전에는 이 SYSTEM 계정으로도 탐색기나 제어판 등을 열 수 있었지만, Windows 7 같은 경우는 탐색기를 실행하려 하면 계정 이름이 올바르지 않다며 거부하며 Windows 10 부터는 아예 시작 메뉴 자체가 열리지 않는다. 당연히 제어판이나 스토어 앱 같은 것은 실행 불가.

그리고 SYSTEM 계정을 만들려고 하면 계정이 이미 있다고 나온다.

Windows Vista 부터 Windows 11까지, 그리고 Windows Server 2008 부터 Windows Server 2022 까지는 SYSTEM과 동급인 TrustedInstaller 계정도 있다. Windows 업데이트에 사용되는 것으로 마이크로소프트에서 만들지 않은(정확히는 마이크로소프트 디지털 서명이 되어 있지 않은) 프로그램들은 시스템 파일을 건드릴 수 없다. 현실적으로 TrustedInstaller 계정이 SYSTEM 계정보다 높은 편인데, 시스템 파일 대부분이 소유자가 TrustedInstaller로 설정되어 있어 SYSTEM 권한으로는 수정할 수 없기 때문이다.

TrustedInstaller 서비스가 TrustedInstaller 계정으로 실행된다. SYSTEM 계정으로 실행되지만 보안 토큰을 보면 TrustedInstaller 소유자가 활성화되어 있는 것을 볼 수 있다. 이 서비스는 Windows 업데이트 등 시스템 파일을 수정할 때 실행되며 평소에는 실행되어 있지 않다. 역시 보안 토큰을 복제하고 실행시키는 방법으로 TrustedInstaller 계정으로 프로그램을 실행시킬 수 있다.

물론 TrustedInstaller이라도 파일을 수정할 수 있는 방법은 있다. 다만 다른 프로그램의 파일 수정이 먹히기 때문에, 추천하지 않는다. 소유자를 TrustedInstaller로 다시 되돌리려면 Windows 7 기준으로 속성 -> 보안 -> 고급 -> 소유자 탭[10]에 들어가서 기타 사용자 및 그룹 단추를 누르고 NT Service\TrustedInstaller를 입력하면 된다.

4. 유사표현



[1] sudo passwd root를 입력해 루트 계정의 비밀번호를 정하면 그 후에는 루트로 바로 로그인할 수 있다. [2] sh나 bash 등 본 셸 계열 기준. 다른 계열 셸은 다른 프롬프트를 쓰기도 하는데, 예시로 zsh는 $ 대신 %를 쓴다. [3] 해당 컴퓨터가 만에하나 네트워크 관리자가 네트워크 관리를 위해 사용중인 컴퓨터 였다면 네트워크 전체가 넘어간 거나 다름없다. [4] 그렇지 않아서 문제가 발생한 대표적인 예로 Active X가 있는데 Active X에는 샌드박스 제한이 없었기 때문에 root는 물론 커널 권한까지 사용할수 있다. 때문에 설치하기만 하면 블루스크린이 뜨고 삭제되지도 않는 악성코드에 가까운 프로그램들이 생겨나게 되었다. UAC를 도입했지만 이미 대부분의 프로그램들이 설치할때 관리자를 요구하기 때문에 사용자들이 파일을 확인하지도 않고 무조건 허용 버튼만 눌러버리게 되면서 사실상은 무용지물이다. 또한 이 방법으로는 정상적인 프로그램으로 위장한 백도어 같은 악성코드를 걸러낼 수 없다. [5] 그렇지 않으면 /에서 재귀삭제를 하는 것은 위험하다면서 이 경고를 무시하려면 [6] 대표적으로, CIH 바이러스가 BIOS를 파괴할 수 있던 원리가 바로 버그를 통한 Ring0 권한 탈취였다. [7] 홈 에디션의 경우 로컬 그룹 정책이 기본적으로 없는데다, 억지로 파일을 넣어놓는다고 하더라도 적용 자체가 아예 안되기 때문에 이 방법이 먹히지 않지만, 레지스트리를 조정하는 방법이 있다. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System 폴더에서 FilterAdministratorToken 값을 1로 바꾸면 된다. [8] PsExec은 원래 원격 제어 프로그램인데, 이 프로그램으로 원격지에서 SYSTEM으로 제어할 수 있다. 이를 이용해 로컬 컴퓨터(그 컴퓨터 자신)을 SYSTEM으로 원격제어를 하는 것이다. [9] 실제로 일반 권한에서 SYSTEM 권한으로 상승시키는 취약점은 몇개 발견되었다. [10] Windows 10 기준으로는 상단의 소유자 변경 버튼을 눌러야 한다.