sudo가 명령을 찾지 못해 명령을 실행하는 이유는 무엇입니까?


12

샘플 명령 :

drush cc all

작동하지만 이것은 :

sudo drush cc all

나에게 준다 :

sudo: drush: command not found

왜? 이 문제를 해결하는 방법?


나는 또한 다음과 같은 기본 명령 으로이 문제를 겪었습니다 cd. 사용 dzdo cd복귀 "명령을 찾을 수 없습니다." 물론 나중에 깨달았 cd나도에 루트 쉘 또는 필요 필요하므로, 디렉토리에 보내고 것은 내가 아주 많이하지 않습니다 도움말 권한이없는 것을 dzdo ls, dzdo mv등 외부에서 내용 디렉토리가 있습니다.
와일드 카드

2
의 문제 sudo cdIS cd내장 명령이 아닌 프로그램입니다. 당신이있는 디렉토리로 이동하려는 경우 당신이 (예를 들어)에 대한 액세스 권한하지 않으며이 파일의 이름을 변경하면 (예를 들어) 할 수있는 sudo mv dir/oldfile dir/newfile sudo sh -c "cd dir; mv oldfile newfile" .
G-Man, 'Reinstate

답변:


13

당신 sudo은 미리 설정 $PATH되어 있는데, 루트 사용자의 기본 경로 와 같은 것 입니다. 프로그램이로 식별 된 디렉토리 목록에 없습니다 $PATH.

예를 들어보십시오

sudo 는 외부 명령을 실행할 때 안전하려고합니다.

환경 변수를 처리하는 두 가지 방법이 있습니다. env_reset sudoers 옵션은 기본적으로 사용됩니다. 이 원인 명령을 포함하는 최소한의 환경을 실행하는 TERM, PATH, HOME, SHELL, LOGNAME, USERUSERNAME호출 프로세스에서 변수 외에 허용 env_checkenv_keep 의 sudoers 옵션. 환경 변수에 대한 화이트리스트가 효과적으로 있습니다.

sudo를 유지 하도록 구성 할 수없는 경우 $PATH일반적인 해결 방법은 프로그램의 전체 경로 이름을 지정하는 것입니다. (액세스되지 않은) 디렉토리의 다른 실행 파일을 호출하는 스크립트에서는 제대로 작동하지 않을 수 있습니다.


0

전체 경로를 지정해야합니다. 또한 더 안전합니다. 경로를 지정하지 않으면 공격자가 루트 권한으로 실행될 다른 프로그램을 만들 수 있습니다.

또한 /etc/sudoers허용하려면 줄을 넣어야 합니다. man sudoers구문의 경우 여기에 넣기가 너무 많습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.