sudo에 대한 환경 변수를 저장하는 다음 방법이 작동하지 않는 이유는 무엇입니까? [폐쇄]

sudo에 대한 환경 변수를 저장하는 다음 방법이 작동하지 않는 이유는 무엇입니까? [폐쇄]

~에서https://stackoverflow.com/a/29400598/156458

지금까지 본 다른 솔루션은 일부 시스템 정의를 기반으로 하지만 실제로 는 올바르게 호출하여 sudo현재 환경 PATH( env명령 사용) 및/또는 나머지 환경(옵션 사용) 에서 작동합니다 -E.

sudo -E env "PATH=$PATH" <command> [arguments]

실제로 이를 사용하여 별칭을 만들 수 있습니다.

alias mysudo='sudo -E env "PATH=$PATH"'

sudo( 원본 이름을 대체하여 별칭 자체의 이름을 지정할 수도 있습니다 sudo.)

반면

-E, --preserve-env 사용자가 기존 환경 변수를 보존하기를 원함을 나타내는 보안 정책입니다. 사용자에게 환경을 보호할 권한이 없으면 보안 정책에서 오류가 반환될 수 있습니다.

다음이 작동하지 않는 이유를 알고 싶습니다.

sudo -E <command> [arguments]

?

이것도 "PATH=$PATH" <command> [arguments]명령이라는 점을 감안할 때 다음이 작동하지 않는 이유가 궁금합니다.

sudo  "PATH=$PATH" <command> [arguments]

?

감사해요.

답변1

sudo -E <command> [arguments]

Debian이 Even with의 값을 secure_path재정의하는 것을 정의하기 때문에 귀하의 경우에는 작동하지 않습니다 ./etc/defaultsPATH-E

sudo  "PATH=$PATH" <command> [arguments]

PATH=$PATH인식되고 처리되므로 유효해야 합니다 sudo. 제 경우에는 sudo "PATH=$PATH" env현재 PATH값이 표시됩니다. (이것은 PATH=$PATH <command>보편적으로 인식되는 명령이 아닙니다. 이는 쉘 및 에서 인식되는 구성에 해당 sudo하지만 다른 컨텍스트에서는 반드시 그런 것은 아닙니다.)

그러나 조회 자체에는 sudo사용하지 않지만 여전히 사용합니다 .$PATH<command>secure_path

sudo -E env "PATH=$PATH" <command> [arguments]

이는 및 then 에 표시된 대로 "PATH=$PATH"의 현재 값이 PATH명령에 저장되기 때문에 작동합니다. 그러나 환경을 구축하기 위해 인수에서 해당 값을 읽습니다 .sudoenvsudoPATHenvenv<command>

여기서는 명령이 envin으로 조회되지만, 그 자체는 available로 조회됩니다.sudosecure_pathenv<command>$PATH

관련 정보