나머지 환경 및 sudo와 관련하여 "PATH"의 특별한 점은 무엇입니까?

나머지 환경 및 sudo와 관련하여 "PATH"의 특별한 점은 무엇입니까?

~에서sudo를 사용할 때 명령을 찾을 수 없습니다

실제로 올바르게 호출하면 sudo현재 환경 PATH( env명령 사용) 및/또는 나머지 환경(옵션 사용)에서 작동합니다.-E

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

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

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

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

명령에서 sudo옵션 대신 현재를 사용하는 이유는 무엇입니까?PATHenv-E

명령 대신 옵션을 통해 sudo나머지 환경을 사용하는 이유는 무엇입니까?-Eenv

이것도 PATH환경의 일부인가요?

PATH다른 환경과 비교해서 특별한 점은 무엇인가요?

감사해요.


~에서sudo 맨페이지

sudo는 외부 명령을 실행할 때 보안을 보장하려고 시도합니다. 명령 스푸핑을 방지하기 위해 sudo는 "."를 확인합니다. 사용자의 PATH에서 명령을 검색할 때(둘 중 하나 또는 둘 다 PATH에 있는 경우) 마지막 명령은 ""입니다(둘 다 현재 디렉터리를 나타냄). 하지만 참고하세요.실제 PATH 환경 변수는 수정되지 않으며 sudo가 실행하는 프로그램에 변경되지 않은 채 전달됩니다.

이는 "실제 PATH 환경 변수는 수정되지 않지만 sudo가 실행하는 프로그램에 변경되지 않은 상태로 전달되고" 사용자 변수가 PATH실행된 명령에 그대로 전달된다는 의미입니까?sudo

답변1

활성화된 경우 env_reset(기본값) sudo환경을 지우고 특히 자체 환경을 제공합니다 PATH(참고 secure_path자료 참조 /etc/sudoers). env_reset비활성화된 경우에도 여전히 적용되며 env_check지워질 수 있습니다. 출력을 비교하면 이를 알 수 있습니다.env_deletePATH

echo $PATH

그리고

sudo printenv PATH

사용자 정의 항목이 있는 경우 PATH출력에 표시되지 않습니다 sudo printenv.

env팁은 환경 정리에 관한 것입니다.

sudo env "PATH=$PATH" command

sudo실행 하라는 요청을 받고 현재 를 포함하도록 셸에서 확장 env "PATH=$PATH" command하고 루트로 실행하면 해당 값이 해당 환경에 저장 되고 해당 환경에서 실행됩니다.$PATHPATHenvPATHcommand

따라서 구성에 따라 의 PATH컨텍스트를 제외하고 특별한 것은 없습니다 . 적절한 구성을 사용하면 모든 변수를 sudo동일한 방식으로 "특수" sudo또는 PATH"비특수" 로 만들 수 있습니다. 보다sudo그리고sudoers자세한 내용은 맨페이지를 참조하세요.

관련 정보