Ви можете запустити неправильну програму. Хтось може змусити вас запустити їх програму.
-execdirДія запускає вашу команду з каталогу , який містить файл (и). Коли $PATHмістяться відносні шляхи, наприклад, .або що-небудь, що не починається з цього/ , не -execdirє безпечним, оскільки каталог, у якому знайдений файл (або інший каталог, вирішений відносно нього), також може містити виконуваний файл з тим самим іменем, що і той, який ви намагаєтеся бігти. То потенційно ненадійний виконуваний файл замість цього запуститься.
Це може бути навмисно використане іншим користувачем, щоб змусити вас запускати їх програму, що може спричинити шкоду або порушити безпеку даних замість програми, яку ви намагаєтеся запустити. Або, рідше, це може просто призвести до того, що неправильна програма буде ненавмисно запущена, навіть без того, щоб хтось намагався зробити цю проблему.
Якщо все в вашій PATHзмінній середовища це абсолютний шлях, ця помилка не повинна виникати, навіть якщо каталог , який ви шукаєте , і -execdirІНГ від це міститься в PATH. (Я перевірив, що це працює.) Якщо ви вважаєте, що у вас немає жодних відносних каталогів, $PATHале ви все ще отримуєте цю помилку, будь ласка, оновіть своє запитання деталями, включаючи вихідні дані echo "$PATH".
Конкретний приклад.
Прикладіть, наприклад, що може піти не так:
- Аліса має
.в своєму розпорядженні, $PATHтому що вона хоче мати змогу запускати програми в будь-якому каталозі, в якому вона була cdб, не намагаючись привласнити свої імена ./.
- Вільшанка Аліса Єва поділилася
/home/eve/sharedз Алісою.
- Аліса хоче статистика (рядки, слова, байти) щодо
.cфайлів, якими Єва поділилася з нею.
Отже, Аліса працює:
find ~eve/shared -name \*.c -execdir wc {} \;
На жаль для Аліси, Єва створила свій власний сценарій, назвала його wc, встановила його виконуваним ( 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)
Напевно, є спеціальне повідомлення для .справи, оскільки це особливо часто.
Якщо відносний шлях, відмінний від - .скажіть, - fooз'являється $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працює як Аліса.