sudo su - root와 sudo -u root -H /bin/bash 사이에 차이점이 있습니까?

sudo su - root와 sudo -u root -H /bin/bash 사이에 차이점이 있습니까?

제목에서 알 수 있듯이 다음 두 명령에는 차이점이 있습니다.

sudo su - root
sudo -u root -H /bin/bash

저는 GNU/Linux를 사용하고 있습니다. 차이가 있다면 말이죠.

답변1

루트가 되고 싶다면 가장 좋은 방법은 sudo -i초기 로그인을 시뮬레이션하는 것입니다(루트 로그인과 관련된 모든 경로와 변수 제공). 루트 사용자 없이 로그인하려는 경우.문서sudo su, 루트 사용자를 지정하지 않고 직접 사용할 수 있습니다 .

답변2

su - # causes the user to run a login shell aka bash --login
     # the same as if the user had logged in as the root from the login prompt

루트를 지정하는 것과 동일합니다 sudo su -.sudo su - root

sudo -u root -H /bin/bash또한 -u root기본적 sudo으로 루트로 실행되지만 -H /bin/bashsudoer로 실행되는 중복 환경 변수 SUDO_USER, SUDO_UID 및 SUDO_COMMAND는 각각 호출자 이름/uid 및 bash로 설정됩니다.

하지만 이 경우 bash는 로그인 쉘로 실행되지 않습니다.

답변3

분명히 루트 쉘이 /bin/bash가 아니면 다를 수 있습니다. 이는 마이크로 또는 임베디드 Linux 환경에서 가능하거나 루트 사용자가 /bin/[t]csh를 선호하는 기존 BSD 시스템에서 가능합니다. 또한 "su -"는 일부 터미널 관련 변수를 제외한 모든 환경을 제거합니다. 환경에서 sudo의 동작은 구성 가능합니다(/etc/sudoers의 env_reset 참조). 그러니 세세한 부분까지 주의 깊게 살펴보세요...

답변4

나열된 두 명령의 가장 큰 차이점은 실행하면 su -쉘이 로그인 쉘이 된다는 것입니다. 이는 루트 쉘의 로그인 스크립트가 실행되고(예: bash의 경우 .bash_profile) PWD가 $HOME으로 설정되며 사용자 환경의 일부가 초기화된다는 의미입니다. sudo bash대상 사용자의 쉘로 새 쉘을 실행하면 -H는 $HOME 변수를 대상 사용자의 홈 디렉토리로 초기화합니다. 다른 변수는 설정되지 않으며 일부 변수는 sudo 정책에 정의된 대로 새 셸로 전송됩니다.

관련 정보