리눅스 터미널에서 루트(root) 세션을 시작하는 방법은 매우 다양합니다. 그래서 루트 권한을 얻고 싶은 초보 사용자들은 각 명령어가 어떻게 루트 권한을 부여하는지, 서로 어떤 차이가 있는지, 그리고 이러한 차이가 실제로 중요한 경우는 언제인지 혼란스러워하기 쉽습니다. 이 글에서는 터미널에서 루트 권한을 얻는 데 사용되는 여러 명령어를 하나씩 분석하고, 각 명령어의 작동 방식과 사용 시점까지 자세히 설명합니다.
su
su 명령어는 현재 셸에서 사용 중인 사용자를 다른 사용자로 전환(substitute)합니다.
su 뒤에 사용자 이름을 입력하면 해당 사용자로 전환할 수 있습니다. 이 경우 시스템은 현재 사용자에서 벗어나 지정된 사용자로 로그인을 전환합니다. 또한 su 명령어 뒤에 아무것도 지정하지 않으면 루트 계정으로 접근하게 됩니다.
"su"는 시스템의 루트 계정에 직접 접근하고 싶을 때 가장 적합합니다. sudo 같은 도구를 거치지 않고, 루트 사용자의 비밀번호를 직접 입력하여 실제로 루트 계정에 로그인하는 방식입니다. 게다가 다른 루트 권한 획득 방법과 달리 루트 홈 디렉터리와 루트 환경까지 함께 얻을 수 있다는 장점이 있습니다.
sudo su
이 명령어는 루트 비밀번호가 아닌 현재 사용자의 비밀번호를 요구합니다.
기본적으로 셸에서 su를 실행하는 것과 같지만, 한 가지 결정적인 차이가 있습니다. 시스템에 "사용자 전환"을 직접 지시하는 대신, "su" 명령을 루트 권한으로 실행하도록 요청하는 것입니다. sudo su를 실행하면 ".profile", ".bashrc", "/etc/profile"이 로드되는데, 이는 su(또는 su root)를 실행했을 때와 동일합니다. 앞에 sudo가 붙은 모든 명령은 루트 권한으로 실행됩니다.
"sudo su"와 "su" 사이에는 큰 차이가 없지만, sudo su가 여전히 유용한 중요한 이유가 하나 있습니다. "su"로 루트 권한을 얻으려면 루트 비밀번호를 알아야 합니다. 반면 sudo su는 현재 사용자의 비밀번호만으로 루트 권한을 부여합니다. 즉, 루트 비밀번호 없이도 루트 권한을 얻을 수 있어 보안성이 향상됩니다.
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를 꼽습니다.
sudo -s
이 명령어는 $SHELL 변수를 사용하여 셸을 호출합니다.
"sudo" 명령의 -s 스위치는 명령을 실행하는 현재 사용자의 $SHELL 변수를 읽습니다. 이 명령은 사용자가 sudo /bin/bash를 실행하는 것과 같은 방식으로 작동합니다. sudo -s는 "비로그인(non-login)" 스타일의 셸입니다. sudo -i나 sudo su와 달리 시스템은 어떠한 환경 파일도 읽지 않습니다. 사용자가 셸에 sudo -s를 실행하라고 지시하면 루트 권한은 얻지만, 사용자나 사용자 환경은 변경되지 않습니다. 홈 디렉터리도 루트의 홈이 되지 않습니다.
이 명령어는 사용자가 루트로 완전히 전환하고 싶지는 않지만, 자신의 $SHELL 환경 값을 유지한 대화형 셸을 원할 때 가장 적합합니다. 앞서 설명한 다른 명령어들은 루트 권한을 얻는 동시에 루트 환경 파일에 영향을 주며 사용자에게 루트에 대한 더 넓은 접근 권한을 허용합니다(보안 문제가 될 수 있음).
자주 묻는 질문
1. 어떤 명령어를 사용해야 할까?
각 명령어마다 고유한 용도가 있습니다. 중요한 것은 각 명령어가 무엇을 하는지, 언제 사용해야 하는지 정확히 이해하는 것입니다. 현재 기준으로 sudo -i가 루트 환경을 얻는 가장 실용적이고 깔끔한 방법입니다. 반면 sudo -s를 사용하면 루트 환경을 건드리지 않고 루트 셸을 얻을 수 있어 추가적인 보안 이점이 있습니다.
2. 루트 접근이 시스템에 해를 끼칠 수 있나?
경우에 따라서는 그럴 수 있습니다. 특정 터미널 세션의 모든 작업에 루트 권한이 반드시 필요하다고 확신하지 않는 한, 특정 명령에만 루트 권한이 필요하다면 sudo 뒤에 명령어를 입력하는 것이 좋습니다. 예를 들어 데비안 계열 리눅스에서 sudo apt install vlc를 입력하면 운영체제는 APT 패키지 관리자를 실행해 VLC를 설치할 때만 루트 권한을 사용합니다.
sudo -i나 앞서 소개한 다른 변형 명령어를 사용하는 것과, 루트 권한이 필요한 각 명령마다 sudo를 붙여 실행하는 것 사이에는 매우 중요한 차이점이 있습니다. 전자의 경우 명령 기록이 /var/log/auth.log에 기록되지 않습니다. 따라서 실수를 하더라도 무엇을 했는지 돌아가 확인할 수 없어 수정하기 어렵습니다. 루트 세션은 기록되지 않으므로 기억에 의존해 작업해야 합니다.
3. 명령어 앞에 "sudo"를 붙이면 어떤 변형을 실행하는 것인가?
명령어 앞에 sudo를 붙여 실행하면(즉, 실행하려는 명령과 같은 줄에 입력하면) 본질적으로 대화형 루트 셸 아래에서 해당 명령을 실행하는 것입니다. 이는 단독 명령어인 sudo -s가 하는 일과 같습니다.
마무리
이 목록에 있는 명령어 중 100% 최고인 것은 없습니다. 명령줄에 익숙해질수록 루트 권한을 얻는 다양한 방법(매우 많음)을 각각 고려하고 장단점을 저울질한 후 상황에 맞게 선택해야 합니다. 이 글이 그런 판단을 내리는 데 도움이 되기를 바랍니다. 명령어에 대해 더 알고 싶다면 디렉터리 내용을 나열하는 유용한 리눅스 명령어를 다룬 글도 참고해 보세요.