sudo 모드에서 명령을 실행하면 "명령을 찾을 수 없음"이 반환되는 이유는 무엇입니까?

sudo 모드에서 명령을 실행하면 "명령을 찾을 수 없음"이 반환되는 이유는 무엇입니까?

명령 예:

drush cc all

작동하지만 이것은 다음과 같습니다.

sudo drush cc all

나에게주세요:

sudo: drush: command not found

왜? 이 문제를 어떻게 해결하나요?

답변1

이렇게 하면 다음과 유사하게 sudo미리 구성된 것을 얻게 됩니다 .$PATH뿌리사용자의 기본 경로입니다. 귀하의 프로그램이 로 식별된 디렉토리 목록에 없습니다 $PATH.

예시 보기

스도외부 명령을 실행할 때는 최대한 안전하도록 노력하세요.

환경 변수를 처리하는 방법에는 두 가지가 있습니다. 기본적으로,env_reset Sudoers 옵션이 활성화되었습니다. 이로 인해 다음을 포함하는 최소 환경에서 명령이 실행됩니다.TERM, PATH,HOME,SHELL,LOGNAME,USER그리고USERNAMEenv_check호출 프로시저에 추가 및 허용되는 변수env_keep Sudoers옵션. 실제로 환경 변수에 대한 화이트리스트가 있습니다.

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

답변2

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

/etc/sudoers또한 이를 허용하려면 한 줄을 삽입해야 합니다 . man sudoers문법을 위해 여기에 넣을 내용이 너무 많습니다.

관련 정보