리눅스 터미널에서 루트 세션을 얻는 방법은 여러 가지가 있습니다. 이는 많은 초보 사용자에게 혼란을 초래할 수 있습니다. 이들은 루트 권한을 얻고자 하지만 각 명령이 루트 접근을 어떻게 얻는지, 이들이 어떻게 다른지 및 이러한 차이가 언제 중요한지를 잘 모르고 있습니다. 여기서는 터미널에서 루트 접근을 얻기 위해 사용되는 여러 명령어를 분석하고, 이들이 루트를 획득하는 방법, 사용 시기 및 중간의 모든 내용을 설명합니다.
목차
- su
- su -c
- sudo su
- sudo -i
- sudo -s
- 자주 묻는 질문
또한 읽어보세요: Doas란 무엇이며, 이를 설치하는 방법
su
su 명령은 현재 쉘에서 현재 사용자를 루트로 대체합니다.
su 다음에 사용자 이름을 추가하여 아무 사용자로 전환할 수 있습니다.
이렇게 하면 시스템에 현재 사용자에서 지정된 사용자로 전환하라고 지시하는 것입니다. Alternatively, su 명령은 아무 것도 명시하지 않고 su를 입력하여 루트 접근을 얻을 수 있습니다.
su는 사용자가 시스템의 루트 계정에 직접 접근하고자 할 때 가장 좋은 방법입니다. 이는 sudo를 사용하지 않으며, 루트 사용자 비밀번호를 입력하라는 메시지가 표시됩니다. 또한 루트 접근을 얻는 다른 방법들은 루트 홈 디렉토리 및 루트 환경에 접근할 수 있는 이점이 없습니다.
경고: su를 사용하는 것은 루트 작업을 실행하는 가장 안전하지 않은 방법입니다. 일반적으로, 이를 피할 수 있다면 사용하지 않는 것이 좋습니다.
또한 읽어보세요: Apt와 Apt-Get 명령에 대한 궁극적인 가이드
su -c
이 명령은 다른 명령을 루트 사용자에게 직접 전달합니다.

sudo를 명령 앞에 입력하는 것과 유사하게, su -c는 루트 사용자로서 명령을 실행합니다. 하지만 단순히 명령을 입력하는 것이 아니라, 그것을 따옴표 안에 넣어야 합니다.
이것은 증가된 권한으로 터미널을 통해 하나의 명령을 신속하게 실행하는 방법입니다. 이는 sudo가 갑자기 사용 불가능한 경우(예: Arch Linux와 같은 배포판은 사전 설치되어 있지 않음)나 손상되어 제대로 작동하지 않는 경우에 매우 유용합니다.
루트에게 직접적인 뭔가를 전달하고 있으므로, 사용자와 루트 비밀번호가 다르다면 루트 비밀번호를 입력해야 인증받을 수 있습니다.
sudo su
이 명령은 루트가 아니라 현재 사용자의 비밀번호를 요청합니다.
본질적으로 이는 단순히 쉘에서 su를 실행하는 것과 같습니다. 단 하나의 중요한 차이점이 있습니다: 시스템에 “사용자를 전환하라”고 직접 지시하는 대신, su 명령을 슈퍼유저 권한으로 실행하라고 지시합니다. sudo su가 실행되면 “.profile,” “.bashrc” 및 “/etc/profile”이 시작됩니다. sudo 앞에 있는 모든 명령은 루트 권한을 부여받습니다.
sudo su와 su 사이에는 큰 차이가 없지만, 전자는 여전히 중요한 이유로 매우 유용한 명령입니다. 사용자가 시스템에서 루트 접근을 얻기 위해 su를 실행해야 할 경우, 루트 비밀번호를 알아야 합니다. 그러나 sudo su는 현재 사용자의 비밀번호를 요청하여 루트를 부여하므로 루트 비밀번호 없이 루트에 접근할 수 있습니다.
사용자가 루트 비밀번호를 잊어버린 경우, 이는 유용합니다. 비밀번호가 사용자 계정 비밀번호와 다르면 이렇게 할 수 있지만, 언젠가는 루트 비밀번호를 재설정해야 합니다.
또한 읽어보세요: 리눅스에서 rm 명령 사용 방법
sudo -i
sudo -i를 사용하는 것은 사실 sudo su 명령과 거의 동일하지만, 한 가지 예외가 있습니다: 루트 사용자와 직접 상호 작용하지 않습니다.
sudo su처럼 -i 플래그는 사용자로 하여금 루트 계정 비밀번호를 모르더라도 루트 환경을 가져올 수 있게 합니다. sudo -i는 또한 sudo su를 사용하는 것과 매우 유사합니다: 모든 환경 파일(“다시 .profile” 등)을 읽고 쉘 내 환경을 설정합니다.
sudo su와 다른 점은 sudo -i가 루트 사용자와 직접 상호 작용하지 않고 더 깔끔하게 루트 및 루트 환경을 얻는 방법이라는 점입니다.
명확히 하자면: sudo su를 사용할 경우 여러 개의 루트 setuid 명령이 백그라운드에서 사용됩니다. 이로 인해 어떤 환경 변수가 유지되고 어떤 변수가 변경될지 판단하기가 훨씬 더 어려워집니다(루트 환경으로 전환할 때). sudo -i에서는 그렇지 않습니다. 이러한 이유로 대부분의 사람들은 루트에 직접 로그인하지 않고 루트를 얻는 선호되는 방법으로 보고 있습니다.
더 간단하게 말하자면: sudo -i는 “루트” 사용자에 대한 “클린” 로그인도 해주며, 이는 루트 사용자에 대한 “홈” 폴더인 “/root”에 위치합니다.
또한 읽어보세요: 리눅스에서 dd 명령 사용 방법
sudo -s
이 명령은 사용자의 $SHELL 변수를 가진 셸을 호출합니다.
sudo 명령의 -s 스위치는 명령을 실행하는 현재 사용자의 $SHELL 변수를 읽습니다. 이 명령은 사용자가 sudo /bin/bash를 실행하는 것처럼 작동합니다. 사용자가 bash에서 오는 경우에 해당됩니다.
우리의 경우, sudo -s는 이전에 fish를 기본 셸로 설치했기 때문에 fish 대화형 셸을 제공했습니다. 이는 마치 sudo /usr/bin/fish를 실행한 것과 같습니다.

