Which

Материал из Wiki Open book
Перейти к: навигация, поиск

Оглавление

Программа осуществляет поиск файлов в директориях, описанных в переменной среды окружения PATH. Проще говоря, производит поиск исполняемых файлов.

which [параметры] файл ...

Например, необходимо узнать в какой директории находится программа su, можно воспользоваться программой which:

$ which su
/bin/su
$
Внимание! В SuSE Linux which -- это псевдоним: alias which='type -p'. Поэтому, если вы хоте, что бы ваша программа работала как положено, либо удалите псевдоним (в файле /etc/bash.bashrc.local добавьте строку unalias which), либо для вызова программы используйте полный путь: /usr/bin/which.

Программа выводит на экран первый найденный файл. Если вы хотите, что бы она искала все файлы, используйте параметр –a. Например, в Slackware Linux будет обнаружено две программы ls:

$ which -a ls
/usr/bin/ls
/bin/ls
$

Очень странно. Представьте себе, что противный редиска хакер каким то чудом смог поставить в вашу систему троян. В первую очередь всех интересуют пароли. Для сбора информации о паролях хакер поставит свою версию программы passwd. Но если он просто заменит старую программу на новую, вы это быстро обнаружите, например, при помощи программы tripware. Поэтому хакер поступит умнее, он не тронет вашу версию программы, он поставит свою версию в директорию, которая в переменной PATH будет описана раньше, чем директория, в которой находится программа passwd. Ниже показано значение по умолчанию переменной PATH в SuSE Linux.

$ echo $PATH
/home/artur/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin
$

Посмотрим, где располагается файл программы passwd:

$ /usr/bin/which passwd
/usr/bin/passwd
$

А теперь глянем на порядок поиска. Я попросил which найти не установленную в системе программу pppd. Which рассказала в каких директориях и в каком порядке она производила поиск файла.

$ /usr/bin/which pppd
/usr/bin/which: no pppd in
(/home/artur/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin)
$
Внимание! В вашем дистрибутиве содержимое переменной PATH может быть другим.

Точно в тех же директориях и в таком же порядке производит поиск программы оболочка, когда вы запускаете программу на выполнение, не указав путь к файлу программы. Оболочка запустит на выполнение первый найденный файл. Судя по содержимому переменной PATH, хакеру достаточно поместить свою версию программы passwd в директорию /usr/local/bin. Он не изменял файл /usr/bin/passwd, значит, программы следящие за целостностью файлов ничего не обнаружат. Но поскольку /usr/local/bin в переменной PATH описана раньше, чем /usr/bin, всегда будет запускаться версия программы установленной хакером.

Поэтому, обнаружив две программы ls, следует обязательно поинтересоваться, а почему их две?

$ ls -l /usr/bin/ls
lrwxrwxrwx  1 root root 12 2005-08-13 19:37 /usr/bin/ls -> ../../bin/ls*
$

В нашем случае ничего страшного нет, это просто символьная ссылка на программу ls.

Источник — «http://wiki.kryukov.biz/wiki/Which»
Инструменты
    
Личные инструменты