`sudo`를 $ PATH로 유지하는 방법?


123

/ opt / godi / sbin (사용자 정의 디렉토리)에 설치된 프로그램을 실행해야합니다. 해당 디렉토리를 PATH에 추가하면 .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

PATH가 다른 이유는 무엇입니까? 내가 뭔가 잘못하고 있습니까? 나는 데비안 Jessie를 사용하고 있지만 불행히도 sudi 절대 링크를 godi_console에 전달하여 문제를 해결할 수 없습니다. godi_console 자체도 올바르게 설정된 PATH에 의존하기 때문입니다.


2
시도하십시오 sudo -E godi_console. -E"환경 보존"을 의미합니다.
D_Bye

5
@D_Bye, 데비안과 같은 secure_path많은 sudo배포에서와 같이 en / enset 이 설정되어 있으면 작동하지 않습니다 .
Stéphane Chazelas

@StephaneChazelas 정보 주셔서 감사합니다-데비안을 사용하지 않으므로 조용히했을 것입니다!
D_Bye


sunot 에 관한 관련 질문 sudounix.stackexchange.com/questions/460478 입니다.
JdeBP

답변:


149

당신은 항상 할 수 있습니다 :

sudo env "PATH=$PATH" godi_console

데비안에 대한 보안 조치로서, /etc/sudoerssecure_path안전한 값으로 설정 옵션을 선택합니다.

참고 :

sudo "PATH=$PATH" godi_console

어디에서 sudo취급이 포함 된 인수 선도 =자체가 환경 변수 할당과 같은 문자를, 또한 실행에서 일하는 것이 godi_console당신의 $PATH 합니다 (반대 secure_path의 환경에서)하지만, 영향을 미치지 않을 것 sudo'의 실행 파일의 검색 경로를, 그래서 도움이되지 것입니다 sudo것을 찾는 godi_console.


5
전 세계적으로 설정을 변경할 필요가 없기 때문에이 답변이 가장 좋습니다 (예 : 최소 권한의 원칙 유지)
Alois Mahdal

5
sudo "PATH=$PATH" godi_console 그건 그렇고 CentOs7에서 작동하지 않았습니다. env 필요
Hakan Baba

1
@ StéphaneChazelas sudo "PATH=$PATH" godi_console실제로 작동합니까? sudo받아들이 VAR=value는 실행되는 명령의 환경에 영향을 미치는 인자를하지만, 달리 env거나 bash, sudo이 방법에 영향을하자하지 않는 것 명령을 찾습니다. 우분투 16.04에서만 (최근에) 이것을 테스트했습니다. 그러나 exempt_group옵션을 추가하려고 시도했지만 sudoers(테스트 용으로는 솔루션으로 간주하지 않습니다!) 결과가 밝아졌습니다. 양식의 명령이 PATH="$PATH" sudo some-command작동하기 시작했지만 양식의 명령은 sudo PATH="$PATH" some-command 여전히 작동 하지 않았습니다.
Eliah Kagan

2
@ballsatballsdotballs. 별명은 대화식 쉘에만 영향을 미치므로 상대적으로 무해합니다.
Stéphane Chazelas

2
이러한 유형의 경우 psudo라는 별명을 작성합니다. alias psudo = "sudo env \"PATH = $ PATH \ "". 그런 다음 정상적인 sudo 사용에는 영향을 미치지 않습니다.
mikeTronix

46

당신은 또한 기본 경로를 설정할 수 있습니다 /etc/sudoers

파일을 사용하여 편집 visudo

원하는대로 라인을 업데이트하십시오. Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin


18

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

env_reset이라는 매뉴얼과 옵션을 확인하십시오.

/ etc / sudoers에서 비활성화해야합니다.


5
시원한! 우분투에서는 secure_path와 env_reset 줄을보고 주석 처리 할 수 ​​있습니다. 시스템의 보안 수준이 상당히 낮아 지므로주의하십시오.
RawwrBag

비활성화 env_reset하면 sudow / r / t PATH의 동작 에 영향을 미치지 않는 것 같습니다 .
잔나

5

이것은 작동합니다 :

sudo $(which your_command)

gpsNvidia GPU의 프로세스를 나열하는 스크립트를 호출하는 예 :

$ sudo gps
sudo: gps: command not found
$ sudo $(which gps)
  PID TTY          TIME CMD
 9922 tty7     02:42:47 Xorg

설명 :

$ set -x;sudo $(which gps);set +x
++ which gps
+ sudo /home/xyztuv/myScripts/shl/gps
  PID TTY          TIME CMD
 9922 tty7     02:42:39 Xorg
+ set +x

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

이것은 내 끝에 secure_path를 ovverrides


1

이것은 효과가 있었다 :

sudo "PATH=$PATH" [your command]

경로 값으로 $ PATH를 변경하지 말고 다음과 같이 작성하십시오.

예: $ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....


0

OP가 요구하는 것을 정확하게하지는 않지만 도움이 될 수 있습니다.

sudo -u the_user PATH=$PATH:/opt/godi/bin sh -c 'echo $PATH'

이것은 sudoed 명령 내부 의 PATH를 변경합니다 .

편집 : 위의 내용이 거의 말이되지 않기 때문에 이것이 무엇을 의미하는지 잘 모르겠습니다. 대신 다음을 사용하십시오.

sudo -u the_user sh -c 'PATH=$PATH:/opt/godi/bin echo $PATH'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.