sudo -s는 “비로그인” 스타일의 셸입니다. sudo -i나 sudo su와 같은 명령과 달리, 시스템은 아무 환경 파일도 읽지 않습니다. 사용자가 셸에 sudo -s를 실행하라고 지시하면 루트를 획득하지만 사용자 환경이 변경되지 않습니다. 당신의 홈은 루트 홈이 아니게 됩니다.

이 명령은 사용자가 루트로 전환하면서 동일한 셸 환경을 유지하고 싶을 때 가장 좋습니다. 예를 들어, fish 스크립트를 실행하고 싶은데 루트가 주로 사용하는 기본 bash 셸에 강제되는 것을 피하고 싶을 수 있습니다.
위에서 언급된 다른 명령은 루트 접근을 얻지만, 또한 루트에 대한 배포판이 가진 셸 및 환경 변수를 제공할 것입니다. 아마도 그냥 사용자를 전환하고 싶지만 모든 그 짐이 필요하지는 않을 것입니다!
또한 읽어보세요: 리눅스 초보자를 위한 기본 Bash 명령
자주 묻는 질문
내가 실행 중인 쉘이 중요할까요?
사용자 계정에 대해 수정되지 않은 bash 셸을 사용하는 경우, 차이는 대부분 철학적인 것입니다. 대부분의 경우, 두 쉘을 통해 루트로 상승하는 것은 눈에 띄는 변화를 초래하지 않습니다. 그러나 다른 것을 실행하면 즉시 차이가 날 수 있습니다!
예를 들어, 사용자 계정에 대해 fish 쉘을 실행하고 루트 셸은 bash로 유지하고 있다고 가정해 보겠습니다. sudo -s를 사용하여 사용자 쉘을 로드하면 극적으로 다른 결과가 나타납니다.
쉘은 루트의 홈 폴더에서 가지는 구성에 따라 진행됩니다. 이러한 구성 요소가 없다면, 개인 설정 대신 기본 구성을 로드합니다. (우리의 경우, 이는 “~/.config/fish/config.fish”가 됩니다.) 모든 의도와 목적에 따라, 사용자 구성을 “루트”로 복사하지 말고 그렇게 두는 것이 좋습니다.
루트로 전환할 때 사용자의 계정 셸로 변경하는 것은 특정 셸에서 반드시 실행해야 하는 스크립트를 실행해야 할 경우에만 수행해야 합니다.
루트에 접근하는 것이 내 시스템에 해가 될 수 있을까요?
경우에 따라, 그렇습니다. 특정 터미널 세션에서 모든 것을 위해 루트에 접근해야 할 필요가 없다면, 특정 명령에 대해 루트를 접근하고 싶다면 일반적으로는 그냥 sudo 다음에 명령을 입력하는 것이 좋습니다. 예를 들어, Debian 기반의 리눅스에서 sudo apt install vlc를 입력하면 운영 체제는 VLC를 설치하기 위해 APT 패키지 관리자를 실행하기 위해 루트에 접근하라는 것이 됩니다.
sudo -i나 우리가 이전에 논의한 다른 변형을 사용할 때, 또한 루트로 실행하여 모든 명령을 실행하려는 경우, 전자는 귀하의 명령 기록을 “/var/log/auth.log”에 기록하지 않습니다. 오류가 발생하면 어떤 작업을 했는지 되돌아가서 확인할 수 없습니다. 루트 세션은 기록되지 않기 때문에 메모리를 기반으로 작업해야 합니다.
명령 앞에 “sudo”를 입력하면 어떤 “sudo su” 변형을 실행하고 있는 것인가요?
명령을 실행하기 위해 sudo를 입력하면(즉, 실행하려는 명령과 같은 줄에 입력하는 경우), 본질적으로 대화형 루트 셸에서 실행되고 있는 것입니다. 이는 sudo -s 독립형 명령이 수행하는 작업과 같습니다. 이것은 su -c 명령을 실행하는 것과도 매우 유사합니다.
모든 스크린샷은 미겔 레이바-고메즈에 의해 제공되었습니다.