sudo가 $PATH를 보존하도록 만드는 방법은 무엇입니까?

sudo가 $PATH를 보존하도록 만드는 방법은 무엇입니까?

/opt 아래의 사용자 정의 디렉토리에 프로그램이 설치되어 있습니다. 더 쉽게 실행할 수 있도록 bashrc를 편집하여 해당 디렉터리를 내 경로에 추가했습니다.

export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin

sudo 없이 프로그램을 실행하고 싶다면 이 방법이 아주 효과적입니다. 그러나 sudo를 사용하여 실행하려고 하면 "명령을 찾을 수 없음" 오류와 함께 실패합니다.

$ sudo godi_console
sudo: godi_console: command not found

sudo를 사용한 후 PATH 변수를 확인하면 일반 사용자와 동일한 PATH가 포함되어 있지 않음을 알 수 있습니다.

$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

경로가 왜 다른가요? 내가 뭐 잘못 했어요? 차이점이 있다면 Debian Jessie를 사용하고 있습니다.

내가 시도한 것 중 하나는 /opt/godi/sbin/godi_console을 직접 호출하여 실행 파일의 절대 경로를 전달하는 것이었습니다. 안타깝게도 godi_console 자체가 올바르게 설정된 PATH에 의존하기 때문에 이 특별한 경우에는 도움이 되지 않습니다.

답변1

언제든지 다음과 같이 할 수 있습니다.

sudo env "PATH=$PATH" godi_console

Debian의 보안 조치로 /etc/sudoerssecure_path옵션은 안전한 값으로 설정됩니다.

알아채다:

sudo "PATH=$PATH" godi_console

sudo문자 자체를 포함하는 선행 인수를 환경 변수 할당으로 처리하며 실행 에도 =적용할 수 있습니다.godi_console당신의 $PATH( 와 반대 secure_path)은 해당 환경에 있지만 실행 파일의 검색 경로에 영향을 주지 않으므로 파일을 찾는 데 sudo도움이 되지 않습니다 .sudogodi_console

답변2

기본 경로를 다음으로 설정할 수도 있습니다./etc/sudoers

편집 파일 사용visudo

해당 줄을 원하는 대로 업데이트하세요. Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

답변3

SUDO는 기본적으로 환경 변수를 재설정합니다.

설명서와 env_reset이라는 옵션을 확인하세요.

/etc/sudoers에서 간단히 비활성화할 수 있습니다.

답변4

sudo --preserve-env=PATH env [command]

이는 내 측의 secure_path를 재정의합니다.

관련 정보