“sudo -u root echo`whoami`”가 root를 반환하지 않는 이유는 무엇입니까? 실행하는 방법은 무엇입니까? 나는 원래

sudo를 사용하여 Ubuntu에서 실제 루트 사용자로 명령을 실행하는 방법은 무엇입니까? 나는 원래 이것이 내가 실행할 때까지 sudo의 기본 동작이라고 생각했다.

myuser@localhost:~$ sudo echo `whoami`
myuser

myuser@localhost:~$ sudo -u root echo `whoami`
myuser

그러나 이것은 내가 원하는 행동 유형이지만 한 줄로만 나타납니다.

myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root



답변

사실 그것은 않습니다 루트로 실행합니다. 그러나 당신에게 일어나는 일은 백틱이 명령을 평가하는 데 필요하기 때문에 실행 전에 평가되고 sudo있다는 것입니다. 더 직접적으로, 왜 이것 만이 아니라 :

sudo whoami

당신의 whoami당신은 당신이 무엇을 볼 이유에서 백은 실제로 현재 사용자와 같은 서브 쉘에서 평가 틱.


답변

서브 쉘 ( whoami)이 먼저 실행되고 결과 ( myuser)가 sudo명령에 배치됩니다 . 무엇을 sudo보는 것은 echo myuser. 그것을 바로 가기로 생각하십시오.

tmpvar=`whoami`
sudo echo "$tmpvar"


답변

여기에 약간의 추측이있는 것 같습니다…

백틱은 분명히 다른 사람들이 설명 한 것을 수행하고, whoami‘sudo’를 호출하기 전에 확장 하고, 예상대로 백틱을 반환 ‘루트’에서 남겨 둡니다.

그러나 sudo (8)로 실제로 어떤 일이 일어나고 있는지 이해하는 것이 유용합니다. 그래서 실제로 매뉴얼 페이지를 보았습니다!

“실제로 효과적인 uid와 gid는 대상 사용자의 것과 일치하도록 설정되어 있습니다.”

따라서 관찰 된 동작은 유효 사용자 ID와 실제 사용자 ID의 차이와 관련이없는 것으로 보입니다.

또한 “sudo printenv”를 수행하고 “printenv”와 비교하는 것이 실례입니다. [i] 일부 [/ i] 내 보낸 변수가 사용 가능하고 일부는 그렇지 않음을 보여줍니다. 호출하는 사용자의 HOME, PATH, PS1, SHELL, TERM 및 EDITOR를보고하지만 MANPATH, CVSROOT, LD_LIBRARY_PATH 또는 ENV. 프로그램이 원래 사용자 또는 루트와 다르게 동작 할 수 있으므로 약간 이상하게 보입니다.


답변

sudo를 사용하면 루트 권한이 아닌 루트 권한으로 모든 명령을 실행할 수 있습니다. 이것이 유용한 이유는이 설정을 사용하면 여러 사람이 루트 권한을 가질 수 있지만 모든 로깅을 수행 할 수 있기 때문에 누가 변경을 수행했는지 나타냅니다.

이 설정은 루트 암호를 공유하는 것보다 낫습니다. 따라서 우분투를 포함한 많은 배포판에서 루트 사용자를 갖도록 대체되었습니다.

반면에 sudo su는 루트 사용자가되므로 실제로 사용해서는 안됩니다.

이 차이는 또한 관찰 된 (올바른) 행동을 설명합니다.


답변

Sudo는 일시적으로 루트 레벨 권한을 부여합니다.

루트가 되려면 기본적으로 우분투에서 차단 된 루트로 로그인해야합니다.

sudo는 루트가 아닙니다. Fred가 SUDO 환경 변수를 che3d로 실행하고 있음을 표시하려면 SUDO_COMMAND가 가장 유용 할 수 있습니다.


답변