sudo 명령의 경로를 설정하는 방법 found. 흥미 롭습니다. 전에 이것을 경험하지 마십시오.

내가 발행하면

sudo my-command

리눅스는 어떻게 그것을 찾 my-command습니까?

my-command내 PATH에 있습니다. 아무 문제없이 호출 할 수 있습니다. 그러나로 호출하면을 sudo얻습니다 command not found. 흥미 롭습니다. 전에 이것을 경험하지 마십시오. 극복하는 방법?

편집 :“사용 가능한 복제” 의 선택 대답은 적어도하지 않는 점에, 잘, 잘못된 것입니다. terdon의이 답변은 정답입니다.



답변

이것은 일반적으로의 secure_path옵션 으로 설정됩니다 /etc/sudoers. 보낸 사람 man sudoers:

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

기본값이 아닌 명령을 실행하려면 다음 $PATH중 하나를 수행하십시오.

  1. 전체 경로를 사용하십시오. sudo ~/bin/my-command; 또는

  2. 명령이 포함 된 디렉토리를에 추가하십시오 secure_path. sudo visudo보안 경로 행을 실행 하고 편집하십시오.

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    파일을 저장하고 다음에 실행할 sudo때 디렉토리 ~/bin는 그 디렉토리에 있게됩니다 $PATH.


답변

이것이 내가 해결 방법으로 사용한 것입니다.

sudo cp $(which my-command) /usr/bin
...

which명령은 루트가 아닌 서브 쉘에서 실행되므로 my-commandsudo는 실행 파일을 찾은 다음 root사용자가 액세스 할 수 있는 경로로 실행 파일을 복사합니다 . 보안에 좋지는 않지만 명령을 실행 한 직후 파괴 된 도커 이미지를 실행하는 것이 좋습니다.