root
1. 개요
리눅스나 macOS와 같은 유닉스 계열의 운영체제에서 모든 권한을 가지고 있는 최고 관리자가 사용하는 ID를 의미하며, 최고 관리자인 사람 자체를 가리키기도 한다. User ID 번호는 0번. 유닉스 계열의 모든 운영체제에는 이 root 유저가 존재한다. macOS, 우분투처럼 root 계정을 기본 상태에서 사용할 수 없게 만든 경우라도 별도 옵션을 통해 활성화할 수 있으며, 유닉스 계열 OS에 root 계정이 없는 경우는 절대로 없다.
2. 특징
최고 관리자 root의 권력은 정말로 절대적인 존재이기 때문에 해당 운영체제의 '''모든 것을 제어할 권리를 가지게 된다.''' 여기서 말하는 모든 것에는 시스템을 파괴할 권한을 포함한다. 그것이 실수든 고의든 해킹이든 간에.
그렇기 때문에 일반적인 리눅스 운영체제에서는 기본적으로 컴퓨터 주인의 계정 또한 root보다 권한이 낮은 일반 사용자로 만들어지며, 시스템 관리 작업 등을 할 때에는 sudo 라는 명령을 사용해서 임시 root 권한을 얻도록 되어 있다. OS X의 경우에는 root 권한이 필요한 작업을 하기 전에 패스워드를 물어보는데 이건 sudo 명령에 GUI를 붙인 gsudo 명령이다.
참고로 sudo에 명령어 대신 셸을 집어넣으면 사용하면 루트셸로 진입할 수 있는데, 이 루트셸을 띄우는 것이 해커들의 궁극적 목표이기도 하다. 일단 루트셸의 '''#''' 프롬프트(일반 사용자는 보통 $ 프롬프트[1] )를 띄운 순간부터 해당 컴퓨터는 사용자의 명령에 절대복종한다. 자살하라는 명령까지 군말 않고 따른다. 단 이렇게 root 권한을 획득했다고 하더라도 컴퓨터를 장악한 것일 뿐, 해당 컴퓨터가 속해 있는 네트워크 전체를 장악한 것은 아니다.[2] 네트워크를 장악하려면 라우터를 해킹해야 한다.
언뜻 보면 운영체제가 실제 주인인 당신의 권한을 제한하는 하극상을 연출하는 것처럼 보이지만 이는 안전과 보안을 위한 필수불가결한 조치이다.[3] 시스템 설정을 변경해서 항상 root 상태로 있을 수는 있는데 굉장히 위험하다. 예를 들어 rm -rf /를 일반 사용자 계정에서 실행하면 권한 없음 에러를 내면서 시스템이 거부하지만 root 계정일 경우에는 '''묻지도 따지지도 않고''' 실행해버릴 수 있다. 단 리눅스 시스템의 적당히 최신 버전이라면 rm 명령에 최후 안전장치가 있어서 거부된다. no-preserve-root를 사용하라고 알려준다.] BSD 계열이라면 그런 거 없다.
일반적인 방법으로 root 계정 액세스가 허용되지 않는 OS, 특히 안드로이드에서 일반 사용자가 root 권한을 취득하는 것을 루팅(rooting)이라고 한다.
애플의 경우 루트리스라는 명목으로 root를 엿먹이는 것을 내놓았다. root 명령으로도 못 지우는 파일과 디렉터리를 만든 것. 근데, 이건 SELinux 와 마찬가지 물건인지라... 물론 이 루트리스를 끄는 방법도 존재하기는 한다.
또한 애플의 경우 root 계정을 기본적으로 비활성화해 두었다. 설정의 사용자 설정에서 별도로 활성화해 준 후에야 해당 계정을 사용할 수 있다.
Root가 운영체제 내에서는 가장 높은 권한이지만 컴퓨터 전체에서는 Ring 0가 일반적으로 가장 높은 권한이다. 운영체제 커널, 장치 드라이버, 백신 프로그램 등이 이 권한으로 실행된다. 예를 들면 Root 로 실행되는 프로그램이라도 하드 디스크에서 파일을 읽으려고 하면 바로 하드디스크를 제어해서 파일을 읽거나 할수가 없다. 디스크를 직접 제어할수 있는 Ring 0 권한을 가진 장치 드라이버와 커널을 통해서 읽어야 한다. 일반적으로 Ring 0는 컴퓨터의 모든 부분을 제어할수 있는 권한이기 때문에 일반 애플리케이션이 사용할 경우 해킹이나 시스템 오류를 이르킬 가능성이 있어 매우 위험하다. 그래서 윈도우에서는 일반적인 방법으로는 Administrator 계정으로도 Ring 0를 사용할수 없다. 백신이나 장치 드라이버 같은 외부 프로그램을 Ring 0로 실행시키기 위해서는 당연히 루트(Administrator) 계정이 필요하긴 하다.
3. Microsoft Windows
Windows의 경우 Administrator 그룹 계정이 여기에 해당되는데, Administrator가 아니면 그야말로 '''아무 것도 할 수 없기 때문에''' Administrator를 안 쓰는 사람이 없다. 따라서 '''사용자 계정이 곧 root 계정이나 마찬가지다.''' 또한 컴퓨터 수리점에서 윈도우를 설치할 때 기본 로그인 계정을 Administrator 계정으로 한다. Windows 구성 자체가 모든 사용자들과 금고 열쇠를 공유하고 있었던 셈. 이 문제를 UAC을 Windows Vista 때 도입되면서 어느정도 해결하려고 했으나, 그나마도 9x 계열의 윈도우 들을 비롯한[4] Windows 2000 Professional[5] , Windows XP(Server 2003/R2 포함)에 완전히 길들여 질대로 길들여졌던 유저들은 UAC 기능을 끄고 사용하기도 했지만, Windows 7에서 일부 개선이 되고 Windows 8 부터 Windows 10 RS2 까지는 완전히 끄지 못하도록 변경되면서 억지로라도 끄고 사용하는 사용자는 거의 없어졌다. 오직 레지스트리를 건드려야만 끄는 게 가능한 홈 에디션을 제외하면 그룹 정책을 건드리는 선택지도 있지만, MS에서는 사용자가 UAC 기능을 기어코 꺼버리는 경우를 대비하여 설정 앱을 제외한 다른 앱들을 실행시키지 못하도록 막아 놨다. Windows 10 RS3부터는 SKU를 불문하고 무조건 레지스트리를 건드려야 하는데, 레지스트리와 관련된 지식을 충분히 숙지한 사람이 건드리는 것 또한 매우 위험한 일인지라 권장 할 수가 없다.
사실 윈도우 상에서는 사용자 계정일 경우 대부분의 프로그램은 설치조차 불가능하고[6] 사용 중 관리자 권한을 요구하는 애플리케이션이 많아 어쩔 수 없이 관리자 계정을 사용하는 것에 가깝다. PC방이나 학교의 공공 PC에도 관리자 계정이 열려있는것이 이런 이유 때문이다. 게임 하나 설치하려고 해도 Administrator 권한을 요구하기 때문에 그럴때마다 주인이 일일이 다 풀어줄수는 없기 때문이다.
Administrator 계정 말고는 '''SYSTEM'''이라는 계정이 있다. 시스템에서 최고 권한을 가진 계정으로 Administrator보다 상위 권한을 가진다. 이것만 본다면, Administrator를 아무나 쓰는 윈도우의 현실상 SYSTEM 계정이 윈도우에서 실질적인 root 계정 역할을 할 것 같지만, SYSTEM 계정은 원격 접속이 불가능하고, 윈도우가 부팅하는 과정에서 로그인이 되기 때문에 사용자가 일반적으로 이 계정을 사용하여 로그온을 할 수가 없다. 이러한 이유로 윈도우의 실질적인 root 계정은 Administrator 계정이 될 수밖에 없다. psexec를 이용해서 SYSTEM 권한으로 프로그램을 실행하거나, 그 외에도 권한상승 취약점을 악용하여 SYSTEM 권한을 쓸 수는 있다. 참고로 이 계정은 '''NT AUTHORITY''' 그룹에 속해 있다.
로그온 화면에서 탐색기를 강제로 실행시키면 SYSTEM 계정으로 로그온할 수 있지만, 이 짓을 하면 CPU를 50% 정도 잡아먹는데다 제어판 등이 실행되지 않아 할 수 있는 게 없다. 그리고 로그온 프로세스인 LogonUI.exe를 강제로 꺼도 다시 실행이 된다. 주의할 점은, 이렇게 탐색기가 실행된 상태에서 로그인을 하면 '''사용자 설정이 영구적으로 망가져 나가서''' 재설치를 하지 않는 이상 복구가 사실상 불가능하다. 따라서 가상머신으로 테스트를 하는 게 아니면 이 짓을 '''절대로''' 하지 않는 게 좋다. 예전에는 이 SYSTEM 계정으로도 탐색기나 제어판 등을 열 수 있었지만, Windows 7 같은 경우는 탐색기를 실행하려 하면 계정 이름이 올바르지 않다며 거부하며 Windows 10의 경우 아예 시작 메뉴 자체가 열리지 않는다. 당연히 제어판이나 스토어 앱 같은 것은 실행 불가.
그리고 SYSTEM계정을 만들려고 하면 계정이 이미 있다고 나온다.
윈도우 비스타부터 10까지, 그리고 서버 2008부터 서버 2016~2019까지는 SYSTEM과 동급인 TrustedInstaller 계정도 있다. Windows Update에 사용되는 것으로 마이크로소프트에서 만들지 않은(정확히는 마이크로소프트 디지털 서명이 되어 있지 않은) 프로그램들은 시스템 파일을 건드릴 수 없다. 현실적으로 TrustedInstaller 계정이 SYSTEM보다 높은 편인데, 시스템 파일 대부분이 소유자가 TrustedInstaller로 설정되어 있어 SYSTEM 권한으로는 수정할 수 없기 때문이다.
물론 TrustedInstaller이라도 파일을 수정할 수 있는 방법은 있다. 다만 소유자를 한번 바꾸면 다시 되돌릴 수 없다. 또한 다른 프로그램의 파일 수정이 먹히기 때문에, 추천하지 않는다.
4. 유사표현
- 슈퍼유저: 혼자 사용하는 것을 상정하여 만들어진 윈도우 초기 버전 같은 구형 운영체제에서도 일반 사용자가 실수로 시스템 파일을 삭제하여 컴퓨터를 사용할 수 없게 만드는 것을 방지하기 위해서 모든 걸 허용하지는 않도록 안전장치가 되어 있었다. 하지만 필요에 따라서는 이런 제한을 풀고 시스템 파일을 수정할 수도 있어야 하기 때문에, 이런 이유로 나온 것이 슈퍼유저라는 개념이다. 위에서 설명한 root와 동일한 권한을 가지고 있다고 보아도 무방하며, 때로는 동의어처럼 쓰이기도 한다.
- Administrator (Admin): 위에서 언급되었듯이 Windows 계열에서는 이 계정이 관리자 계정이다. 실질적으로 root와 동등하다고 보면 된다. Administrator 계정보다도 더 최상위 권한을 쥐고 있는 SYSTEM 계정은 이미 언급했듯이 정상적인 방법으로 접근하는 것 자체가 불가능한 계정이기 때문이다.
- 시솝(sysop): SYStem OPerator 의 줄임말로 '시솝', '시삽', '시샵 ' 등으로 부른다. 이는 운영자, 관리자을 뜻하는 표현으로 하이텔, 천리안 같은 PC 통신 시절의 관리자를 의미하는 표현이었다.
[1] 셸 프로그램에 따라 다르다. 예시로 zsh는 $ 대신 %를 쓴다.[2] 물론 해당 컴퓨터가 네트워크 관리자였다면 네트워크 전체가 넘어간 거나 다름없다.[3] 그렇지 않아서 문제가 발생한 대표적인 예로 Active X가 있는데 Active X에는 샌드박스 제한이 없었기 때문에 root는 물론 커널 권한까지 사용할수 있다. 때문에 설치하기만 하면 블루스크린이 뜨고 삭제되지도 않는 악성코드에 가까운 프로그램들이 생겨나게 되었다. UAC를 도입했지만 이미 대부분의 프로그램들이 설치할때 관리자를 요구하기 때문에 사실상은 무용지물이다.[4] 9x 계열의 윈도우들은 아예 사용자 분리라는 개념이 없었다. 그것도 바탕화면을 공유했다! 사용자 초기화 파일로 분리시킬 수는 있었지만, 사용자 초기화 파일을 사용하기 전까지는 저장한 아이콘과 파일이 모두 공유된다는 문제는 그대로였고, '''사용자 계정이 곧 관리자 계정이나 마찬가지였다.'''[5] 서버, 어드밴스드 서버, 데이터센터 서버 에디션 또한 UAC 자체가 없었긴 마찬가지이나, 일반인들이 쓰라고 내놓은 SKU가 아닌 본격적인 서버 운영에 필요한 기능들이 포함되어있는 SKU 이기에 논외.[6] 대부분 인스톨러가 설치 시 관리자 계정을 요구한다.