sudo를 사용하려고 하는데 루트의 PATH가 kerblooey로 변경되면 어떻게 합니까?

sudo를 사용하려고 하는데 루트의 PATH가 kerblooey로 변경되면 어떻게 합니까?

방금 이 기계에 뭔가 나쁜 일이 일어난 것 같은 느낌이 듭니다.

faheem@bulldog:/usr/local/src/mercurial$ sudo dpkg -i 
mercurial_3.0-1_amd64.deb mercurial-common_3.0-1_all.deb    
dpkg: warning: 'ldconfig' not found in PATH or not executable 
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable 
dpkg: error: 2 expected programs not found in PATH or not executable 
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin
and /sbin

이것은 유지 관리되지 않은 오래된 기계이며 한동안 사용했습니다. 언젠가는 죽을 것이라고 가정하십시오. 오늘이 바로 그날이 될 것 같습니다. 조금 일찍 오류가 발생하기 시작했고 누군가가 방금 다시 시작한 것처럼 보였습니다.

업데이트: 실행 후

sudo -s

경로 값을 확인했습니다.

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games

sbin예를 들어 , 및 와 같은 내용이 여기에 누락되었습니다 /usr/sbin.

업데이트 2:

한 명 이상의 알려지지 않은 사람이 다음 줄을 삭제한 것으로 나타났습니다 /etc/sudoers.

Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

설명해 주신 Anthony에게 감사드립니다.

답변1

출력 하단의 "참고:"에서 sudo dpkg -i알 수 있듯이 이는 일반적으로 $PATH잘못된 설정으로 인해 발생합니다. 이런 일이 발생할 수 있는 한 가지 방법은 dpkg -i루트 없이 실행하는 경우이지만 여기서는 그렇지 않습니다.

경로를 확인하는 쉬운 방법은 run 을 실행하는 것입니다 sudo -s. 이는 sudo에게 다른 프로그램 대신 쉘을 실행하도록 지시합니다. 따라서 루트 쉘 프롬프트로 들어가게 됩니다. 이렇게 하면 찾 거나 잃을 echo "$PATH"수 있습니다 ./sbin/usr/sbin

sudo의 기본 동작은 사용자 $PATH변수를 그대로 두는 것입니다. 이 기본값은 일반적으로 /etc/sudoers다음을 포함하는 Debian의 default 에 의해 변경됩니다 .

Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

이 줄을 놓친 경우 secure_path문제가 설명됩니다.

두 가지 옵션은 라인을 다시 추가하거나(예를 들어 추가 요소가 포함되어 있기 때문에 사용자 경로를 유지하기 위해 누군가가 이를 제거했을 수 있음 ) 사용자의 에 /opt추가하는 것입니다 ./sbin:/usr/sbin$PATH

관련 정보