명령을 왜 sudo 할 수 없습니까? (예 : vim)


16

내가 좋아하는 몇 가지 명령을 실행하려고하면 나는에 CentOS-6.3를 실행, 내 친구 서버에 sudo를 액세스 권한이 있지만, sudo vim /var/www/html/index.html나는 오류 얻을 sudo: vim: command not found내가 할 수를하지만, 실행 sudo su한 후 vim /var/www/html/index.html예상대로 작동합니다.

echo $PATH그리고 sudo echo $PATH둘 다 수확량 :

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vim 그러나 수율 :

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

나는 추가를 시도했다

export PATH=$PATH:/usr/local/bin

받는 /root/.bashrc사용할 때 어떤으로 문제를 해결 sudo su하지만 단지 sudo <command>.

일하려면 어떻게해야 sudo <command>합니까?


Centos OS의 sudoers에 해당 사용자를 이미 추가 했습니까?
AAlvz

답변:


18

를 실행할 때 sudo많은 시스템이 화이트리스트에없는 모든 값의 환경을 지우고 PATH 변수를 삭제 된 값으로 재설정하도록 구성되어 있습니다.

에서 Defaults env_reset와 같이 몇 개 Defaults env_keep += "SOME_VARIABLE_NAME"를 찾을 수 있습니다 /etc/sudoers. 후자의 "보안" PATH대체는 다음과 같이 지정됩니다. Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin–이 행을 삭제하여 sudoing시이 동작을 제거하십시오 .


어떤 환경 변수하면 실행할 때 인쇄를 처리하는 방법  sudo -V으로 root.


이러한 기본값을 제거하지 않으려면 항상 전체 경로 ( sudo /usr/local/bin/vim)를 사용하여 프로그램을 지정할 수 있습니다 .

또는 다음 SETENV과 같이 sudoers파일에 계정을 허용 할 수 있습니다 .

%wheel  ALL=(ALL)       SETENV: ALL

이를 통해 다음과 같은 환경 기본값을 재정의 할 수 있습니다.. sudo PATH=$PATH which vim명령을 실행하기 전에 셸에서 변수를 해석하여 상속 된 결과를 PATH포함 /sbin합니다.


감사. 소유자가 sudoers 파일을 수정하도록 할 때까지 Dennis의 해결 방법을 사용합니다.
JaredMcAteer

6
sudo echo $PATH

당신이 생각하는 것을하지 않습니다. 명령을 실행 하기 전에$PATH (사용자의) 쉘로 대체됩니다 .

원하는 동작을 수행하려면을 사용할 수 있습니다 sudo -i.

에서 남자는 sudo :

-나는 명령한다]

-i ( 시뮬레이션 초기 로그인 ) 옵션에 지정된 쉘 실행 passwd에 로그인 쉘과 같은 대상 사용자의 (5) 항목을. 이는 쉘에서 .profile또는 이와 같은 로그인 특정 자원 파일을 .login읽음을 의미합니다. 명령이 지정되면 실행을 위해 셸로 전달됩니다.


1
이것은 소유자가 sudoers 파일을 조정하도록 할 때까지 적절한 해결 방법입니다.
JaredMcAteer

1

일하려면 어떻게해야 sudo <command>합니까?

경로 관련 문제를 해결할 때까지 전체 경로 이름을 사용하십시오.

  sudo /usr/local/bin/vim /var/www/html/index.html

5
난 당신을 downvote 않을거야,하지만 난 그냥 작업 결코 좋아 해요 주변의 문제보다는를 파악하고이를 고정 점에 권리를 얻는.
니콜 해밀턴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.