제목에서 알 수 있듯이 다음 두 명령에는 차이점이 있습니다.
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/bash
sudoer로 실행되는 중복 환경 변수 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 정책에 정의된 대로 새 셸로 전송됩니다.