sudo su -그리고sudo -i

sudo su -그리고sudo -i

루트 계정이 비활성화된 시스템에서 루트 셸을 시작하려면 다음 명령 중 하나를 실행할 수 있습니다.

  • sudo -i: 대화형 로그인 셸 실행(읽기 /root/.bashrc/root/.profile)
  • sudo -s: 비로그인 대화형 셸 실행(읽기 /root/.bashrc)

sudo su우분투 세계에서는 이것이 루트 쉘을 얻는 방법으로 제안되는 것을 자주 봅니다 . 하나의 명령으로 충분할 때 두 개의 별도 명령을 실행하는 이유는 무엇입니까? 내가 아는 한, sudo -i그것은 와 동등 sudo su -하고 sudo -s동일 합니다 sudo su.

유일한 차이점은 다음과 같습니다( sudo -i왼쪽과 sudo su -오른쪽 비교).

"sudo -i"와 "sudo su -"를 비교하는 meld 스크린샷

sudo -s(왼쪽)과 (오른쪽) 비교 sudo su:

"sudo -s"와 "sudo su"를 비교하는 meld 스크린샷

SUDO_foo변수 및 를 무시하는 주요 차이점은 버전 의 시스템 변수 LS_COLORS인 것 같습니다 .XDG_foosudo su

다소 우아하지 않은 케이스를 사용해야 하는 그런 차이가 있습니까 sudo su? 사람들에게 달리기가 전혀 의미가 없거나 sudo su뭔가를 놓치고 있다고 안전하게 말할 수 있습니까?

답변1

질문에서 말씀하셨듯이 가장 큰 차이점은 환경입니다.

sudo su -그리고sudo -i

sudo su -로그인 셸인 경우 를 실행 하면 /etc/profile루트의 홈 디렉터리에 있고 루트 환경을 갖게 됩니다..profile.bashrc

sudo -isudo su -(초기 로그인 시뮬레이션) 옵션과 거의 동일하며 -i대상 사용자의 비밀번호 데이터베이스 항목에 지정된 쉘을 로그인 쉘로 실행합니다. 이는 로그인별 리소스 파일(예 .profile: .bashrc또는 ) .login이 셸에서 읽고 실행된다는 의미입니다.

sudo su그리고sudo -s

sudo susudo명령으로 호출됩니다 su. Bash는 대화형 비로그인 셸로 알려져 있습니다. 따라서 bash을 실행하면 .bashrc루트로 전환한 후에도 여전히 동일한 디렉터리에 있음을 알 수 있습니다.

user@host:~$ sudo su
root@host:/home/user#

sudo -s$SHELL변수를 읽고 내용을 실행합니다. $SHELL포함된 경우 /bin/bash가 호출됩니다 sudo /bin/bash. 즉, /bin/bash비로그인 셸로 시작되므로 도트 파일이 실행되지 않지만 bash자체적으로 읽혀집니다. bashrc사용자에게 전화를 겁니다. 귀하의 환경은 변경되지 않습니다. 귀하의 집은 루트의 집이 아닙니다. 따라서 당신은 루트이지만 호출 사용자의 컨텍스트에 있습니다.

결론적으로

플래그 가 다음에 -i추가되었습니다 .sudo2004년sudo su -는 템플릿 sudo su -과 유사한 기능을 제공하며 템플릿 sudo -i과 동일하게 작동하도록 되어 있습니다. 환경이 중요하지 않다면 어떤 것을 사용하는지는 중요하지 않다고 생각합니다.

다음에 추가

여기서 반드시 언급해야 할 기본 사항은 sudo실행 전용으로 설계되었다는 것입니다.명령더 높은 권한을 갖고 해당 권한을 다시 원래 권한으로 낮추십시오. 그건 결코 현실이 될 의도가 아니었어변화사용자를 선택하고 루트 쉘을 열어 두십시오. 이 메커니즘은 시간이 지남에 따라 확장되었습니다. sudo왜 모든 명령 앞에 이 메커니즘이 사용되는지에 대해 사람들이 짜증을 냈기 때문입니다.sudo

그래서 그 단어의 의미가 sudo잘못 사용되었습니다. sudo사용자가 루트 권한 사용을 최소화하도록 권장하도록 설계되었습니다.

우리가 지금 가지고 있는 것은 sudo점점 더 대중화되고 있습니다. 거의 모든 잘 알려진 Linux 배포판에 통합되어 있습니다. 다른 사용자 계정으로 전환하기 위한 원래 도구는 입니다 su. 오래된 *nix 베테랑에게는 그런 것이 sudo불필요해 보일 수도 있습니다. 이는 복잡성을 더하고 Microsoft 운영 체제 제품군에서 알고 있는 메커니즘과 더 유사하게 작동하므로 *nix 시스템의 단순성에 대한 아이디어에 어긋납니다.

sudo저는 베테랑은 아니지만, 소개된 이후로 제 옆구리에 가시가 되었던 것 같고 , sudo가능하다면 사용법을 항상 우회하고 있습니다. 나는 적어도 그것을 사용하고 싶습니다 sudo. 내 모든 시스템에서 루트 계정이 활성화되어 있습니다. 그러나 상황은 변하며 언젠가는 더 이상 su사용되지 않고 sudo완전히 대체될 수도 있습니다.su

그래서 , 와 같은 오래된 도구에 의존하기보다는 sudo내부 메커니즘( -s, )을 사용하는 것이 더 좋다고 생각합니다 .-isu

답변2

귀하의 질문에 직접적으로 대답하려면: 아니요, 그렇게 할 이유가 없습니다. 또한 sudo su는 하나의 로그 항목으로 충분할 때 두 개의 로그 항목을 생성합니다.

나는 많은 사람들이 이 작업을 수행하는 것을 보았고 왜 그냥 실행하지 않는지 물었을 때 sudo -s대답은 그들이 sudo에 대한 플래그를 모르고 -s일반적으로 내가 지적한 후에 전환한다는 것입니다.

그러나 귀하의 sudo -s및 목록 에 의 대안인 sudo -i옵션을 하나 더 추가하고 싶습니다 . 홈 디렉터리를 포함한 환경을 보존하세요. 홈 디렉토리가 안전하지 않은 경우(NFS에서) 이는 위험합니다. 하지만 많은 사람들이 루트를 사용하는 환경에서는 루트 파일의 내용에 동의하지 않아도 됩니다 . 광산에는 루트의 전문화가 많이 포함되어 있으므로 루트와 정확히 동일한 환경을 얻지는 못하지만 적어도 내가 원하는 환경은 얻습니다.sudo -sEsu -msudo -sE.bashrc.bashrc

관련 정보