sudo -s
아마도 중복일 것입니다. 이 질문에 대한 답변을 어딘가에서 본 적이 있을 것입니다. 그러나 권리와 변수 및 기타 항목의 차이점이 무엇인지 궁금합니다 sudo su -
.
내가 아는 한 둘 다 내가 원하는 것은 무엇이든 할 수 있는 루트 셸을 열지만 언젠가는 몇 가지 차이점을 만나게 될지 궁금합니다.
반품이 질문은 AskUbuntu에 있습니다.내 우려 사항을 해결하지 않았습니다.
답변1
sudo-s
$SHELL
변수를 읽고 내용을 실행합니다. $SHELL
포함 되면 /bin/bash
이라고 불린다 sudo /bin/bash
. 따라서 /bin/bash
비로그인 쉘로 시작되므로 모든 도트 파일이 실행되지 않지만 bash 자체는 .bashrc
호출하는 사용자의 정보를 읽는다. 귀하의 환경은 변경되지 않습니다. 귀하의 집은 루트의 집이 아닙니다. 따라서 당신은 루트이지만 호출 사용자의 컨텍스트에 있습니다.
수도수-
su -
이라고 불린다 sudo
. (대시 사용) 과 달리 sudo su
이 쉘은 로그인 쉘이라고 불리므로 , /etc/profile
및 .profile
가 .bashrc
실행되며 루트의 홈 디렉토리와 루트 환경에서 자신을 찾을 수 있습니다.
원천:
답변2
제 생각에는 "sudo" 다음에 "su"를 사용하는 것은 과잉입니다.
su의 주요 목적인 유효 사용자 ID를 변경하지 않고 su를 사용하고 있습니다. 이는 이미 sudo에 의해 수행되었기 때문입니다. 기본 목적으로 사용자 ID를 변경한 후 쉘을 실행하는 su의 기본 동작을 사용합니다. sudo에서 직접 쉘을 실행하면 이를 더 효율적이고 더 명시적으로 달성할 수 있습니다. 호출하는 사용자가 이미 루트인 경우 su 동작을 통해 비밀번호를 다시 묻지 않을 것입니다. 그렇지 않으면 비밀번호를 두 번 입력해야 합니다(sudo에 한 번, su에 한 번). -l 옵션을 전달하거나 "-" 접두사를 사용하여 argv[0]을 설정하여 로그인 쉘로 쉘을 실행할 수 있습니다. 하지만... sudo는 기본적으로 대상 사용자와 일치하도록 $HOME의 값을 변경하지 않습니다('set_home' 또는 'always_set_home'이 /etc/sudoers에 있지 않은 한) -H 옵션을 사용하여 재정의합니다. -- $HOME은 누구를 결정합니다. profile 이 스크립트는 -l과 함께 작동합니다. sudo나 bash는 현재 디렉토리를 변경하지 않습니다(bash_profile의 일부 명령이 변경하지 않는 한).
따라서 "sudo -H bash -l"은 "sudo su -"와 거의 비슷합니다. 과도하지 않고 현재 디렉터리만 변경되지 않습니다.
'sudo -s'는 'sudo su'와 비슷하지만 과하지 않습니다.