sudo su를 실행해야 할 이유가 있습니까? 제안되는 경우가 종종 있습니다 .

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

  • 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_COLORSXDG_foo시스템 변수 인 것 같습니다 sudo su.

그 차이가 다소 우아하지 않은 것을 사용해야 할 경우가 sudo su있습니까? 달리는 데 아무런 문제가 sudo su없거나 무언가를 놓치고 있다고 사람들에게 (자주있는 것처럼) 안전하게 말할 수 있습니까 ?



답변

귀하의 질문에 언급했듯이 주요 차이점은 환경입니다.

sudo su - vs. sudo -i

의 경우 sudo su -그것이 로그인 쉘, 그래서 /etc/profile, .profile그리고 .bashrc실행하면 루트의 환경과 루트의 홈 디렉토리에있는 자신을 발견 할 것이다.

sudo -i거의 동일 (초기 로그인을 시뮬레이션) 옵션은 로그인 쉘과 같은 대상 사용자의 암호 데이터베이스 항목에 의해 지정된 쉘을 실행합니다. 이 로그인 특정 자원과 같은 파일을 의미 , 또는 읽고 쉘에 의해 실행됩니다.sudo su --i.profile.bashrc.login

sudo su vs. 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점점 더 대중화되고 있습니다. 그것은 거의 모든 잘 알려진 리눅스 배포판에 통합되어 있습니다. 다른 사용자 계정으로 전환하는 원래 도구는 su입니다. 오래된 학교 * nix 베테랑의 경우와 같은 것이 sudo불필요하게 보일 수 있습니다. 복잡성을 추가하고 Microsoft의 os 제품군에서 알고있는 메커니즘에 더 적합하게 작동하므로 * nix 시스템의 단순성에 위배됩니다.

나는 정말 베테랑이 아니지만 내 의견으로 sudo는 항상 내 편에 가시가있었습니다. 시간이 소개되고 sudo가능한 경우 항상 사용법을 사용했습니다 . 나는 사용하기를 가장 꺼려한다 sudo. 모든 시스템에서 루트 계정이 활성화되어 있습니다. 그러나 su더 이상 사용되지 않고 완전히 sudo대체 되는시기가 올 것 su입니다.

따라서 나는 같은 오래된 도구에 의존하는 대신에 sudo내부 메커니즘 ( -s, -i) 을 사용하는 것이 최선이라고 생각합니다 su.


답변

귀하의 질문에 직접 대답하기 위해 : 아니오, 이럴만한 이유가 없습니다. 또한 sudo su는 하나만 있으면 두 개의 로그 항목을 생성합니다.

나는 많은 사람들이 이것을하는 것을 보았고, 왜 그들이 왜 실행하지 않는지 물었을 때 sudo -s대답은 단지 -ssudo 플래그를 알지 못하고 일반적으로 지적한 후에 전환합니다.

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


답변