상속 환경에서 sudo와 su의 차이점

상속 환경에서 sudo와 su의 차이점
  1. sudo상위 셸 프로세스에서 환경을 상속하여 명령을 실행할 수 있지만 sudo su루트 사용자 이후의 셸 프로세스는 실행할 수 없는 이유는 무엇입니까?

    t@ocean:/tmp$ export ME=tim
    t@ocean:/tmp$ sudo echo $ME
    tim
    
    t@ocean:/tmp$ sudo su
    root@ocean:/tmp# echo $ME
    
    root@ocean:/tmp# exit
    
  2. 환경이 상위 프로세스에서 하위 프로세스로 상속됩니까?

  3. sudo su루트 사용자 이후의 쉘 프로세스는 이전 사용자의 쉘 ​​프로세스의 하위 프로세스입니까?

감사해요.

답변1

환경 변수 확장은 셸에서 수행되므로 실제로 실행하는 명령은 "sudo echo tim"입니다. 이 모든 작업은 sudo가 실행되기 전에 완료됩니다.

답변2

  1. 변수 확장은 대화식 쉘에 의해 수행됩니다. sudo인수와 함께 echo명령 을 실행하고 있습니다 tim. 호출되는 셸에서 확장이 발생하도록 하려면 셸을 실행하고 해당 셸에 sudo문자열을 전달하도록 지시합니다 .echo $ME

    sudo sh -c 'echo $ME'
    

    sudo일부 상황에서는 보안 위험을 초래할 수 있으므로 대부분의 변수를 환경에서 제거하십시오. 자세한 내용은 설명서 및 기계 구성을 참조하세요. 일반적인 구성에서는 변수가 ME환경에서 제거되므로 sudo sh -c 'echo $ME'아무것도 인쇄되지 않습니다.

  2. 프로세스의 환경은 상위 프로세스가 변경하기로 결정하지 않는 한 상위 프로세스의 복사본입니다. (보다 정확하게는 환경이 다음으로 전달됩니다.execve;대부분의 프로그램은 그들이 가지고 있는 모든 것을 겪습니다. ) Sudo는 환경을 바꾸기로 결정한 프로그램 중 하나입니다.

  3. 를 실행하면 sudo su셸이 실행됩니다(명령을 에 전달하지 않았기 때문에 su). 셸 프로세스의 상위 프로세스는 호출 프로세스 sudo, 즉 명령을 실행한 셸입니다 sudo su.

관련 정보