Это безопасно добавлять. в мой путь? Как придешь?

49

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

Итак, почему я не должен добавить .к своему пути? И если, несмотря на все предупреждения, я все равно это делаю, на что мне нужно обращать внимание? Безопаснее ли добавить его в конец, чем в начало?

Jander
источник

Ответы:

39

Если вы единственный пользователь на машине, это нормально, если вы знаете, что делаете. Общая проблема заключается в том, что при наличии текущего каталога PATHвы не можете видеть команды в виде постоянного списка. Если вам нужно запустить скрипт / программу из вашего текущего каталога, вы всегда можете явно запустить его, добавив ./к его имени (вы говорите системе «Я хочу запустить этот файл из моего текущего каталога»).

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

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

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

Artyom
источник
1
+ Принять основную теорию и упомянуть, что проблемы все еще могут существовать, даже если вы единственный пользователь в системе. Оба ответа дают отличные оценки. Я добавлю, что каждый раз, когда вы делитесь каталогами с другим пользователем, возрастает риск, являетесь ли вы пользователем root или нет.
Jander
6
даже как единственный пользователь на машине: каждый раз, когда вы извлекаете ненадежный tar, он может поместить его lsв ваш текущий каталог. Затем вы запускаете, lsчтобы проверить извлеченные файлы, и вы уже запустили вредоносный код.
Лесмана
35

Риск заключается в том, что кто-то поместит вредоносный исполняемый файл в каталог, который окажется вашим текущим.

Худший случай случится, когда:

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

Риск намного ниже, если вы вошли в систему как обычный пользователь и у вас есть .в конце вашего PATH, но он все еще существует:

  • кто-то может узнать, что вы часто неправильно набираете команду и устанавливаете соответствующую
  • кто-то может установить поддельную команду с именем той, которая не установлена.

Обратите внимание, что в любом случае, риск все еще существует, даже если вы являетесь единственным пользователем машины. Вредоносное программное обеспечение будет установлено, если, например, вам удастся извлечь архив, загруженный с взломанного сайта.

jlliagre
источник
15
Установите, slчтобы увидеть, как часто происходит точка 3.
Иордания
или alias l=`ls`.
Анко
это не должно быть злым. Я ожидаю lsполучить список каталогов, но некоторые проекты, которые я загружаю, могут иметь lsскрипт в своей корневой папке проекта как ярлык к чему-то другому. lsэто, вероятно, плохой пример, но я, конечно, могу представить eдля редактирования, dдля отладки m, bдля сборки , для сборки. У меня есть некоторые из них во всем мире. Если я печатаю, mя ожидаю, что make запускается (мой ярлык), а не какой-то локальный скрипт, вызываемый mдля выполнения.
Человек
@ gman Хорошо. Невредоносная команда может непреднамеренно иметь нежелательные последствия. Обратите внимание, что однобуквенные команды / псевдонимы не одобрялись с момента появления Unix из-за высокого риска ошибочного ввода. Редкие стандартные есть wи [.
Jlliagre
3

Даже если вы всегда очень осторожны с тем, что печатаете, добавление .в ваш файл PATH, даже в конце, по-прежнему небезопасно, поскольку некоторые программы изменяют текущий каталог на /tmp(который доступен для записи всем пользователям) и могут также попытаться выполнить утилиты, которые на самом деле не установлены, таким образом, по умолчанию к тому, что в /tmp. Если это происходит, это вектор атаки.

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

Если вы действительно хотите иметь возможность вводить команды из текущего каталога, то современные оболочки (например, zsh с его command_not_found_handler) могут предоставить функции, позволяющие сделать это безопасно, т.е. позволить вам добавить все проверки безопасности, которые вы хотите в обработчике, до того, как Команда выполнена.

vinc17
источник