Чи безпечно додати. до моєї ПАТИ? Як це?


49

Я бачив, як люди згадують в інших відповідях, що погана ідея включати поточну робочу директорію (' .') у $PATHзмінну вашого середовища, але не змогла знайти питання, яке стосується конкретної проблеми.

Отже, чому я не повинен додати .свій шлях? І якщо я, незважаючи на всі попередження, все одно роблю це, на що я повинен стежити? Чи безпечніше додати його до кінця, ніж до початку?


Відповіді:


39

Якщо ви єдиний користувач на машині, це добре, поки ви знаєте, що робите. Загальна проблема полягає в тому, що, маючи поточний каталог PATH, ви не можете бачити команди як постійний список. Якщо вам потрібно запустити скрипт / програму з вашого поточного каталогу, ви завжди можете явно запустити його, попередньо додавши ./його ім'я (ви скажете системі "Я хочу запустити цей файл з мого поточного каталогу").

Скажіть, тепер у вас є всі ці маленькі сценарії по всій вашій файловій системі; одного дня ти точно запустиш неправильний. Отже, наявність вашого PATHзаздалегідь визначеного списку статичних шляхів - це все про порядок і порятунок себе від потенційної проблеми.

Однак якщо ви збираєтесь додати .до свого PATH, пропоную додати його до кінця списку ( export PATH=$PATH:.). Принаймні, таким чином ви не перекриватимете двійкові файли на загальній системі.

Якщо ви корінь на систему і мають системи піддаються рахунки інших користувачів, що мають .в PATHвеличезний ризик безпеки: ви можете cdв каталог якого - небудь користувача, і ненавмисно запустити шкідливий сценарій там тільки тому , що ви набраний річ або сценарій, має таку ж назву, що і двійковий код, що має загальну систему.


1
+ Прийміть основні теорії та зазначте, що проблеми все ще можуть існувати, навіть коли ви єдиний користувач у системі. Обидві відповіді приносять чудові бали. Я додам, що щоразу, коли ви ділитеся каталогами з іншим користувачем, підвищується ризик, незалежно від того, користуєтесь ви чи ні.
Джандер

6
навіть як єдиний користувач на машині: кожного разу, коли ви витягуєте недовірений дьоготь, він може розміщувати його lsу вашому поточному каталозі. далі ви запустите lsоглянути витягнуті файли, і ви вже запустили шкідливий код.
lesmana

35

Ризик полягає в тому, що хтось помістить в каталог шкідливий виконуваний файл, який, як і раніше, є поточним.

Найгірший випадок трапляється, коли:

  • ви зареєстровані як root, оскільки зловмисна команда має необмежену здатність пошкодження
  • .знаходиться на початку вашого PATH, оскільки стандартні команди можуть бути замінені, не помічаючи цього (як правило, це lsможе приховати себе зі списку).

Ризик набагато нижчий, якщо ви зареєстровані як звичайний користувач і маєте .в кінці свого PATH, але він все ще існує:

  • хтось може дізнатись, що ви часто вводите команду та вказуєте відповідну команду
  • хтось може встановити підроблену команду з іменем тієї, яка не встановлена.

Зауважте, що в будь-якому випадку ризик все ще існує, навіть якщо ви єдиний користувач машини. Зловмисне програмне забезпечення буде встановлене, якщо, наприклад, ви отримаєте архів, завантажений з компрометованого сайту.


15
Встановіть, slщоб побачити, як часто трапляється точка 3.
Йорданм

або alias l=`ls`.
Анко

це не повинно бути шкідливим. Я очікую, що я lsотримаю список каталогу, але якийсь проект, який я завантажую, може мати lsсценарій у своїй папці кореневих проектів як ярлик до чогось іншого. lsце, мабуть, поганий приклад, але я, безумовно, можу уявити eдля редагування, dдля налагодження, mдля make, bдля збирання. У мене є деякі з них у всьому світі. Якщо я набираю, mя очікую запуск (мій ярлик), а не якийсь локальний скрипт, викликаний mдля виконання.
gman

@gman Правильно. Нешкідлива команда може мимоволі справді мати несприятливі наслідки. Зауважте, що команди з одного письма команди / псевдоніми були нахмурені з моменту створення Unix через високий ризик помилки. Рідкісні стандартні є wі [.
jlliagre

3

Навіть якщо ви завжди дуже обережні з тим, що ви вводите, додавання .до свого PATH, навіть в кінці, все ще незахищене, оскільки деякі програми змінюють поточний каталог на /tmp(що є в світі записом), а також можуть спробувати виконати утиліти, які фактично не встановлені, тим самим дефолт до того, що є /tmp. Якщо це відбувається, це вектор атаки.

Слід також зазначити , що існує не так багато недоліків уникнути .в PATH, так ./легко друкувати (зокрема , на клавішних , як QWERTY, де ці символи знаходяться на послідовних ключів і не потрібно Shift) і використання ./також сприятиме завершенню, тим самим потенційно економити натискання клавіш в кінці.

Якщо ви дійсно хочете мати можливість вводити команди з поточного каталогу, то сучасні оболонки (як-от zsh, з його command_not_found_handler) можуть надавати функції, щоб зробити це безпечно, тобто дозволяючи додати всі перевірки безпеки, які ви хочете в обробнику, перед команда виконується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.