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 정책에 정의된 대로 새 셸로 전달됩니다.

관련 정보