알겠어요바이너리는 다른 위치에 있을 수 있습니다.. 내가 이해하지 못하는 것은 왜 그것을 실행할 때 at 이라고 표시되지만 whereis
, 그걸로 실행하려고 하면 I can't run it이라고 표시된다는 것입니다 .which
type
vim
/usr/bin/vim
sudo
/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 vim
type vim
sudo
env_reset
이제 및 options 를 지정하여 명령을 실행 하면 검색 경로가 secure_path
전달한 명령을 실행하기 전의 sudo
내용으로 재설정됩니다 . secure_path
이는 실행한 명령에 sudo
다음이 있을 수 있음을 의미합니다.다른검색 경로 및 다양한 실행 파일은 명령을 직접 실행하여 찾을 수 있습니다.
예를 들어 sudo
PATH
Debian의 기본 내용은 다음과 같습니다.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
당신의 시나리오
여기서 일어나는 일은 secure_path
이전의 순서를 지정하거나 후자가 단순히 존재하지 않는다는 것입니다. 이 경우 쉘은 존재하기 때문에 이를 찾아서 결국 발견하게 됩니다. 그리고 화이트리스트에만 있는 경우 전자는 실행이 허용되지 않을 수 있습니다./bin
/usr/bin
vim
/bin/vim
/usr/bin/vim
PATH
를 사용하여 현재 상태를 확인할 수 있습니다 echo $PATH
. 를 사용하여 확인할 수 있습니다 sudo
. 관리자가 허용 전용 화이트리스트를 설정한 경우 들어가서 명령을 실행할 수 있습니다.PATH
sudo env | grep PATH
vim
sudo vim
:echo $PATH
절대 경로(예: )를 지정하여 문제를 해결할 수 있습니다 sudo /usr/bin/vim
.
왜 secure_path
존재합니까?
에 관해서는왜 sudo
다른 경로를 설정하고 다음 공격 시나리오를 고려하십시오.
귀하의 것은 PATH
단지 환경 변수입니다. 이는 다양한 방법으로 설정될 수 있으며 사용자에게 표시되지 않을 수도 있습니다. 누구나 쓸 수 있도록 허용하는 보안되지 않은 디렉토리가 있을 수 있습니다. 누군가가 이와 같은 악성 실행 파일을 생성한 경우 ls
이를 실행하면 ls
실제 ls
.
그러나 피해는 귀하의 계정이 액세스할 수 있는 콘텐츠로 제한됩니다. 이제 실행한다고 가정합니다 . 재설정하는 대신 현재에서 가져오는 sudo ls
경우 루트 권한으로 악성 실행 파일을 실행한 것입니다(권한 상승 공격). 자신의 사용자로 실행하는 것보다 훨씬 더 많은 피해를 입힐 수 있습니다.PATH
PATH
PATH
이제 파일을 파일에 삽입 하거나 파일을 수정할 수 있는 공격자가 PATH
이미 많은 피해를 입힐 수 있다고 주장할 수 있습니다. 당신 말이 맞을 수도 있습니다. 의 사용에 대해서는 양쪽 모두 의견이 다르 secure_path
므로 여기서는 자세히 설명하지 않겠습니다.