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

샘플 명령 :

drush cc all

작동하지만 이것은 :

sudo drush cc all

나에게 준다 :

sudo: drush: command not found

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



답변

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

예를 들어보십시오

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

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

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


답변

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

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


답변