Вы можете запустить не ту программу. Кто-то может заставить вас запустить их программу.
-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запускается как Алиса.