Вы можете запустить не ту программу. Кто-то может заставить вас запустить их программу.
-execdir
Действие запускает вашу команду из каталога , который содержит файл (ы). Когда $PATH
содержит относительные пути, такие как .
или что-либо, с чего не начинается/
, -execdir
небезопасно, потому что каталог, в котором находится файл (или другой каталог, разрешенный относительно него), также может содержать исполняемый файл с тем же именем, что и тот, который вы пытаетесь бежать. Этот потенциально ненадежный исполняемый файл затем будет запущен.
Это может быть намеренно использовано другим пользователем, чтобы заставить вас запустить его программу, которая может нанести вред или нарушить безопасность данных, вместо программы, которую вы пытаетесь запустить. Или, реже, это может привести к непреднамеренному запуску неправильной программы, даже если никто не попытается решить проблему.
Если все в вашей PATH
переменной окружения это абсолютный путь, эта ошибка не должна возникать, даже если каталог , который вы ищете , и -execdir
ИНГ от это содержится в PATH
. (Я проверил, что это работает.) Если вы считаете, что у вас нет относительных каталогов, $PATH
но вы все еще получаете эту ошибку, пожалуйста, обновите ваш вопрос с подробностями, включая вывод echo "$PATH"
.
Конкретный пример.
В качестве примера того, что может пойти не так, предположим:
- У Алисы есть
.
она, $PATH
потому что она хочет иметь возможность запускать программы в любом каталоге, к которому она хочет cd
, не удосуживаясь добавить их имена ./
.
- Ева в ярости Ева поделилась
/home/eve/shared
с Алисой.
- Алиса хочет получить статистику (строки, слова, байты) в
.c
файлах, которыми Ева поделилась с ней.
Итак, Алиса бежит:
find ~eve/shared -name \*.c -execdir wc {} \;
К сожалению для Алисы, Ева создала свой собственный сценарий, назвал его wc
, установил его executeable ( chmod +x
) и тайно поместил в один из каталогов /home/eve/shared
. Сценарий Евы выглядит так:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Поэтому, когда Алиса использует find
с -execdir
для запуска wc
файлов, которыми поделилась Ева, и попадает в файлы в том же каталоге, что и пользовательский wc
сценарий Евы, Ева wc
запускается - со всеми привилегиями Алисы!
(Будучи хитрой, Ева заставила свой wc
сценарий действовать как обертка для системы wc
, поэтому Алиса даже не узнает, что что-то пошло не так, т. Е. Что это do_evil
было выполнено. Однако возможны более простые - и более сложные - варианты. )
Как find
это мешает.
find
предотвращает возникновение этой проблемы с безопасностью , отказываясь выполнять -execdir
действие, если он $PATH
содержит относительный каталог.
find
предлагает два диагностических сообщения в зависимости от конкретной ситуации.
Если .
он включен $PATH
, то (как вы видели) он говорит:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
Это, вероятно, имеет специальное сообщение для .
случая, поскольку это особенно распространено.
Если относительный путь, кроме .
--say, foo
--appears в $PATH
и вы бежите find
с -execdir
, он говорит:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
Лучше вообще не иметь относительных путей $PATH
.
Риск наличия .
или других относительных путей $PATH
особенно повышается при использовании утилиты, которая автоматически меняет каталог, поэтому find
не позволяет использовать ее -execdir
в этой ситуации.
Но наличие относительных путей, особенно .
в вашем, по своей $PATH
сути рискованно и действительно лучше избегать в любом случае. Рассмотрим вымышленную ситуацию в примере выше. Предположим , что вместо того, чтобы бежать find
, Алиса просто cd
с до ~eve/shared/blah
и работает wc *.c
. Если blah
содержит wc
сценарий Евы , do_evil
запускается как Алиса.