/usr/bin/vim 및 /bin/vim

/usr/bin/vim 및 /bin/vim

알겠어요바이너리는 다른 위치에 있을 수 있습니다.. 내가 이해하지 못하는 것은 왜 그것을 실행할 때 at 이라고 표시되지만 whereis, 그걸로 실행하려고 하면 I can't run it이라고 표시된다는 것입니다 .whichtypevim/usr/bin/vimsudo/bin/vim

링크가 아니며 내용도 동일합니다. 하지만sudo나는 처형할 권리가 있다/usr/bin/vim, 이는 호출되지 않습니다.왜인지 모르겠습니다!

[user@host conf.d]$ sudo vim test.conf
[sudo] password for user: 
Sorry, user user is not allowed to execute '/bin/vim test.conf' as root on host.domain.com.br.
[user@host conf.d]$ whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
[user@host conf.d]$ which vim
/usr/bin/vim
[user@host conf.d]$ type vim
vim is /usr/bin/vim
[user@host conf.d]$ ll /bin/vi*
-rwxr-xr-x. 1 root root  910040 Jun 10 03:56 /bin/vi
lrwxrwxrwx. 1 root root       2 Set 30 11:38 /bin/view -> vi
-rwxr-xr-x. 1 root root 2289656 Jun 10 03:56 /bin/vim
lrwxrwxrwx. 1 root root       3 Set 30 12:14 /bin/vimdiff -> vim
-rwxr-xr-x. 1 root root    2084 Jun 10 03:56 /bin/vimtutor
[user@host conf.d]$ ll /usr/bin/vi*
-rwxr-xr-x. 1 root root  910040 Jun 10 03:56 /usr/bin/vi
lrwxrwxrwx. 1 root root       2 Set 30 11:38 /usr/bin/view -> vi
-rwxr-xr-x. 1 root root 2289656 Jun 10 03:56 /usr/bin/vim
lrwxrwxrwx. 1 root root       3 Set 30 12:14 /usr/bin/vimdiff -> vim
-rwxr-xr-x. 1 root root    2084 Jun 10 03:56 /usr/bin/vimtutor
[user@host conf.d]$ md5sum /usr/bin/vim
e5a9c498add4fa49a39a720a826f954c  /usr/bin/vim
[user@host conf.d]$ md5sum /bin/vim
e5a9c498add4fa49a39a720a826f954c  /bin/vim
[user@host conf.d]$ 

답변1

검색 경로에 대한 몇 가지 기본 사항

예를 들어 슬래시 없이 명령을 실행하는 경우 vim쉘은 실행할 파일(또는 쉘 내장 명령/함수)을 알아야 합니다. 환경 변수에 정의된 검색 경로를 따라 이를 찾습니다 PATH. 이 PATH변수는 쉘이 각 경로에서 명령 이름을 찾는 순서대로 콜론으로 구분된 경로 목록입니다.

예를 들어 PATH기본 데비안 설치는 다음과 같습니다:

/usr/local/bin:/usr/bin:/bin

/usr/bin/vim이 경우 및 의 출력에 표시된 대로 먼저 찾습니다 .which vimtype vim

sudoenv_reset이제 및 options 를 지정하여 명령을 실행 하면 검색 경로가 secure_path전달한 명령을 실행하기 전의 sudo내용으로 재설정됩니다 . secure_path이는 실행한 명령에 sudo다음이 있을 수 있음을 의미합니다.다른검색 경로 및 다양한 실행 파일은 명령을 직접 실행하여 찾을 수 있습니다.

예를 들어 sudo PATHDebian의 기본 내용은 다음과 같습니다.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

당신의 시나리오

여기서 일어나는 일은 secure_path이전의 순서를 지정하거나 후자가 단순히 존재하지 않는다는 것입니다. 이 경우 쉘은 존재하기 때문에 이를 찾아서 결국 발견하게 됩니다. 그리고 화이트리스트에만 있는 경우 전자는 실행이 허용되지 않을 수 있습니다./bin/usr/binvim/bin/vim/usr/bin/vim

PATH를 사용하여 현재 상태를 확인할 수 있습니다 echo $PATH. 를 사용하여 확인할 수 있습니다 sudo. 관리자가 허용 전용 화이트리스트를 설정한 경우 들어가서 명령을 실행할 수 있습니다.PATHsudo env | grep PATHvimsudo vim:echo $PATH

절대 경로(예: )를 지정하여 문제를 해결할 수 있습니다 sudo /usr/bin/vim.


secure_path존재합니까?

에 관해서는 sudo다른 경로를 설정하고 다음 공격 시나리오를 고려하십시오.

귀하의 것은 PATH단지 환경 ​​변수입니다. 이는 다양한 방법으로 설정될 수 있으며 사용자에게 표시되지 않을 수도 있습니다. 누구나 쓸 수 있도록 허용하는 보안되지 않은 디렉토리가 있을 수 있습니다. 누군가가 이와 같은 악성 실행 파일을 생성한 경우 ls이를 실행하면 ls실제 ls.

그러나 피해는 귀하의 계정이 액세스할 수 있는 콘텐츠로 제한됩니다. 이제 실행한다고 가정합니다 . 재설정하는 대신 현재에서 가져오는 sudo ls경우 루트 권한으로 악성 실행 파일을 실행한 것입니다(권한 상승 공격). 자신의 사용자로 실행하는 것보다 훨씬 더 많은 피해를 입힐 수 있습니다.PATHPATH

PATH이제 파일을 파일에 삽입 하거나 파일을 수정할 수 있는 공격자가 PATH이미 많은 피해를 입힐 수 있다고 주장할 수 있습니다. 당신 말이 맞을 수도 있습니다. 의 사용에 대해서는 양쪽 모두 의견이 다르 secure_path므로 여기서는 자세히 설명하지 않겠습니다.

관련 정보