sudo-ed 스크립트가 sudo -u를 무시하는 것 같습니다.행 접두사

sudo-ed 스크립트가 sudo -u를 무시하는 것 같습니다.행 접두사

내가 아는 한, sudo -u <user>상속된 sudo를 "취소"하고 일반 사용자로 다음 줄을 실행하기 위해 sudo로 실행되는 스크립트에서 이것을 사용할 수 있습니다. 적어도 아래의 맥락에서는 그렇지 않습니다. sudo -u <user>아무 것도 하지 않는 것 같습니다!

이를 설명하기 위해 두 개의 간단한 Bash 스크립트인 master.sh스크립트와 slave.sh스크립트를 사용합니다.

master.sh:

#!/bin/bash

sudo -u dad /home/dad/Downloads/slave.sh

슬레이브.sh:

#!/bin/bash

if [[ ! -v DOTNET_ROOT ]] # If variable is not set ...
then
  echo "DOTNET_ROOT needs to be set ..."
else
  echo "No need to set DOTNET_ROOT."
fi

다양한 시나리오를 실행할 때 발생하는 상황은 다음과 같습니다.

dad@DadsGram~/Downloads $ echo $DOTNET_ROOT
/home/dad/.dotnet
dad@DadsGram~/Downloads $ ./slave.sh 
No need to set DOTNET_ROOT.
dad@DadsGram~/Downloads $ sudo ./master.sh 
DOTNET_ROOT needs to be set ...
dad@DadsGram~/Downloads $ sudo ./slave.sh 
DOTNET_ROOT needs to be set ...

내가 뭘 잘못했나요?

답변1

두 번째는 sudo이전 항목을 "취소"하지 않고 sudo이전 항목을 덮어씁니다. 그것은 모자를 벗는 대신 가발을 모자에 씌우는 것과 같습니다.

sudo이것이 환경 변수 삭제의 부작용이 있다는 것을 알고 계실 것 같습니다 . (참고: 그게 아니기 때문에기초적인이를 위해 sudo자신이 이해한 것과 달성하고자 하는 것이 무엇인지 좀 더 명확하게 설명할 수 있다면 좋을 것 같습니다. ) 두 번째는 sudo첫 번째 UID 설정을 덮어씁니다. 전체 환경을 처음 이전 상태로 복원할 수는 없습니다 sudo. 삭제된 환경 변수를 마법처럼 복원할 수는 없습니다.

관련 정보